From b0713f61b43641e5d4fdf4d7a44ea58dfdc8e997 Mon Sep 17 00:00:00 2001 From: Ivan Krasin Date: Sun, 16 Jun 2013 20:29:54 -0700 Subject: [PATCH] Allow opening multiple endpoints for the same device, if configuration is also the same. --- usb/device.go | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/usb/device.go b/usb/device.go index 1264e65..bd39ce1 100644 --- a/usb/device.go +++ b/usb/device.go @@ -157,8 +157,14 @@ func (d *Device) OpenEndpoint(conf, iface, setup, epoint uint8) (Endpoint, error found: // Set the configuration - if errno := C.libusb_set_configuration(d.handle, C.int(conf)); errno < 0 { - return nil, fmt.Errorf("usb: setcfg: %s", usbError(errno)) + var activeConf C.int + if errno := C.libusb_get_configuration(d.handle, &activeConf); errno < 0 { + return nil, fmt.Errorf("usb: getcfg: %s", usbError(errno)) + } + if int(activeConf) != int(conf) { + if errno := C.libusb_set_configuration(d.handle, C.int(conf)); errno < 0 { + return nil, fmt.Errorf("usb: setcfg: %s", usbError(errno)) + } } // Claim the interface