diff options
| author | Sam Anthony <sam@samanthony.xyz> | 2025-09-17 09:58:54 -0400 |
|---|---|---|
| committer | Sam Anthony <sam@samanthony.xyz> | 2025-09-17 09:58:54 -0400 |
| commit | 27d4f9fbc3035dd6b726a02b3cc82b798de0cf58 (patch) | |
| tree | 1c9dabbcf657bd01397137b34dd99e267f0a2c67 /sw/usbcom/usb | |
| parent | 8b1ef0ce3a520d994ed73117069cc7a49fb75ca4 (diff) | |
| download | can-gauge-interface-27d4f9fbc3035dd6b726a02b3cc82b798de0cf58.zip | |
usbcom refactor
Diffstat (limited to 'sw/usbcom/usb')
| -rw-r--r-- | sw/usbcom/usb/usb.go | 65 |
1 files changed, 31 insertions, 34 deletions
diff --git a/sw/usbcom/usb/usb.go b/sw/usbcom/usb/usb.go index 1fecf4a..c920884 100644 --- a/sw/usbcom/usb/usb.go +++ b/sw/usbcom/usb/usb.go @@ -38,7 +38,7 @@ func Connect() (*Device, error) { return nil, err } - inEp, err := intf.InEndpoint(inEndpointAddr) + in, err := inEndpoint(intf) if err != nil { closeIntf() dev.Close() @@ -46,40 +46,9 @@ func Connect() (*Device, error) { return nil, err } - inEpDesc, ok := intf.Setting.Endpoints[inEndpointAddr] - if !ok { - closeIntf() - dev.Close() - ctx.Close() - return nil, fmt.Errorf("no such endpoint: %x", inEndpointAddr) - } - - in, err := inEp.NewStream(inEpDesc.MaxPacketSize, 1) - if err != nil { - closeIntf() - dev.Close() - ctx.Close() - return nil, err - } - - outEp, err := intf.OutEndpoint(outEndpointAddr) - if err != nil { - closeIntf() - dev.Close() - ctx.Close() - return nil, err - } - - outEpDesc, ok := intf.Setting.Endpoints[outEndpointAddr] - if !ok { - closeIntf() - dev.Close() - ctx.Close() - return nil, fmt.Errorf("no such endpoint: %x", outEndpointAddr) - } - - out, err := outEp.NewStream(outEpDesc.MaxPacketSize, 1) + out, err := outEndpoint(intf) if err != nil { + in.Close() closeIntf() dev.Close() ctx.Close() @@ -131,6 +100,34 @@ func interfaceByClass(dev *gousb.Device, class gousb.Class) (intf *gousb.Interfa }, nil } +func inEndpoint(intf *gousb.Interface) (*gousb.ReadStream, error) { + ep, err := intf.InEndpoint(inEndpointAddr) + if err != nil { + return nil, err + } + + desc, ok := intf.Setting.Endpoints[inEndpointAddr] + if !ok { + return nil, fmt.Errorf("no such endpoint: %x", inEndpointAddr) + } + + return ep.NewStream(desc.MaxPacketSize, 1) +} + +func outEndpoint(intf *gousb.Interface) (*gousb.WriteStream, error) { + ep, err := intf.OutEndpoint(outEndpointAddr) + if err != nil { + return nil, err + } + + desc, ok := intf.Setting.Endpoints[outEndpointAddr] + if !ok { + return nil, fmt.Errorf("no such endpoint: %x", outEndpointAddr) + } + + return ep.NewStream(desc.MaxPacketSize, 1) +} + func (dev *Device) Close() error { outErr := dev.out.Close() inErr := dev.in.Close() |