aboutsummaryrefslogtreecommitdiffstats
path: root/sw/usbcom/usb
diff options
context:
space:
mode:
authorSam Anthony <sam@samanthony.xyz>2025-09-17 09:58:54 -0400
committerSam Anthony <sam@samanthony.xyz>2025-09-17 09:58:54 -0400
commit27d4f9fbc3035dd6b726a02b3cc82b798de0cf58 (patch)
tree1c9dabbcf657bd01397137b34dd99e267f0a2c67 /sw/usbcom/usb
parent8b1ef0ce3a520d994ed73117069cc7a49fb75ca4 (diff)
downloadcan-gauge-interface-27d4f9fbc3035dd6b726a02b3cc82b798de0cf58.zip
usbcom refactor
Diffstat (limited to 'sw/usbcom/usb')
-rw-r--r--sw/usbcom/usb/usb.go65
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()