Removed port-alive-check loop on Windows implementation

This commit is contained in:
Cristian Maglie
2022-11-24 17:14:03 +01:00
parent 1b32e59871
commit 5d3a516f12

View File

@@ -26,7 +26,6 @@ import (
type windowsPort struct {
mu sync.Mutex
handle syscall.Handle
readTimeoutCycles int64
}
func nativeGetPortsList() ([]string, error) {
@@ -83,9 +82,7 @@ func (port *windowsPort) Read(p []byte) (int, error) {
}
defer syscall.CloseHandle(ev.HEvent)
cycles := int64(0)
for {
err := syscall.ReadFile(port.handle, p, &readed, ev)
err = syscall.ReadFile(port.handle, p, &readed, ev)
if err == syscall.ERROR_IO_PENDING {
err = getOverlappedResult(port.handle, ev, &readed, true)
}
@@ -99,23 +96,13 @@ func (port *windowsPort) Read(p []byte) (int, error) {
// error happened
return int(readed), err
}
if readed > 0 {
return int(readed), nil
}
if err := resetEvent(ev.HEvent); err != nil {
return 0, err
}
if port.readTimeoutCycles != -1 {
cycles++
if cycles == port.readTimeoutCycles {
// Timeout
return 0, nil
}
}
}
}
func (port *windowsPort) Write(p []byte) (int, error) {
var writed uint32
@@ -372,26 +359,24 @@ func (port *windowsPort) GetModemStatusBits() (*ModemStatusBits, error) {
}
func (port *windowsPort) SetReadTimeout(timeout time.Duration) error {
var cycles, cycleDuration int64
if timeout == NoTimeout {
cycles = -1
cycleDuration = 1000
} else {
cycles = timeout.Milliseconds()/1000 + 1
cycleDuration = timeout.Milliseconds() / cycles
}
err := setCommTimeouts(port.handle, &commTimeouts{
commTimeouts := &commTimeouts{
ReadIntervalTimeout: 0xFFFFFFFF,
ReadTotalTimeoutMultiplier: 0xFFFFFFFF,
ReadTotalTimeoutConstant: uint32(cycleDuration),
ReadTotalTimeoutConstant: 0xFFFFFFFE,
WriteTotalTimeoutConstant: 0,
WriteTotalTimeoutMultiplier: 0,
})
if err != nil {
}
if timeout != NoTimeout {
ms := timeout.Milliseconds()
if ms > 0xFFFFFFFE || ms < 0 {
return &PortError{code: InvalidTimeoutValue}
}
commTimeouts.ReadTotalTimeoutConstant = uint32(ms)
}
if err := setCommTimeouts(port.handle, commTimeouts); err != nil {
return &PortError{code: InvalidTimeoutValue, causedBy: err}
}
port.readTimeoutCycles = cycles
return nil
}