Documentation ¶
Overview ¶
Package sers offers serial port access. It is a stated goal of this package to allow for non-standard bit rates as the may be useful in a wide range of embedded projects.
Example ¶
This program opens a serial port, configurable by changing portname below and configures it for 57600 baud, 8 data bits, no parity bit, 1 stop bit, no handshaking. It then reads up to 128 bytes from the serial port, with a timeout of 1 second and prints the received bytes to stdout.
package main import ( "encoding/hex" "fmt" "log" "github.com/distributed/sers" ) // This program opens a serial port, configurable by changing portname // below and configures it for 57600 baud, 8 data bits, no parity bit, // 1 stop bit, no handshaking. It then reads up to 128 bytes from the serial // port, with a timeout of 1 second and prints the received // bytes to stdout. func main() { portname := "/dev/ttyUSB0" rb, err := readFirstBytesFromPort(portname) if err != nil { log.Fatal(err) } fmt.Printf("got %d bytes from %s:\n%s", len(rb), portname, hex.Dump(rb)) } func readFirstBytesFromPort(fn string) ([]byte, error) { sp, err := sers.Open(fn) if err != nil { return nil, err } defer sp.Close() // 57600 baud, 8 data bits, no parity bit, 1 stop bit // no handshake. non-standard baud rates are possible. err = sp.SetMode(57600, 8, sers.N, 1, sers.NO_HANDSHAKE) if err != nil { return nil, err } // setting: // minread = 0: minimal buffering on read, return characters as early as possible // timeout = 1.0: time out if after 1.0 seconds nothing is received err = sp.SetReadParams(0, 1.0) if err != nil { return nil, err } var rb [128]byte n, err := sp.Read(rb[:]) return rb[:n], err }
Output:
Index ¶
Examples ¶
Constants ¶
const ( N = 0 // no parity E = 1 // even parity O = 2 // odd parity )
const ( NO_HANDSHAKE = 0 RTSCTS_HANDSHAKE = 1 )
Variables ¶
This section is empty.
Functions ¶
func SetModeStruct ¶ added in v1.1.0
func SetModeStruct(sp SerialPort, mode Mode) error
Types ¶
type Mode ¶ added in v1.1.0
func ParseModestring ¶ added in v1.1.0
Parses a modestring like "115200,8n1,rtscts" into a struct Mode. The format is baudrate,framestring,handshake. Either the handshake part or both the framestring and handshake parts can be omitted. For the omitted parts, defaults of 8 data bits, no parity, 1 stop bit and no handshaking will be filled in. The framestring consists of a sequence databits, parity, stopbits. Any or all of the three components can be left out. Non-specified parts will take the default values mentioned before.
Valid choices for databits are [5, 6, 7, 8], for parity it is [n, o, e] and for stopbits it's [1, 2]. Valid choices for the handshake parts are "", "none" and "rtscts". The function is not case sensitive.
A couple of examples:
60000 - 60000 baud, 8 data bits, no parity, 1 stopbit, no handshake 115200,8e1 - 115200 baud, 8 data bits, even parity, 1 stopbit, no handshake 57600,8o1,rtscts - 57600 baud, 8 data bits, odd parity, 1 stopbit, rts/cts handshake 19200,72 - 19200 baud, 7 data bits, no parity, 2 stop bits, no handshake 9600,2,rtscts - 9600 baud, 8 data bits, no parity, 2 stop bits, rts/cts handshake
type ParameterError ¶
func (*ParameterError) Error ¶
func (pe *ParameterError) Error() string
type SerialPort ¶
type SerialPort interface { io.Reader io.Writer io.Closer // SetMode sets the frame format and handshaking configuration. // baudrate may be freely chosen, the driver is allowed to reject // unachievable baud rates. databits may be any number of data bits // supported by the driver. parity is one of (N|O|E) for none, odd // or even parity. handshake is either NO_HANDSHAKE or // RTSCTS_HANDSHAKE. // // Known bug on Windows: Only NO_HANDSHAKE is supported. SetMode(baudrate, databits, parity, stopbits, handshake int) error // GetMode retrieves the current mode settings. // // Known bug on OS X: GetMode only works after SetMode has been called // before. If not, it returns an error. GetMode() (Mode, error) // SetReadParams sets the minimum number of bytes to read and a read // timeout in seconds. These parameters roughly correspond to the // UNIX termios concepts of VMIN and VTIME. SetReadParams(minread int, timeout float64) error // SetBreak turns on the generation of a break condition if on == true, // otherwise it clear the break condition. SetBreak(on bool) error }
Serialport represents a serial port and offers configuration of baud rate, frame format, handshaking and read paramters as well as setting and clearing break conditions.
func Open ¶
func Open(fn string) (SerialPort, error)
func TakeOver ¶
func TakeOver(f *os.File) (SerialPort, error)
TakeOver accepts an open *os.File and returns a SerialPort representing the open file.
Attention: This calls the .Fd() method of the *os.File and thus renders the deadline functionality unusable. Furthermore blocked readers may remain stuck after a Close() if no data arrives.
type StringError ¶
type StringError string
func (StringError) Error ¶
func (se StringError) Error() string