From 50993cc77b942c131ab2a65b701301e3b2c3f038 Mon Sep 17 00:00:00 2001 From: Cristian Maglie Date: Thu, 20 Oct 2016 23:57:09 +0200 Subject: [PATCH] Factorize a function to enable/disable of RTS/CTS handshake for unix --- serial_unix.go | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/serial_unix.go b/serial_unix.go index 060cf94..c481ffb 100644 --- a/serial_unix.go +++ b/serial_unix.go @@ -72,13 +72,18 @@ func nativeOpen(portName string, mode *Mode) (*unixPort, error) { return nil, &PortError{code: InvalidSerialPort} } - // Set raw mode settings, err := port.getTermSettings() if err != nil { port.Close() return nil, &PortError{code: InvalidSerialPort} } + + // Set raw mode setRawMode(settings) + + // Explicitly disable RTS/CTS flow control + setTermSettingsCtsRts(false, settings) + if port.setTermSettings(settings) != nil { port.Close() return nil, &PortError{code: InvalidSerialPort} @@ -199,13 +204,18 @@ func setTermSettingsStopBits(bits StopBits, settings *syscall.Termios) error { 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) { // Set local mode settings.Cflag |= termiosMask(syscall.CREAD | syscall.CLOCAL) - // Explicitly disable RTS/CTS flow control - settings.Cflag &= ^termiosMask(tcCRTSCTS) - // Set raw mode settings.Lflag &= ^termiosMask(syscall.ICANON | syscall.ECHO | syscall.ECHOE | syscall.ECHOK | syscall.ECHONL | syscall.ECHOCTL | syscall.ECHOPRT | syscall.ECHOKE | syscall.ISIG | syscall.IEXTEN)