bugst / go-serial

A cross-platform serial library for go-lang.
BSD 3-Clause "New" or "Revised" License
618 stars 188 forks source link

VID/PID are strings? #108

Open aykevl opened 3 years ago

aykevl commented 3 years ago

I was pleasantly surprised the enumerator subpackage supports USB VID/PID numbers so it's possible to filter serial ports on them. However, I found that VID and PID are stored as strings? That doesn't make a lot of sense to me, as these are 16-bit numbers and we have a Go type for this: uint16. strconv.ParseUint works, but requires extra error handling and in general seems less reliable. Example code:

for _, p := range portsList {
    if !p.IsUSB {
        continue
    }
    if p.VID != "" && p.PID != "" {
        vid, vidErr := strconv.ParseUint(p.VID, 16, 16)
        pid, pidErr := strconv.ParseUint(p.PID, 16, 16)
        if vidErr == nil && pidErr == nil {
            // check for VID/PID match
        }
    }
}

Maybe this ship has sailed already (because of API breakage) but in my opinion changing this to use uint16 would make the API easier to use.

For reference: https://github.com/tinygo-org/tinygo/pull/1956

cmaglie commented 3 years ago

Maybe this ship has sailed already (because of API breakage)

Yes, that's a big problem... maybe in a future major release we may change them, but in the meantime, it's a nice idea to use uint16 so I'll probably add the "integer" fields together with the already existing ones...

May you want to open a PR for that?