64 lines
1.4 KiB
Go
64 lines
1.4 KiB
Go
/*
|
|
Package serial provides a cross-platform serial reader and writer.
|
|
*/
|
|
package serial
|
|
|
|
import (
|
|
"errors"
|
|
"io"
|
|
"time"
|
|
)
|
|
|
|
var (
|
|
// ErrTimeout is occurred when timing out.
|
|
ErrTimeout = errors.New("serial: timeout")
|
|
)
|
|
|
|
// Config is common configuration for serial port.
|
|
type Config struct {
|
|
// Device path (/dev/ttyS0)
|
|
Address string
|
|
// Baud rate (default 19200)
|
|
BaudRate int
|
|
// Data bits: 5, 6, 7 or 8 (default 8)
|
|
DataBits int
|
|
// Stop bits: 1 or 2 (default 1)
|
|
StopBits int
|
|
// Parity: N - None, E - Even, O - Odd (default E)
|
|
// (The use of no parity requires 2 stop bits.)
|
|
Parity string
|
|
// Read (Write) timeout.
|
|
Timeout time.Duration
|
|
// Configuration related to RS485
|
|
RS485 RS485Config
|
|
}
|
|
|
|
// platform independent RS485 config. Thie structure is ignored unless Enable is true.
|
|
type RS485Config struct {
|
|
// Enable RS485 support
|
|
Enabled bool
|
|
// Delay RTS prior to send
|
|
DelayRtsBeforeSend time.Duration
|
|
// Delay RTS after send
|
|
DelayRtsAfterSend time.Duration
|
|
// Set RTS high during send
|
|
RtsHighDuringSend bool
|
|
// Set RTS high after send
|
|
RtsHighAfterSend bool
|
|
// Rx during Tx
|
|
RxDuringTx bool
|
|
}
|
|
|
|
// Port is the interface for controlling serial port.
|
|
type Port interface {
|
|
io.ReadWriteCloser
|
|
// Connect connects to the serial port.
|
|
Open(*Config) error
|
|
}
|
|
|
|
// Open opens a serial port.
|
|
func Open(c *Config) (p Port, err error) {
|
|
p = New()
|
|
err = p.Open(c)
|
|
return
|
|
}
|