go-serial icon indicating copy to clipboard operation
go-serial copied to clipboard

VID/PID are strings?

Open aykevl opened this issue 3 years ago • 1 comments

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

aykevl avatar Jun 17 '21 15:06 aykevl

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?

cmaglie avatar Jun 29 '21 13:06 cmaglie