fix: incorrect masks for modem status bits on Windows

This commit is contained in:
WarningImHack3r
2025-05-07 20:44:25 +02:00
parent f0e4a45720
commit 9710c814f6

View File

@@ -280,16 +280,24 @@ func (port *windowsPort) SetRTS(rts bool) error {
return nil return nil
} }
// GetCommModemStatus constants. See https://learn.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-getcommmodemstatus.
const (
msCTSOn = 0x0010
msDSROn = 0x0020
msRingOn = 0x0040
msRLSDOn = 0x0080
)
func (port *windowsPort) GetModemStatusBits() (*ModemStatusBits, error) { func (port *windowsPort) GetModemStatusBits() (*ModemStatusBits, error) {
var bits uint32 var bits uint32
if err := windows.GetCommModemStatus(port.handle, &bits); err != nil { if err := windows.GetCommModemStatus(port.handle, &bits); err != nil {
return nil, &PortError{} return nil, &PortError{}
} }
return &ModemStatusBits{ return &ModemStatusBits{
CTS: (bits & windows.EV_CTS) != 0, CTS: (bits & msCTSOn) != 0,
DCD: (bits & windows.EV_RLSD) != 0, DCD: (bits & msRLSDOn) != 0,
DSR: (bits & windows.EV_DSR) != 0, DSR: (bits & msDSROn) != 0,
RI: (bits & windows.EV_RING) != 0, RI: (bits & msRingOn) != 0,
}, nil }, nil
} }
@@ -366,7 +374,8 @@ func nativeOpen(portName string, mode *Mode) (*windowsPort, error) {
0, nil, 0, nil,
windows.OPEN_EXISTING, windows.OPEN_EXISTING,
windows.FILE_FLAG_OVERLAPPED, windows.FILE_FLAG_OVERLAPPED,
0) 0,
)
if err != nil { if err != nil {
switch err { switch err {
case windows.ERROR_ACCESS_DENIED: case windows.ERROR_ACCESS_DENIED: