Added SetDataBits function (linux only for now)
This commit is contained in:
@@ -20,6 +20,9 @@ type SerialPort interface {
|
|||||||
|
|
||||||
// Set port parity
|
// Set port parity
|
||||||
SetParity(parity Parity) error
|
SetParity(parity Parity) error
|
||||||
|
|
||||||
|
// Set data bits
|
||||||
|
SetDataBits(bits int) error
|
||||||
}
|
}
|
||||||
|
|
||||||
type Parity int
|
type Parity int
|
||||||
@@ -44,6 +47,7 @@ const (
|
|||||||
ERROR_INVALID_SERIAL_PORT
|
ERROR_INVALID_SERIAL_PORT
|
||||||
ERROR_PERMISSION_DENIED
|
ERROR_PERMISSION_DENIED
|
||||||
ERROR_INVALID_PORT_SPEED
|
ERROR_INVALID_PORT_SPEED
|
||||||
|
ERROR_INVALID_PORT_DATA_BITS
|
||||||
ERROR_ENUMERATING_PORTS
|
ERROR_ENUMERATING_PORTS
|
||||||
ERROR_OTHER
|
ERROR_OTHER
|
||||||
)
|
)
|
||||||
@@ -60,6 +64,8 @@ func (e SerialPortError) Error() string {
|
|||||||
return "Permission denied"
|
return "Permission denied"
|
||||||
case ERROR_INVALID_PORT_SPEED:
|
case ERROR_INVALID_PORT_SPEED:
|
||||||
return "Invalid port speed"
|
return "Invalid port speed"
|
||||||
|
case ERROR_INVALID_PORT_DATA_BITS:
|
||||||
|
return "Invalid port data bits"
|
||||||
case ERROR_ENUMERATING_PORTS:
|
case ERROR_ENUMERATING_PORTS:
|
||||||
return "Could not enumerate serial ports"
|
return "Could not enumerate serial ports"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -245,6 +245,27 @@ func (port *linuxSerialPort) SetParity(parity Parity) error {
|
|||||||
return setTermSettings(port.Handle, settings)
|
return setTermSettings(port.Handle, settings)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var databitsMap = map[int]C.tcflag_t{
|
||||||
|
5: C.CS5,
|
||||||
|
6: C.CS6,
|
||||||
|
7: C.CS7,
|
||||||
|
8: C.CS8,
|
||||||
|
}
|
||||||
|
|
||||||
|
func (port *linuxSerialPort) SetDataBits(bits int) error {
|
||||||
|
databits, ok := databitsMap[bits]
|
||||||
|
if !ok {
|
||||||
|
return &SerialPortError{code: ERROR_INVALID_PORT_DATA_BITS}
|
||||||
|
}
|
||||||
|
settings, err := getTermSettings(port.Handle)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
settings.c_cflag &= ^C.tcflag_t(syscall.CSIZE)
|
||||||
|
settings.c_cflag |= databits
|
||||||
|
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 {
|
||||||
|
|||||||
@@ -33,6 +33,9 @@ func ExampleCommunication() {
|
|||||||
if err := port.SetParity(serial.PARITY_NONE); err != nil {
|
if err := port.SetParity(serial.PARITY_NONE); err != nil {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
}
|
}
|
||||||
|
if err := port.SetDataBits(8); 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 {
|
||||||
|
|||||||
Reference in New Issue
Block a user