Merge pull request #152 from cmaglie/enumerator_improvements

Retry port enumeration 5 times before giving up (macosx)
This commit is contained in:
Cristian Maglie
2023-01-02 13:00:53 +01:00
committed by GitHub

View File

@@ -14,6 +14,7 @@ import "C"
import ( import (
"errors" "errors"
"fmt" "fmt"
"time"
"unsafe" "unsafe"
) )
@@ -37,12 +38,20 @@ func nativeGetDetailedPortsList() ([]*PortDetails, error) {
} }
func extractPortInfo(service C.io_registry_entry_t) (*PortDetails, error) { func extractPortInfo(service C.io_registry_entry_t) (*PortDetails, error) {
name, err := service.GetStringProperty("IOCalloutDevice")
if err != nil {
return nil, fmt.Errorf("Error extracting port info from device: %s", err.Error())
}
port := &PortDetails{} port := &PortDetails{}
// If called too early the port may still not be ready or fully enumerated
// so we retry 5 times before returning error.
for retries := 5; retries > 0; retries-- {
name, err := service.GetStringProperty("IOCalloutDevice")
if err == nil {
port.Name = name port.Name = name
break
}
if retries == 0 {
return nil, fmt.Errorf("error extracting port info from device: %w", err)
}
time.Sleep(50 * time.Millisecond)
}
port.IsUSB = false port.IsUSB = false
validUSBDeviceClass := map[string]bool{ validUSBDeviceClass := map[string]bool{