From 980038c3ea2f7ce387e4c29aeb8adfea70c1e8de Mon Sep 17 00:00:00 2001 From: Tobias Kaupat Date: Fri, 2 Mar 2018 16:35:56 +0100 Subject: [PATCH] Allow to set initial RTS and DTR state after connect --- serial.go | 10 ++++++---- serial_unix.go | 3 +++ serial_windows.go | 8 ++++++-- 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/serial.go b/serial.go index 3e4f3b1..674069b 100644 --- a/serial.go +++ b/serial.go @@ -74,10 +74,12 @@ func GetPortsList() ([]string, error) { // Mode describes a serial port configuration. type Mode struct { - BaudRate int // The serial port bitrate (aka Baudrate) - DataBits int // Size of the character (must be 5, 6, 7 or 8) - Parity Parity // Parity (see Parity type for more info) - StopBits StopBits // Stop bits (see StopBits type for more info) + BaudRate int // The serial port bitrate (aka Baudrate) + DataBits int // Size of the character (must be 5, 6, 7 or 8) + Parity Parity // Parity (see Parity type for more info) + StopBits StopBits // Stop bits (see StopBits type for more info) + InitialRTS bool // Initial state for RTS + InitialDTR bool // Initial state for DTR } // Parity describes a serial port parity setting diff --git a/serial_unix.go b/serial_unix.go index d7c7078..2f7e1d1 100644 --- a/serial_unix.go +++ b/serial_unix.go @@ -235,6 +235,9 @@ func nativeOpen(portName string, mode *Mode) (*unixPort, error) { // Explicitly disable RTS/CTS flow control setTermSettingsCtsRts(false, settings) + port.SetDTR(mode.InitialDTR) + port.SetRTS(mode.InitialRTS) + if port.setTermSettings(settings) != nil { port.Close() return nil, &PortError{code: InvalidSerialPort} diff --git a/serial_windows.go b/serial_windows.go index af9a620..dd0715c 100644 --- a/serial_windows.go +++ b/serial_windows.go @@ -451,9 +451,13 @@ func nativeOpen(portName string, mode *Mode) (*windowsPort, error) { return nil, &PortError{code: InvalidSerialPort} } params.Flags &= dcbRTSControlDisbaleMask - params.Flags |= dcbRTSControlEnable + if mode.InitialRTS { + params.Flags |= dcbRTSControlEnable + } params.Flags &= dcbDTRControlDisableMask - params.Flags |= dcbDTRControlEnable + if mode.InitialDTR { + params.Flags |= dcbDTRControlEnable + } params.Flags &^= dcbOutXCTSFlow params.Flags &^= dcbOutXDSRFlow params.Flags &^= dcbDSRSensitivity