Merge pull request #174 from bugst/windows-multi-set-rtscts
windows: Avoid double-set of communication parameters on Open
This commit is contained in:
@@ -254,6 +254,15 @@ func (port *windowsPort) SetMode(mode *Mode) error {
|
|||||||
port.Close()
|
port.Close()
|
||||||
return &PortError{code: InvalidSerialPort}
|
return &PortError{code: InvalidSerialPort}
|
||||||
}
|
}
|
||||||
|
port.setModeParams(mode, ¶ms)
|
||||||
|
if setCommState(port.handle, ¶ms) != nil {
|
||||||
|
port.Close()
|
||||||
|
return &PortError{code: InvalidSerialPort}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (port *windowsPort) setModeParams(mode *Mode, params *dcb) {
|
||||||
if mode.BaudRate == 0 {
|
if mode.BaudRate == 0 {
|
||||||
params.BaudRate = 9600 // Default to 9600
|
params.BaudRate = 9600 // Default to 9600
|
||||||
} else {
|
} else {
|
||||||
@@ -266,11 +275,6 @@ func (port *windowsPort) SetMode(mode *Mode) error {
|
|||||||
}
|
}
|
||||||
params.StopBits = stopBitsMap[mode.StopBits]
|
params.StopBits = stopBitsMap[mode.StopBits]
|
||||||
params.Parity = parityMap[mode.Parity]
|
params.Parity = parityMap[mode.Parity]
|
||||||
if setCommState(port.handle, ¶ms) != nil {
|
|
||||||
port.Close()
|
|
||||||
return &PortError{code: InvalidSerialPort}
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (port *windowsPort) SetDTR(dtr bool) error {
|
func (port *windowsPort) SetDTR(dtr bool) error {
|
||||||
@@ -432,16 +436,12 @@ func nativeOpen(portName string, mode *Mode) (*windowsPort, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Set port parameters
|
// Set port parameters
|
||||||
if port.SetMode(mode) != nil {
|
|
||||||
port.Close()
|
|
||||||
return nil, &PortError{code: InvalidSerialPort}
|
|
||||||
}
|
|
||||||
|
|
||||||
params := &dcb{}
|
params := &dcb{}
|
||||||
if getCommState(port.handle, params) != nil {
|
if getCommState(port.handle, params) != nil {
|
||||||
port.Close()
|
port.Close()
|
||||||
return nil, &PortError{code: InvalidSerialPort}
|
return nil, &PortError{code: InvalidSerialPort}
|
||||||
}
|
}
|
||||||
|
port.setModeParams(mode, params)
|
||||||
params.Flags &= dcbDTRControlDisableMask
|
params.Flags &= dcbDTRControlDisableMask
|
||||||
params.Flags &= dcbRTSControlDisbaleMask
|
params.Flags &= dcbRTSControlDisbaleMask
|
||||||
if mode.InitialStatusBits == nil {
|
if mode.InitialStatusBits == nil {
|
||||||
|
|||||||
Reference in New Issue
Block a user