Added SetStopBits (linux only)

This commit is contained in:
Cristian Maglie
2014-12-14 18:50:29 +01:00
parent 3351cd50e0
commit f84dc80d3e
3 changed files with 28 additions and 1 deletions

View File

@@ -23,6 +23,9 @@ type SerialPort interface {
// Set data bits // Set data bits
SetDataBits(bits int) error SetDataBits(bits int) error
// Set stop bits
SetStopBits(bits StopBits) error
} }
type Parity int type Parity int
@@ -35,6 +38,14 @@ const (
PARITY_SPACE PARITY_SPACE
) )
type StopBits int
const (
STOPBITS_ONE StopBits = iota
STOPBITS_ONEPOINTFIVE
STOPBITS_TWO
)
// Platform independent error type for serial ports // Platform independent error type for serial ports
type SerialPortError struct { type SerialPortError struct {
err string err string

View File

@@ -266,6 +266,20 @@ func (port *linuxSerialPort) SetDataBits(bits int) error {
return setTermSettings(port.Handle, settings) return setTermSettings(port.Handle, settings)
} }
func (port *linuxSerialPort) SetStopBits(bits StopBits) error {
settings, err := getTermSettings(port.Handle)
if err != nil {
return err
}
switch bits {
case STOPBITS_ONE:
settings.c_cflag &= ^C.tcflag_t(syscall.CSTOPB)
case STOPBITS_ONEPOINTFIVE, STOPBITS_TWO:
settings.c_cflag |= syscall.CSTOPB
}
return setTermSettings(port.Handle, settings)
}
func OpenPort(portName string, exclusive bool) (SerialPort, error) { func OpenPort(portName string, exclusive bool) (SerialPort, error) {
handle, err := syscall.Open(portName, syscall.O_RDWR|syscall.O_NOCTTY|syscall.O_NDELAY, 0) handle, err := syscall.Open(portName, syscall.O_RDWR|syscall.O_NOCTTY|syscall.O_NDELAY, 0)
if err != nil { if err != nil {

View File

@@ -36,7 +36,9 @@ func ExampleCommunication() {
if err := port.SetDataBits(8); err != nil { if err := port.SetDataBits(8); err != nil {
log.Fatal(err) log.Fatal(err)
} }
if err := port.SetStopBits(serial.STOPBITS_ONE); err != nil {
log.Fatal(err)
}
n, err := port.Write([]byte("10,20,30\n\r")) n, err := port.Write([]byte("10,20,30\n\r"))
if err != nil { if err != nil {
log.Fatal(err) log.Fatal(err)