Slighlty improved bits handling in windows

This commit is contained in:
Cristian Maglie
2016-10-29 23:34:04 +02:00
parent bd780fd51f
commit f56a50621e

View File

@@ -91,24 +91,24 @@ func (port *windowsPort) Write(p []byte) (int, error) {
} }
const ( const (
dcbBinary = 0x00000001 dcbBinary uint32 = 0x00000001
dcbParity = 0x00000002 dcbParity = 0x00000002
dcbOutXCTSFlow = 0x00000004 dcbOutXCTSFlow = 0x00000004
dcbOutXDSRFlow = 0x00000008 dcbOutXDSRFlow = 0x00000008
dcbDTRControlDisableMask = ^0x00000030 dcbDTRControlDisableMask = ^uint32(0x00000030)
dcbDTRControlEnable = 0x00000010 dcbDTRControlEnable = 0x00000010
dcbDTRControlHandshake = 0x00000020 dcbDTRControlHandshake = 0x00000020
dcbDSRSensitivity = 0x00000040 dcbDSRSensitivity = 0x00000040
dcbTXContinueOnXOFF = 0x00000080 dcbTXContinueOnXOFF = 0x00000080
dcbOutX = 0x00000100 dcbOutX = 0x00000100
dcbInX = 0x00000200 dcbInX = 0x00000200
dcbErrorChar = 0x00000400 dcbErrorChar = 0x00000400
dcbNull = 0x00000800 dcbNull = 0x00000800
dcbRTSControlDisbaleMask = ^0x00003000 dcbRTSControlDisbaleMask = ^uint32(0x00003000)
dcbRTSControlEnable = 0x00001000 dcbRTSControlEnable = 0x00001000
dcbRTSControlHandshake = 0x00002000 dcbRTSControlHandshake = 0x00002000
dcbRTSControlToggle = 0x00003000 dcbRTSControlToggle = 0x00003000
dcbAbortOnError = 0x00004000 dcbAbortOnError = 0x00004000
) )
type dcb struct { type dcb struct {
@@ -249,15 +249,19 @@ func nativeOpen(portName string, mode *Mode) (*windowsPort, error) {
port.Close() port.Close()
return nil, &PortError{code: InvalidSerialPort} return nil, &PortError{code: InvalidSerialPort}
} }
params.Flags |= dcbRTSControlEnable | dcbDTRControlEnable params.Flags &= dcbRTSControlDisbaleMask
params.Flags &= ^uint32(dcbOutXCTSFlow) params.Flags |= dcbRTSControlEnable
params.Flags &= ^uint32(dcbOutXDSRFlow) params.Flags &= dcbDTRControlDisableMask
params.Flags &= ^uint32(dcbDSRSensitivity) params.Flags |= dcbDTRControlEnable
params.Flags &^= dcbOutXCTSFlow
params.Flags &^= dcbOutXDSRFlow
params.Flags &^= dcbDSRSensitivity
params.Flags |= dcbTXContinueOnXOFF params.Flags |= dcbTXContinueOnXOFF
params.Flags &= ^uint32(dcbInX | dcbOutX) params.Flags &^= dcbInX
params.Flags &= ^uint32(dcbErrorChar) params.Flags &^= dcbOutX
params.Flags &= ^uint32(dcbNull) params.Flags &^= dcbErrorChar
params.Flags &= ^uint32(dcbAbortOnError) params.Flags &^= dcbNull
params.Flags &^= dcbAbortOnError
params.XonLim = 2048 params.XonLim = 2048
params.XoffLim = 512 params.XoffLim = 512
params.XonChar = 17 // DC1 params.XonChar = 17 // DC1