diff options
author | Chris Dickens <christopher.a.dickens@gmail.com> | 2015-07-28 22:51:09 -0700 |
---|---|---|
committer | Chris Dickens <christopher.a.dickens@gmail.com> | 2015-07-28 23:10:24 -0700 |
commit | 649a500750654ec89c9488d20b4ea3cf649068f9 (patch) | |
tree | 10db6e2b1802825e546ef7e81a67c4d910098d53 | |
parent | b31e7f871287a0927f0391a4d7c4334570b2c5f1 (diff) | |
download | libusb-649a500750654ec89c9488d20b4ea3cf649068f9.tar.gz |
Windows: Close HID handles when closing composite devices
* Closes #81
Signed-off-by: Chris Dickens <christopher.a.dickens@gmail.com>
-rw-r--r-- | libusb/os/windows_usb.c | 25 | ||||
-rw-r--r-- | libusb/version_nano.h | 2 |
2 files changed, 17 insertions, 10 deletions
diff --git a/libusb/os/windows_usb.c b/libusb/os/windows_usb.c index 734c47e..f505139 100644 --- a/libusb/os/windows_usb.c +++ b/libusb/os/windows_usb.c @@ -4425,24 +4425,31 @@ static void composite_close(int sub_api, struct libusb_device_handle *dev_handle { struct windows_device_priv *priv = _device_priv(dev_handle->dev); uint8_t i; - bool available[SUB_API_MAX]; - - for (i = 0; i<SUB_API_MAX; i++) { - available[i] = false; - } + // SUB_API_MAX+1 as the SUB_API_MAX pos is used to indicate availability of HID + bool available[SUB_API_MAX+1] = {0}; for (i=0; i<USB_MAXINTERFACES; i++) { - if ( (priv->usb_interface[i].apib->id == USB_API_WINUSBX) - && (priv->usb_interface[i].sub_api != SUB_API_NOTSET) ) { - available[priv->usb_interface[i].sub_api] = true; + switch (priv->usb_interface[i].apib->id) { + case USB_API_WINUSBX: + if (priv->usb_interface[i].sub_api != SUB_API_NOTSET) + available[priv->usb_interface[i].sub_api] = true; + break; + case USB_API_HID: + available[SUB_API_MAX] = true; + break; + default: + break; } } - for (i=0; i<SUB_API_MAX; i++) { + for (i=0; i<SUB_API_MAX; i++) { // WinUSB-like drivers if (available[i]) { usb_api_backend[USB_API_WINUSBX].close(i, dev_handle); } } + if (available[SUB_API_MAX]) { // HID driver + hid_close(SUB_API_NOTSET, dev_handle); + } } static int composite_claim_interface(int sub_api, struct libusb_device_handle *dev_handle, int iface) diff --git a/libusb/version_nano.h b/libusb/version_nano.h index 1135a18..248dd43 100644 --- a/libusb/version_nano.h +++ b/libusb/version_nano.h @@ -1 +1 @@ -#define LIBUSB_NANO 10987 +#define LIBUSB_NANO 10988 |