From 153d25b18370ada09945f7dd7c24ac0e0a3a147c Mon Sep 17 00:00:00 2001 From: Hubert Feurstein Date: Mon, 24 Mar 2025 16:55:12 +0100 Subject: [PATCH] add rts/cts flow-control support --- serial.go | 1 + serial_unix.go | 4 ++-- serial_windows.go | 8 +++++++- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/serial.go b/serial.go index a2f7333..2494655 100644 --- a/serial.go +++ b/serial.go @@ -101,6 +101,7 @@ type Mode struct { Parity Parity // Parity (see Parity type for more info) StopBits StopBits // Stop bits (see StopBits type for more info) InitialStatusBits *ModemOutputBits // Initial output modem bits status (if nil defaults to DTR=true and RTS=true) + RTSCTSFlowControl bool // Enable RTS/CTS hardware flow control } // Parity describes a serial port parity setting diff --git a/serial_unix.go b/serial_unix.go index e6913c2..b4dda37 100644 --- a/serial_unix.go +++ b/serial_unix.go @@ -238,8 +238,8 @@ func nativeOpen(portName string, mode *Mode) (*unixPort, error) { // Set raw mode setRawMode(settings) - // Explicitly disable RTS/CTS flow control - setTermSettingsCtsRts(false, settings) + // Explicitly enable/disable RTS/CTS flow control + setTermSettingsCtsRts(mode.RTSCTSFlowControl, settings) if err = port.setTermSettings(settings); err != nil { port.Close() diff --git a/serial_windows.go b/serial_windows.go index 37b3b39..8114cf5 100644 --- a/serial_windows.go +++ b/serial_windows.go @@ -388,7 +388,13 @@ func nativeOpen(portName string, mode *Mode) (*windowsPort, error) { params.Flags |= windows.RTS_CONTROL_ENABLE } } - params.Flags &^= dcbOutXCTSFlow + + if mode.RTSCTSFlowControl { + params.Flags |= dcbOutXCTSFlow + } else { + params.Flags &^= dcbOutXCTSFlow + } + params.Flags &^= dcbOutXDSRFlow params.Flags &^= dcbDSRSensitivity params.Flags |= dcbTXContinueOnXOFF