Factorize a function to enable/disable of RTS/CTS handshake for unix
This commit is contained in:
@@ -72,13 +72,18 @@ func nativeOpen(portName string, mode *Mode) (*unixPort, error) {
|
|||||||
return nil, &PortError{code: InvalidSerialPort}
|
return nil, &PortError{code: InvalidSerialPort}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set raw mode
|
|
||||||
settings, err := port.getTermSettings()
|
settings, err := port.getTermSettings()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
port.Close()
|
port.Close()
|
||||||
return nil, &PortError{code: InvalidSerialPort}
|
return nil, &PortError{code: InvalidSerialPort}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Set raw mode
|
||||||
setRawMode(settings)
|
setRawMode(settings)
|
||||||
|
|
||||||
|
// Explicitly disable RTS/CTS flow control
|
||||||
|
setTermSettingsCtsRts(false, settings)
|
||||||
|
|
||||||
if port.setTermSettings(settings) != nil {
|
if port.setTermSettings(settings) != nil {
|
||||||
port.Close()
|
port.Close()
|
||||||
return nil, &PortError{code: InvalidSerialPort}
|
return nil, &PortError{code: InvalidSerialPort}
|
||||||
@@ -199,13 +204,18 @@ func setTermSettingsStopBits(bits StopBits, settings *syscall.Termios) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func setTermSettingsCtsRts(enable bool, settings *syscall.Termios) {
|
||||||
|
if enable {
|
||||||
|
settings.Cflag |= termiosMask(tcCRTSCTS)
|
||||||
|
} else {
|
||||||
|
settings.Cflag &= ^termiosMask(tcCRTSCTS)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func setRawMode(settings *syscall.Termios) {
|
func setRawMode(settings *syscall.Termios) {
|
||||||
// Set local mode
|
// Set local mode
|
||||||
settings.Cflag |= termiosMask(syscall.CREAD | syscall.CLOCAL)
|
settings.Cflag |= termiosMask(syscall.CREAD | syscall.CLOCAL)
|
||||||
|
|
||||||
// Explicitly disable RTS/CTS flow control
|
|
||||||
settings.Cflag &= ^termiosMask(tcCRTSCTS)
|
|
||||||
|
|
||||||
// Set raw mode
|
// Set raw mode
|
||||||
settings.Lflag &= ^termiosMask(syscall.ICANON | syscall.ECHO | syscall.ECHOE | syscall.ECHOK |
|
settings.Lflag &= ^termiosMask(syscall.ICANON | syscall.ECHO | syscall.ECHOE | syscall.ECHOK |
|
||||||
syscall.ECHONL | syscall.ECHOCTL | syscall.ECHOPRT | syscall.ECHOKE | syscall.ISIG | syscall.IEXTEN)
|
syscall.ECHONL | syscall.ECHOCTL | syscall.ECHOPRT | syscall.ECHOKE | syscall.ISIG | syscall.IEXTEN)
|
||||||
|
|||||||
Reference in New Issue
Block a user