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
Directories
¶
| Path | Synopsis |
|---|---|
|
verification
|
|
|
breakpulse
command
|
|
|
readclose
command
|
|
|
setbaudrate
command
|
|
|
setgetmode
command
|