core: Narrow the types passed to certain backend functions
authorChris Dickens <christopher.a.dickens@gmail.com>
Wed, 29 Apr 2020 05:04:11 +0000 (22:04 -0700)
committerChris Dickens <christopher.a.dickens@gmail.com>
Wed, 29 Apr 2020 05:04:11 +0000 (22:04 -0700)
Backend functions dealing with interfaces and alternate settings should
use a type whose range represents that of valid values for interfaces
and alternate settings. Switch to use uint8_t instead of int so that
backends do not have to cast values or do range checks.

Signed-off-by: Chris Dickens <christopher.a.dickens@gmail.com>
18 files changed:
libusb/core.c
libusb/libusbi.h
libusb/os/darwin_usb.c
libusb/os/darwin_usb.h
libusb/os/haiku_usb.h
libusb/os/haiku_usb_backend.cpp
libusb/os/haiku_usb_raw.cpp
libusb/os/linux_usbfs.c
libusb/os/netbsd_usb.c
libusb/os/null_usb.c
libusb/os/openbsd_usb.c
libusb/os/sunos_usb.c
libusb/os/windows_common.c
libusb/os/windows_common.h
libusb/os/windows_usbdk.c
libusb/os/windows_winusb.c
libusb/os/windows_winusb.h
libusb/version_nano.h

index 00af3eb..aadabd0 100644 (file)
@@ -1561,29 +1561,30 @@ int API_EXPORTED libusb_get_configuration(libusb_device_handle *dev_handle,
        int *config)
 {
        int r = LIBUSB_ERROR_NOT_SUPPORTED;
+       uint8_t tmp = 0;
 
        usbi_dbg(" ");
        if (usbi_backend.get_configuration)
-               r = usbi_backend.get_configuration(dev_handle, config);
+               r = usbi_backend.get_configuration(dev_handle, &tmp);
 
        if (r == LIBUSB_ERROR_NOT_SUPPORTED) {
-               uint8_t tmp = 0;
                usbi_dbg("falling back to control message");
                r = libusb_control_transfer(dev_handle, LIBUSB_ENDPOINT_IN,
                        LIBUSB_REQUEST_GET_CONFIGURATION, 0, 0, &tmp, 1, 1000);
-               if (r == 0) {
+               if (r == 1) {
+                       r = 0;
+               } else if (r == 0) {
                        usbi_err(HANDLE_CTX(dev_handle), "zero bytes returned in ctrl transfer?");
                        r = LIBUSB_ERROR_IO;
-               } else if (r == 1) {
-                       r = 0;
-                       *config = tmp;
                } else {
                        usbi_dbg("control failed, error %d", r);
                }
        }
 
-       if (r == 0)
-               usbi_dbg("active config %d", *config);
+       if (r == 0) {
+               usbi_dbg("active config %u", tmp);
+               *config = (int)tmp;
+       }
 
        return r;
 }
@@ -1688,7 +1689,7 @@ int API_EXPORTED libusb_claim_interface(libusb_device_handle *dev_handle,
        if (dev_handle->claimed_interfaces & (1U << interface_number))
                goto out;
 
-       r = usbi_backend.claim_interface(dev_handle, interface_number);
+       r = usbi_backend.claim_interface(dev_handle, (uint8_t)interface_number);
        if (r == 0)
                dev_handle->claimed_interfaces |= 1U << interface_number;
 
@@ -1731,7 +1732,7 @@ int API_EXPORTED libusb_release_interface(libusb_device_handle *dev_handle,
                goto out;
        }
 
-       r = usbi_backend.release_interface(dev_handle, interface_number);
+       r = usbi_backend.release_interface(dev_handle, (uint8_t)interface_number);
        if (r == 0)
                dev_handle->claimed_interfaces &= ~(1U << interface_number);
 
@@ -1783,8 +1784,8 @@ int API_EXPORTED libusb_set_interface_alt_setting(libusb_device_handle *dev_hand
        }
        usbi_mutex_unlock(&dev_handle->lock);
 
-       return usbi_backend.set_interface_altsetting(dev_handle, interface_number,
-               alternate_setting);
+       return usbi_backend.set_interface_altsetting(dev_handle,
+               (uint8_t)interface_number, (uint8_t)alternate_setting);
 }
 
 /** \ingroup libusb_dev
@@ -1996,7 +1997,7 @@ int API_EXPORTED libusb_kernel_driver_active(libusb_device_handle *dev_handle,
                return LIBUSB_ERROR_NO_DEVICE;
 
        if (usbi_backend.kernel_driver_active)
-               return usbi_backend.kernel_driver_active(dev_handle, interface_number);
+               return usbi_backend.kernel_driver_active(dev_handle, (uint8_t)interface_number);
        else
                return LIBUSB_ERROR_NOT_SUPPORTED;
 }
@@ -2034,7 +2035,7 @@ int API_EXPORTED libusb_detach_kernel_driver(libusb_device_handle *dev_handle,
                return LIBUSB_ERROR_NO_DEVICE;
 
        if (usbi_backend.detach_kernel_driver)
-               return usbi_backend.detach_kernel_driver(dev_handle, interface_number);
+               return usbi_backend.detach_kernel_driver(dev_handle, (uint8_t)interface_number);
        else
                return LIBUSB_ERROR_NOT_SUPPORTED;
 }
@@ -2071,7 +2072,7 @@ int API_EXPORTED libusb_attach_kernel_driver(libusb_device_handle *dev_handle,
                return LIBUSB_ERROR_NO_DEVICE;
 
        if (usbi_backend.attach_kernel_driver)
-               return usbi_backend.attach_kernel_driver(dev_handle, interface_number);
+               return usbi_backend.attach_kernel_driver(dev_handle, (uint8_t)interface_number);
        else
                return LIBUSB_ERROR_NOT_SUPPORTED;
 }
index 9826bec..3c5add6 100644 (file)
@@ -942,7 +942,7 @@ struct usbi_os_backend {
         *   blocking
         * - another LIBUSB_ERROR code on other failure.
         */
-       int (*get_configuration)(struct libusb_device_handle *dev_handle, int *config);
+       int (*get_configuration)(struct libusb_device_handle *dev_handle, uint8_t *config);
 
        /* Set the active configuration for a device.
         *
@@ -978,7 +978,7 @@ struct usbi_os_backend {
         *   was opened
         * - another LIBUSB_ERROR code on other failure
         */
-       int (*claim_interface)(struct libusb_device_handle *dev_handle, int interface_number);
+       int (*claim_interface)(struct libusb_device_handle *dev_handle, uint8_t interface_number);
 
        /* Release a previously claimed interface.
         *
@@ -995,7 +995,7 @@ struct usbi_os_backend {
         *   was opened
         * - another LIBUSB_ERROR code on other failure
         */
-       int (*release_interface)(struct libusb_device_handle *dev_handle, int interface_number);
+       int (*release_interface)(struct libusb_device_handle *dev_handle, uint8_t interface_number);
 
        /* Set the alternate setting for an interface.
         *
@@ -1012,7 +1012,7 @@ struct usbi_os_backend {
         * - another LIBUSB_ERROR code on other failure
         */
        int (*set_interface_altsetting)(struct libusb_device_handle *dev_handle,
-               int interface_number, int altsetting);
+               uint8_t interface_number, uint8_t altsetting);
 
        /* Clear a halt/stall condition on an endpoint.
         *
@@ -1076,7 +1076,7 @@ struct usbi_os_backend {
         * - another LIBUSB_ERROR code on other failure
         */
        int (*kernel_driver_active)(struct libusb_device_handle *dev_handle,
-               int interface_number);
+               uint8_t interface_number);
 
        /* Detach a kernel driver from an interface. Optional.
         *
@@ -1092,7 +1092,7 @@ struct usbi_os_backend {
         * - another LIBUSB_ERROR code on other failure
         */
        int (*detach_kernel_driver)(struct libusb_device_handle *dev_handle,
-               int interface_number);
+               uint8_t interface_number);
 
        /* Attach a kernel driver to an interface. Optional.
         *
@@ -1109,7 +1109,7 @@ struct usbi_os_backend {
         * - another LIBUSB_ERROR code on other failure
         */
        int (*attach_kernel_driver)(struct libusb_device_handle *dev_handle,
-               int interface_number);
+               uint8_t interface_number);
 
        /* Destroy a device. Optional.
         *
index de5ce9c..58944be 100644 (file)
@@ -76,8 +76,8 @@ static const char *darwin_device_class = kIOUSBDeviceClassName;
 static pthread_t libusb_darwin_at;
 
 static int darwin_get_config_descriptor(struct libusb_device *dev, uint8_t config_index, void *buffer, size_t len);
-static int darwin_claim_interface(struct libusb_device_handle *dev_handle, int iface);
-static int darwin_release_interface(struct libusb_device_handle *dev_handle, int iface);
+static int darwin_claim_interface(struct libusb_device_handle *dev_handle, uint8_t iface);
+static int darwin_release_interface(struct libusb_device_handle *dev_handle, uint8_t iface);
 static int darwin_reset_device(struct libusb_device_handle *dev_handle);
 static void darwin_async_io_callback (void *refcon, IOReturn result, void *arg0);
 
@@ -661,7 +661,7 @@ static void darwin_exit (struct libusb_context *ctx) {
   pthread_mutex_unlock (&libusb_darwin_init_mutex);
 }
 
-static int get_configuration_index (struct libusb_device *dev, int config_value) {
+static int get_configuration_index (struct libusb_device *dev, UInt8 config_value) {
   struct darwin_cached_device *priv = DARWIN_CACHED_DEVICE(dev);
   UInt8 i, numConfig;
   IOUSBConfigurationDescriptorPtr desc;
@@ -784,7 +784,7 @@ static enum libusb_error darwin_check_configuration (struct libusb_context *ctx,
   } else
     /* not configured */
     dev->active_config = 0;
-  
+
   usbi_dbg ("active config: %u, first config: %u", dev->active_config, dev->first_config);
 
   return LIBUSB_SUCCESS;
@@ -1280,10 +1280,10 @@ static void darwin_close (struct libusb_device_handle *dev_handle) {
   }
 }
 
-static int darwin_get_configuration(struct libusb_device_handle *dev_handle, int *config) {
+static int darwin_get_configuration(struct libusb_device_handle *dev_handle, uint8_t *config) {
   struct darwin_cached_device *dpriv = DARWIN_CACHED_DEVICE(dev_handle->dev);
 
-  *config = (int) dpriv->active_config;
+  *config = dpriv->active_config;
 
   return LIBUSB_SUCCESS;
 }
@@ -1291,9 +1291,10 @@ static int darwin_get_configuration(struct libusb_device_handle *dev_handle, int
 static enum libusb_error darwin_set_configuration(struct libusb_device_handle *dev_handle, int config) {
   struct darwin_cached_device *dpriv = DARWIN_CACHED_DEVICE(dev_handle->dev);
   IOReturn kresult;
-  int i;
+  uint8_t i;
 
-  assert(config >= 0 && config <= UINT8_MAX);
+  if (config == -1)
+    config = 0;
 
   /* Setting configuration will invalidate the interface, so we need
      to reclaim it. First, dispose of existing interfaces, if any. */
@@ -1315,7 +1316,7 @@ static enum libusb_error darwin_set_configuration(struct libusb_device_handle *d
   return LIBUSB_SUCCESS;
 }
 
-static IOReturn darwin_get_interface (usb_device_t **darwin_device, int ifc, io_service_t *usbInterfacep) {
+static IOReturn darwin_get_interface (usb_device_t **darwin_device, uint8_t ifc, io_service_t *usbInterfacep) {
   IOUSBFindInterfaceRequest request;
   IOReturn                  kresult;
   io_iterator_t             interface_iterator;
@@ -1352,7 +1353,7 @@ static IOReturn darwin_get_interface (usb_device_t **darwin_device, int ifc, io_
   return kIOReturnSuccess;
 }
 
-static enum libusb_error get_endpoints (struct libusb_device_handle *dev_handle, int iface) {
+static enum libusb_error get_endpoints (struct libusb_device_handle *dev_handle, uint8_t iface) {
   struct darwin_device_handle_priv *priv = usbi_get_device_handle_priv(dev_handle);
 
   /* current interface */
@@ -1412,7 +1413,7 @@ static enum libusb_error get_endpoints (struct libusb_device_handle *dev_handle,
   return LIBUSB_SUCCESS;
 }
 
-static int darwin_claim_interface(struct libusb_device_handle *dev_handle, int iface) {
+static int darwin_claim_interface(struct libusb_device_handle *dev_handle, uint8_t iface) {
   struct darwin_cached_device *dpriv = DARWIN_CACHED_DEVICE(dev_handle->dev);
   struct darwin_device_handle_priv *priv = usbi_get_device_handle_priv(dev_handle);
   io_service_t          usbInterface = IO_OBJECT_NULL;
@@ -1421,12 +1422,10 @@ static int darwin_claim_interface(struct libusb_device_handle *dev_handle, int i
   IOCFPlugInInterface **plugInInterface = NULL;
   SInt32                score;
 
-  assert(iface >= 0 && iface <= UINT8_MAX);
-
   /* current interface */
   struct darwin_interface *cInterface = &priv->interfaces[iface];
 
-  kresult = darwin_get_interface (dpriv->device, (uint8_t)iface, &usbInterface);
+  kresult = darwin_get_interface (dpriv->device, iface, &usbInterface);
   if (kresult != kIOReturnSuccess)
     return darwin_to_libusb (kresult);
 
@@ -1435,13 +1434,13 @@ static int darwin_claim_interface(struct libusb_device_handle *dev_handle, int i
     usbi_info (HANDLE_CTX (dev_handle), "no interface found; setting configuration: %d", dpriv->first_config);
 
     /* set the configuration */
-    ret = darwin_set_configuration (dev_handle, dpriv->first_config);
+    ret = darwin_set_configuration (dev_handle, (int) dpriv->first_config);
     if (ret != LIBUSB_SUCCESS) {
       usbi_err (HANDLE_CTX (dev_handle), "could not set configuration");
       return ret;
     }
 
-    kresult = darwin_get_interface (dpriv->device, (uint8_t)iface, &usbInterface);
+    kresult = darwin_get_interface (dpriv->device, iface, &usbInterface);
     if (kresult != kIOReturnSuccess) {
       usbi_err (HANDLE_CTX (dev_handle), "darwin_get_interface: %s", darwin_error_str(kresult));
       return darwin_to_libusb (kresult);
@@ -1519,7 +1518,7 @@ static int darwin_claim_interface(struct libusb_device_handle *dev_handle, int i
   return LIBUSB_SUCCESS;
 }
 
-static int darwin_release_interface(struct libusb_device_handle *dev_handle, int iface) {
+static int darwin_release_interface(struct libusb_device_handle *dev_handle, uint8_t iface) {
   struct darwin_device_handle_priv *priv = usbi_get_device_handle_priv(dev_handle);
   IOReturn kresult;
 
@@ -1552,7 +1551,7 @@ static int darwin_release_interface(struct libusb_device_handle *dev_handle, int
   return darwin_to_libusb (kresult);
 }
 
-static int darwin_set_interface_altsetting(struct libusb_device_handle *dev_handle, int iface, int altsetting) {
+static int darwin_set_interface_altsetting(struct libusb_device_handle *dev_handle, uint8_t iface, uint8_t altsetting) {
   struct darwin_device_handle_priv *priv = usbi_get_device_handle_priv(dev_handle);
   IOReturn kresult;
   enum libusb_error ret;
@@ -1563,8 +1562,7 @@ static int darwin_set_interface_altsetting(struct libusb_device_handle *dev_hand
   if (!cInterface->interface)
     return LIBUSB_ERROR_NO_DEVICE;
 
-  assert(altsetting >= 0 && altsetting <= UINT8_MAX);
-  kresult = (*(cInterface->interface))->SetAlternateInterface (cInterface->interface, (UInt8)altsetting);
+  kresult = (*(cInterface->interface))->SetAlternateInterface (cInterface->interface, altsetting);
   if (kresult != kIOReturnSuccess)
     darwin_reset_device (dev_handle);
 
@@ -1639,16 +1637,16 @@ static int darwin_restore_state (struct libusb_device_handle *dev_handle, int8_t
   usbi_dbg ("darwin/restore_state: reclaiming interfaces");
 
   if (claimed_interfaces) {
-    for (int iface = 0 ; iface < USB_MAXINTERFACES ; ++iface) {
+    for (uint8_t iface = 0 ; iface < USB_MAXINTERFACES ; ++iface) {
       if (!(claimed_interfaces & (1U << iface))) {
         continue;
       }
 
-      usbi_dbg ("darwin/restore_state: re-claiming interface %d", iface);
+      usbi_dbg ("darwin/restore_state: re-claiming interface %u", iface);
 
       ret = darwin_claim_interface (dev_handle, iface);
       if (LIBUSB_SUCCESS != ret) {
-        usbi_dbg ("darwin/restore_state: could not claim interface %d", iface);
+        usbi_dbg ("darwin/restore_state: could not claim interface %u", iface);
         return LIBUSB_ERROR_NOT_FOUND;
       }
 
@@ -1724,14 +1722,13 @@ static int darwin_reset_device(struct libusb_device_handle *dev_handle) {
   return darwin_restore_state (dev_handle, active_config, claimed_interfaces);
 }
 
-static int darwin_kernel_driver_active(struct libusb_device_handle *dev_handle, int interface) {
+static int darwin_kernel_driver_active(struct libusb_device_handle *dev_handle, uint8_t interface) {
   struct darwin_cached_device *dpriv = DARWIN_CACHED_DEVICE(dev_handle->dev);
   io_service_t usbInterface;
   CFTypeRef driver;
   IOReturn kresult;
 
-  assert(interface >= 0 && interface <= UINT8_MAX);
-  kresult = darwin_get_interface (dpriv->device, (uint8_t)interface, &usbInterface);
+  kresult = darwin_get_interface (dpriv->device, interface, &usbInterface);
   if (kresult != kIOReturnSuccess) {
     usbi_err (HANDLE_CTX (dev_handle), "darwin_get_interface: %s", darwin_error_str(kresult));
 
index 3d76baf..b799bfd 100644 (file)
@@ -162,7 +162,7 @@ struct darwin_cached_device {
   char                  sys_path[21];
   usb_device_t        **device;
   int                   open_count;
-  UInt8                 first_config, active_config, port;  
+  UInt8                 first_config, active_config, port;
   int                   can_enumerate;
   int                   refcount;
   bool                  in_reenumerate;
index 9a87859..2dd5177 100644 (file)
@@ -42,8 +42,8 @@ public:
        const usb_configuration_descriptor*     ActiveConfiguration() const;
        uint8                                   EndpointToIndex(uint8) const;
        uint8                                   EndpointToInterface(uint8) const;
-       int                                     ClaimInterface(int);
-       int                                     ReleaseInterface(int);
+       int                                     ClaimInterface(uint8);
+       int                                     ReleaseInterface(uint8);
        int                                     CheckInterfacesFree(uint8);
        void                                    SetActiveConfiguration(uint8);
        uint8                                   ActiveConfigurationIndex() const;
@@ -65,10 +65,10 @@ class USBDeviceHandle {
 public:
                                USBDeviceHandle(USBDevice *dev);
        virtual                 ~USBDeviceHandle();
-       int                     ClaimInterface(int);
-       int                     ReleaseInterface(int);
+       int                     ClaimInterface(uint8);
+       int                     ReleaseInterface(uint8);
        int                     SetConfiguration(uint8);
-       int                     SetAltSetting(int, int);
+       int                     SetAltSetting(uint8, uint8);
        int                     ClearHalt(uint8);
        status_t                SubmitTransfer(struct usbi_transfer *);
        status_t                CancelTransfer(USBTransfer *);
index 2b6ad71..8bbf3e0 100644 (file)
@@ -252,7 +252,7 @@ USBDeviceHandle::~USBDeviceHandle()
 }
 
 int
-USBDeviceHandle::ClaimInterface(int inumber)
+USBDeviceHandle::ClaimInterface(uint8 inumber)
 {
        int status = fUSBDevice->ClaimInterface(inumber);
        if (status == LIBUSB_SUCCESS)
@@ -261,7 +261,7 @@ USBDeviceHandle::ClaimInterface(int inumber)
 }
 
 int
-USBDeviceHandle::ReleaseInterface(int inumber)
+USBDeviceHandle::ReleaseInterface(uint8 inumber)
 {
        fUSBDevice->ReleaseInterface(inumber);
        fClaimedInterfaces &= ~(1U << inumber);
@@ -285,7 +285,7 @@ USBDeviceHandle::SetConfiguration(uint8 config)
 }
 
 int
-USBDeviceHandle::SetAltSetting(int inumber, int alt)
+USBDeviceHandle::SetAltSetting(uint8 inumber, uint8 alt)
 {
        usb_raw_command command;
        command.alternate.config_index = fUSBDevice->ActiveConfigurationIndex();
@@ -401,7 +401,7 @@ USBDevice::ActiveConfigurationIndex() const
        return fActiveConfiguration;
 }
 
-int USBDevice::ClaimInterface(int interface)
+int USBDevice::ClaimInterface(uint8 interface)
 {
        if (interface > ActiveConfiguration()->number_interfaces)
                return LIBUSB_ERROR_NOT_FOUND;
@@ -411,7 +411,7 @@ int USBDevice::ClaimInterface(int interface)
        return LIBUSB_SUCCESS;
 }
 
-int USBDevice::ReleaseInterface(int interface)
+int USBDevice::ReleaseInterface(uint8 interface)
 {
        fClaimedInterfaces &= ~(1U << interface);
        return LIBUSB_SUCCESS;
index a9fb6b8..bce706c 100644 (file)
@@ -108,14 +108,14 @@ haiku_set_configuration(struct libusb_device_handle *dev_handle, int config)
 }
 
 static int
-haiku_claim_interface(struct libusb_device_handle *dev_handle, int interface_number)
+haiku_claim_interface(struct libusb_device_handle *dev_handle, uint8_t interface_number)
 {
        USBDeviceHandle *handle = *((USBDeviceHandle **)usbi_get_device_handle_priv(dev_handle));
        return handle->ClaimInterface(interface_number);
 }
 
 static int
-haiku_set_altsetting(struct libusb_device_handle *dev_handle, int interface_number, int altsetting)
+haiku_set_altsetting(struct libusb_device_handle *dev_handle, uint8_t interface_number, uint8_t altsetting)
 {
        USBDeviceHandle *handle = *((USBDeviceHandle **)usbi_get_device_handle_priv(dev_handle));
        return handle->SetAltSetting(interface_number, altsetting);
@@ -129,10 +129,10 @@ haiku_clear_halt(struct libusb_device_handle *dev_handle, unsigned char endpoint
 }
 
 static int
-haiku_release_interface(struct libusb_device_handle *dev_handle, int interface_number)
+haiku_release_interface(struct libusb_device_handle *dev_handle, uint8_t interface_number)
 {
        USBDeviceHandle *handle = *((USBDeviceHandle **)usbi_get_device_handle_priv(dev_handle));
-       haiku_set_altsetting(dev_handle,interface_number, 0);
+       haiku_set_altsetting(dev_handle, interface_number, 0);
        return handle->ReleaseInterface(interface_number);
 }
 
index cfa9402..020db0d 100644 (file)
@@ -100,7 +100,7 @@ static usbi_mutex_static_t linux_hotplug_startstop_lock = USBI_MUTEX_INITIALIZER
 usbi_mutex_static_t linux_hotplug_lock = USBI_MUTEX_INITIALIZER;
 
 static int linux_scan_devices(struct libusb_context *ctx);
-static int detach_kernel_driver_and_claim(struct libusb_device_handle *, int);
+static int detach_kernel_driver_and_claim(struct libusb_device_handle *, uint8_t);
 
 #if !defined(HAVE_LIBUDEV)
 static int linux_default_scan_devices(struct libusb_context *ctx);
@@ -116,7 +116,7 @@ struct linux_device_priv {
        char *sysfs_dir;
        unsigned char *descriptors;
        int descriptors_len;
-       int active_config; /* cache val for !sysfs_available  */
+       uint8_t active_config; /* cache val for !sysfs_available  */
 };
 
 struct linux_device_handle_priv {
@@ -529,18 +529,20 @@ static int sysfs_scan_device(struct libusb_context *ctx, const char *devname)
 }
 
 /* read the bConfigurationValue for a device */
-static int sysfs_get_active_config(struct libusb_device *dev, int *config)
+static int sysfs_get_active_config(struct libusb_device *dev, uint8_t *config)
 {
        struct linux_device_priv *priv = usbi_get_device_priv(dev);
-       int ret;
+       int ret, tmp;
 
        ret = read_sysfs_attr(DEVICE_CTX(dev), priv->sysfs_dir, "bConfigurationValue",
-                               UINT8_MAX, config);
+                             UINT8_MAX, &tmp);
        if (ret < 0)
                return ret;
 
-       if (*config == -1)
-               usbi_dbg("device unconfigured");
+       if (tmp == -1)
+               tmp = 0;        /* unconfigured */
+
+       *config = (uint8_t)tmp;
 
        return 0;
 }
@@ -716,21 +718,25 @@ static int op_get_active_config_descriptor(struct libusb_device *dev,
        void *buffer, size_t len)
 {
        struct linux_device_priv *priv = usbi_get_device_priv(dev);
-       int r, config;
        void *config_desc;
+       uint8_t active_config;
+       int r;
 
        if (priv->sysfs_dir) {
-               r = sysfs_get_active_config(dev, &config);
+               r = sysfs_get_active_config(dev, &active_config);
                if (r < 0)
                        return r;
        } else {
                /* Use cached bConfigurationValue */
-               config = priv->active_config;
+               active_config = priv->active_config;
        }
-       if (config == -1)
+
+       if (active_config == 0) {
+               usbi_err(DEVICE_CTX(dev), "device unconfigured");
                return LIBUSB_ERROR_NOT_FOUND;
+       }
 
-       r = op_get_config_descriptor_by_value(dev, config, &config_desc);
+       r = op_get_config_descriptor_by_value(dev, active_config, &config_desc);
        if (r < 0)
                return r;
 
@@ -770,7 +776,7 @@ static int op_get_config_descriptor(struct libusb_device *dev,
 static int usbfs_get_active_config(struct libusb_device *dev, int fd)
 {
        struct linux_device_priv *priv = usbi_get_device_priv(dev);
-       unsigned char active_config = 0;
+       uint8_t active_config = 0;
        int r;
 
        struct usbfs_ctrltransfer ctrl = {
@@ -790,21 +796,17 @@ static int usbfs_get_active_config(struct libusb_device *dev, int fd)
 
                /* we hit this error path frequently with buggy devices :( */
                usbi_warn(DEVICE_CTX(dev), "get configuration failed, errno=%d", errno);
-               priv->active_config = -1;
-       } else {
-               if (active_config > 0) {
-                       priv->active_config = active_config;
-               } else {
-                       /* some buggy devices have a configuration 0, but we're
-                        * reaching into the corner of a corner case here, so let's
-                        * not support buggy devices in these circumstances.
-                        * stick to the specs: a configuration value of 0 means
-                        * unconfigured. */
-                       usbi_warn(DEVICE_CTX(dev), "active cfg 0? assuming unconfigured device");
-                       priv->active_config = -1;
-               }
+       } else if (active_config == 0) {
+               /* some buggy devices have a configuration 0, but we're
+                * reaching into the corner of a corner case here, so let's
+                * not support buggy devices in these circumstances.
+                * stick to the specs: a configuration value of 0 means
+                * unconfigured. */
+               usbi_warn(DEVICE_CTX(dev), "active cfg 0? assuming unconfigured device");
        }
 
+       priv->active_config = active_config;
+
        return LIBUSB_SUCCESS;
 }
 
@@ -912,7 +914,7 @@ static int initialize_device(struct libusb_device *dev, uint8_t busnum,
                        config = (struct usbi_configuration_descriptor *)(priv->descriptors + LIBUSB_DT_DEVICE_SIZE);
                        priv->active_config = config->bConfigurationValue;
                } else {
-                       priv->active_config = -1; /* No config dt */
+                       priv->active_config = 0; /* No config dt */
                }
 
                return LIBUSB_SUCCESS;
@@ -1332,7 +1334,7 @@ static void op_close(struct libusb_device_handle *dev_handle)
 }
 
 static int op_get_configuration(struct libusb_device_handle *handle,
-       int *config)
+       uint8_t *config)
 {
        struct linux_device_priv *priv = usbi_get_device_priv(handle->dev);
        int r;
@@ -1349,10 +1351,8 @@ static int op_get_configuration(struct libusb_device_handle *handle,
        if (r < 0)
                return r;
 
-       if (*config == -1) {
+       if (*config == 0)
                usbi_err(HANDLE_CTX(handle), "device unconfigured");
-               *config = 0;
-       }
 
        return 0;
 }
@@ -1376,13 +1376,16 @@ static int op_set_configuration(struct libusb_device_handle *handle, int config)
                return LIBUSB_ERROR_OTHER;
        }
 
+       if (config == -1)
+               config = 0;
+
        /* update our cached active config descriptor */
-       priv->active_config = config;
+       priv->active_config = (uint8_t)config;
 
        return LIBUSB_SUCCESS;
 }
 
-static int claim_interface(struct libusb_device_handle *handle, int iface)
+static int claim_interface(struct libusb_device_handle *handle, unsigned int iface)
 {
        struct linux_device_handle_priv *hpriv = usbi_get_device_handle_priv(handle);
        int fd = hpriv->fd;
@@ -1402,7 +1405,7 @@ static int claim_interface(struct libusb_device_handle *handle, int iface)
        return 0;
 }
 
-static int release_interface(struct libusb_device_handle *handle, int iface)
+static int release_interface(struct libusb_device_handle *handle, unsigned int iface)
 {
        struct linux_device_handle_priv *hpriv = usbi_get_device_handle_priv(handle);
        int fd = hpriv->fd;
@@ -1418,15 +1421,15 @@ static int release_interface(struct libusb_device_handle *handle, int iface)
        return 0;
 }
 
-static int op_set_interface(struct libusb_device_handle *handle, int iface,
-       int altsetting)
+static int op_set_interface(struct libusb_device_handle *handle, uint8_t interface,
+       uint8_t altsetting)
 {
        struct linux_device_handle_priv *hpriv = usbi_get_device_handle_priv(handle);
        int fd = hpriv->fd;
        struct usbfs_setinterface setintf;
        int r;
 
-       setintf.interface = iface;
+       setintf.interface = interface;
        setintf.altsetting = altsetting;
        r = ioctl(fd, IOCTL_USBFS_SETINTERFACE, &setintf);
        if (r < 0) {
@@ -1467,7 +1470,8 @@ static int op_reset_device(struct libusb_device_handle *handle)
 {
        struct linux_device_handle_priv *hpriv = usbi_get_device_handle_priv(handle);
        int fd = hpriv->fd;
-       int i, r, ret = 0;
+       int r, ret = 0;
+       uint8_t i;
 
        /* Doing a device reset will cause the usbfs driver to get unbound
         * from any interfaces it is bound to. By voluntarily unbinding
@@ -1503,7 +1507,7 @@ static int op_reset_device(struct libusb_device_handle *handle)
                 */
                r = detach_kernel_driver_and_claim(handle, i);
                if (r) {
-                       usbi_warn(HANDLE_CTX(handle), "failed to re-claim interface %d after reset: %s",
+                       usbi_warn(HANDLE_CTX(handle), "failed to re-claim interface %u after reset: %s",
                                  i, libusb_error_name(r));
                        handle->claimed_interfaces &= ~(1UL << i);
                        ret = LIBUSB_ERROR_NOT_FOUND;
@@ -1589,7 +1593,7 @@ static int op_dev_mem_free(struct libusb_device_handle *handle, void *buffer,
 }
 
 static int op_kernel_driver_active(struct libusb_device_handle *handle,
-       int interface)
+       uint8_t interface)
 {
        struct linux_device_handle_priv *hpriv = usbi_get_device_handle_priv(handle);
        int fd = hpriv->fd;
@@ -1612,7 +1616,7 @@ static int op_kernel_driver_active(struct libusb_device_handle *handle,
 }
 
 static int op_detach_kernel_driver(struct libusb_device_handle *handle,
-       int interface)
+       uint8_t interface)
 {
        struct linux_device_handle_priv *hpriv = usbi_get_device_handle_priv(handle);
        int fd = hpriv->fd;
@@ -1646,7 +1650,7 @@ static int op_detach_kernel_driver(struct libusb_device_handle *handle,
 }
 
 static int op_attach_kernel_driver(struct libusb_device_handle *handle,
-       int interface)
+       uint8_t interface)
 {
        struct linux_device_handle_priv *hpriv = usbi_get_device_handle_priv(handle);
        int fd = hpriv->fd;
@@ -1678,7 +1682,7 @@ static int op_attach_kernel_driver(struct libusb_device_handle *handle,
 }
 
 static int detach_kernel_driver_and_claim(struct libusb_device_handle *handle,
-       int interface)
+       uint8_t interface)
 {
        struct linux_device_handle_priv *hpriv = usbi_get_device_handle_priv(handle);
        struct usbfs_disconnect_claim dc;
@@ -1713,24 +1717,24 @@ static int detach_kernel_driver_and_claim(struct libusb_device_handle *handle,
        return claim_interface(handle, interface);
 }
 
-static int op_claim_interface(struct libusb_device_handle *handle, int iface)
+static int op_claim_interface(struct libusb_device_handle *handle, uint8_t interface)
 {
        if (handle->auto_detach_kernel_driver)
-               return detach_kernel_driver_and_claim(handle, iface);
+               return detach_kernel_driver_and_claim(handle, interface);
        else
-               return claim_interface(handle, iface);
+               return claim_interface(handle, interface);
 }
 
-static int op_release_interface(struct libusb_device_handle *handle, int iface)
+static int op_release_interface(struct libusb_device_handle *handle, uint8_t interface)
 {
        int r;
 
-       r = release_interface(handle, iface);
+       r = release_interface(handle, interface);
        if (r)
                return r;
 
        if (handle->auto_detach_kernel_driver)
-               op_attach_kernel_driver(handle, iface);
+               op_attach_kernel_driver(handle, interface);
 
        return 0;
 }
index 2a1359b..7a36209 100644 (file)
@@ -56,14 +56,14 @@ static int netbsd_get_active_config_descriptor(struct libusb_device *,
 static int netbsd_get_config_descriptor(struct libusb_device *, uint8_t,
     void *, size_t);
 
-static int netbsd_get_configuration(struct libusb_device_handle *, int *);
+static int netbsd_get_configuration(struct libusb_device_handle *, uint8_t *);
 static int netbsd_set_configuration(struct libusb_device_handle *, int);
 
-static int netbsd_claim_interface(struct libusb_device_handle *, int);
-static int netbsd_release_interface(struct libusb_device_handle *, int);
+static int netbsd_claim_interface(struct libusb_device_handle *, uint8_t);
+static int netbsd_release_interface(struct libusb_device_handle *, uint8_t);
 
-static int netbsd_set_interface_altsetting(struct libusb_device_handle *, int,
-    int);
+static int netbsd_set_interface_altsetting(struct libusb_device_handle *,
+    uint8_t, uint8_t);
 static int netbsd_clear_halt(struct libusb_device_handle *, unsigned char);
 static void netbsd_destroy_device(struct libusb_device *);
 
@@ -273,16 +273,18 @@ netbsd_get_config_descriptor(struct libusb_device *dev, uint8_t idx,
 }
 
 int
-netbsd_get_configuration(struct libusb_device_handle *handle, int *config)
+netbsd_get_configuration(struct libusb_device_handle *handle, uint8_t *config)
 {
        struct device_priv *dpriv = usbi_get_device_priv(handle->dev);
+       int tmp;
 
        usbi_dbg(" ");
 
-       if (ioctl(dpriv->fd, USB_GET_CONFIG, config) < 0)
+       if (ioctl(dpriv->fd, USB_GET_CONFIG, &tmp) < 0)
                return _errno_to_libusb(errno);
 
-       usbi_dbg("configuration %d", *config);
+       usbi_dbg("configuration %d", tmp);
+       *config = (uint8_t)tmp;
 
        return (LIBUSB_SUCCESS);
 }
@@ -301,7 +303,7 @@ netbsd_set_configuration(struct libusb_device_handle *handle, int config)
 }
 
 int
-netbsd_claim_interface(struct libusb_device_handle *handle, int iface)
+netbsd_claim_interface(struct libusb_device_handle *handle, uint8_t iface)
 {
        struct handle_priv *hpriv = usbi_get_device_handle_priv(handle);
        int i;
@@ -315,7 +317,7 @@ netbsd_claim_interface(struct libusb_device_handle *handle, int iface)
 }
 
 int
-netbsd_release_interface(struct libusb_device_handle *handle, int iface)
+netbsd_release_interface(struct libusb_device_handle *handle, uint8_t iface)
 {
        struct handle_priv *hpriv = usbi_get_device_handle_priv(handle);
        int i;
@@ -330,13 +332,13 @@ netbsd_release_interface(struct libusb_device_handle *handle, int iface)
 }
 
 int
-netbsd_set_interface_altsetting(struct libusb_device_handle *handle, int iface,
-    int altsetting)
+netbsd_set_interface_altsetting(struct libusb_device_handle *handle, uint8_t iface,
+    uint8_t altsetting)
 {
        struct device_priv *dpriv = usbi_get_device_priv(handle->dev);
        struct usb_alt_interface intf;
 
-       usbi_dbg("iface %d, setting %d", iface, altsetting);
+       usbi_dbg("iface %u, setting %u", iface, altsetting);
 
        memset(&intf, 0, sizeof(intf));
 
index 06278b1..0cd531d 100644 (file)
@@ -57,20 +57,20 @@ null_set_configuration(struct libusb_device_handle *handle, int config)
 }
 
 static int
-null_claim_interface(struct libusb_device_handle *handle, int iface)
+null_claim_interface(struct libusb_device_handle *handle, uint8_t iface)
 {
        return LIBUSB_ERROR_NOT_SUPPORTED;
 }
 
 static int
-null_release_interface(struct libusb_device_handle *handle, int iface)
+null_release_interface(struct libusb_device_handle *handle, uint8_t iface)
 {
        return LIBUSB_ERROR_NOT_SUPPORTED;
 }
 
 static int
-null_set_interface_altsetting(struct libusb_device_handle *handle, int iface,
-    int altsetting)
+null_set_interface_altsetting(struct libusb_device_handle *handle, uint8_t iface,
+    uint8_t altsetting)
 {
        return LIBUSB_ERROR_NOT_SUPPORTED;
 }
index 42cfbd5..f5b0470 100644 (file)
@@ -56,14 +56,14 @@ static int obsd_get_active_config_descriptor(struct libusb_device *,
 static int obsd_get_config_descriptor(struct libusb_device *, uint8_t,
     void *, size_t);
 
-static int obsd_get_configuration(struct libusb_device_handle *, int *);
+static int obsd_get_configuration(struct libusb_device_handle *, uint8_t *);
 static int obsd_set_configuration(struct libusb_device_handle *, int);
 
-static int obsd_claim_interface(struct libusb_device_handle *, int);
-static int obsd_release_interface(struct libusb_device_handle *, int);
+static int obsd_claim_interface(struct libusb_device_handle *, uint8_t);
+static int obsd_release_interface(struct libusb_device_handle *, uint8_t);
 
-static int obsd_set_interface_altsetting(struct libusb_device_handle *, int,
-    int);
+static int obsd_set_interface_altsetting(struct libusb_device_handle *, uint8_t,
+    uint8_t);
 static int obsd_clear_halt(struct libusb_device_handle *, unsigned char);
 static void obsd_destroy_device(struct libusb_device *);
 
@@ -298,13 +298,13 @@ obsd_get_config_descriptor(struct libusb_device *dev, uint8_t idx,
 }
 
 int
-obsd_get_configuration(struct libusb_device_handle *handle, int *config)
+obsd_get_configuration(struct libusb_device_handle *handle, uint8_t *config)
 {
        struct device_priv *dpriv = usbi_get_device_priv(handle->dev);
 
        *config = dpriv->cdesc->bConfigurationValue;
 
-       usbi_dbg("bConfigurationValue %d", *config);
+       usbi_dbg("bConfigurationValue %u", *config);
 
        return (LIBUSB_SUCCESS);
 }
@@ -326,7 +326,7 @@ obsd_set_configuration(struct libusb_device_handle *handle, int config)
 }
 
 int
-obsd_claim_interface(struct libusb_device_handle *handle, int iface)
+obsd_claim_interface(struct libusb_device_handle *handle, uint8_t iface)
 {
        struct handle_priv *hpriv = usbi_get_device_handle_priv(handle);
        int i;
@@ -340,7 +340,7 @@ obsd_claim_interface(struct libusb_device_handle *handle, int iface)
 }
 
 int
-obsd_release_interface(struct libusb_device_handle *handle, int iface)
+obsd_release_interface(struct libusb_device_handle *handle, uint8_t iface)
 {
        struct handle_priv *hpriv = usbi_get_device_handle_priv(handle);
        int i;
@@ -355,8 +355,8 @@ obsd_release_interface(struct libusb_device_handle *handle, int iface)
 }
 
 int
-obsd_set_interface_altsetting(struct libusb_device_handle *handle, int iface,
-    int altsetting)
+obsd_set_interface_altsetting(struct libusb_device_handle *handle, uint8_t iface,
+    uint8_t altsetting)
 {
        struct device_priv *dpriv = usbi_get_device_priv(handle->dev);
        struct usb_alt_interface intf;
@@ -364,7 +364,7 @@ obsd_set_interface_altsetting(struct libusb_device_handle *handle, int iface,
        if (dpriv->devname == NULL)
                return (LIBUSB_ERROR_NOT_SUPPORTED);
 
-       usbi_dbg("iface %d, setting %d", iface, altsetting);
+       usbi_dbg("iface %u, setting %u", iface, altsetting);
 
        memset(&intf, 0, sizeof(intf));
 
index 11cf688..3e2fb4f 100644 (file)
@@ -64,20 +64,20 @@ static int sunos_get_active_config_descriptor(struct libusb_device *,
     void *, size_t);
 static int sunos_get_config_descriptor(struct libusb_device *, uint8_t,
     void *, size_t);
-static int sunos_get_configuration(struct libusb_device_handle *, int *);
+static int sunos_get_configuration(struct libusb_device_handle *, uint8_t *);
 static int sunos_set_configuration(struct libusb_device_handle *, int);
-static int sunos_claim_interface(struct libusb_device_handle *, int);
-static int sunos_release_interface(struct libusb_device_handle *, int);
+static int sunos_claim_interface(struct libusb_device_handle *, uint8_t);
+static int sunos_release_interface(struct libusb_device_handle *, uint8_t);
 static int sunos_set_interface_altsetting(struct libusb_device_handle *,
-    int, int);
-static int sunos_clear_halt(struct libusb_device_handle *, uint8_t);
+    uint8_t, uint8_t);
+static int sunos_clear_halt(struct libusb_device_handle *, unsigned char);
 static void sunos_destroy_device(struct libusb_device *);
 static int sunos_submit_transfer(struct usbi_transfer *);
 static int sunos_cancel_transfer(struct usbi_transfer *);
 static int sunos_handle_transfer_completion(struct usbi_transfer *);
-static int sunos_kernel_driver_active(struct libusb_device_handle *, int interface);
-static int sunos_detach_kernel_driver (struct libusb_device_handle *dev, int interface_number);
-static int sunos_attach_kernel_driver (struct libusb_device_handle *dev, int interface_number);
+static int sunos_kernel_driver_active(struct libusb_device_handle *, uint8_t);
+static int sunos_detach_kernel_driver(struct libusb_device_handle *, uint8_t);
+static int sunos_attach_kernel_driver(struct libusb_device_handle *, uint8_t);
 static int sunos_usb_open_ep0(sunos_dev_handle_priv_t *hpriv, sunos_dev_priv_t *dpriv);
 static int sunos_usb_ioctl(struct libusb_device *dev, int cmd);
 
@@ -222,7 +222,7 @@ sunos_usb_ioctl(struct libusb_device *dev, int cmd)
 }
 
 static int
-sunos_kernel_driver_active(struct libusb_device_handle *dev_handle, int interface)
+sunos_kernel_driver_active(struct libusb_device_handle *dev_handle, uint8_t interface)
 {
        sunos_dev_priv_t *dpriv = usbi_get_device_priv(dev_handle->dev);
 
@@ -345,7 +345,7 @@ sunos_exec_command(struct libusb_context *ctx, const char *path,
 
 static int
 sunos_detach_kernel_driver(struct libusb_device_handle *dev_handle,
-       int interface_number)
+       uint8_t interface_number)
 {
        struct libusb_context *ctx = HANDLE_CTX(dev_handle);
        string_list_t *list;
@@ -402,7 +402,7 @@ sunos_detach_kernel_driver(struct libusb_device_handle *dev_handle,
 
 static int
 sunos_attach_kernel_driver(struct libusb_device_handle *dev_handle,
-       int interface_number)
+       uint8_t interface_number)
 {
        struct libusb_context *ctx = HANDLE_CTX(dev_handle);
        string_list_t *list;
@@ -1054,13 +1054,13 @@ sunos_get_config_descriptor(struct libusb_device *dev, uint8_t idx,
 }
 
 int
-sunos_get_configuration(struct libusb_device_handle *handle, int *config)
+sunos_get_configuration(struct libusb_device_handle *handle, uint8_t *config)
 {
        sunos_dev_priv_t *dpriv = usbi_get_device_priv(handle->dev);
 
        *config = dpriv->cfgvalue;
 
-       usbi_dbg("bConfigurationValue %d", *config);
+       usbi_dbg("bConfigurationValue %u", *config);
 
        return (LIBUSB_SUCCESS);
 }
@@ -1087,21 +1087,21 @@ sunos_set_configuration(struct libusb_device_handle *handle, int config)
 }
 
 int
-sunos_claim_interface(struct libusb_device_handle *handle, int iface)
+sunos_claim_interface(struct libusb_device_handle *handle, uint8_t iface)
 {
        UNUSED(handle);
 
-       usbi_dbg("iface %d", iface);
+       usbi_dbg("iface %u", iface);
 
        return (LIBUSB_SUCCESS);
 }
 
 int
-sunos_release_interface(struct libusb_device_handle *handle, int iface)
+sunos_release_interface(struct libusb_device_handle *handle, uint8_t iface)
 {
        sunos_dev_handle_priv_t *hpriv = usbi_get_device_handle_priv(handle);
 
-       usbi_dbg("iface %d", iface);
+       usbi_dbg("iface %u", iface);
 
        /* XXX: can we release it? */
        hpriv->altsetting[iface] = 0;
@@ -1110,13 +1110,13 @@ sunos_release_interface(struct libusb_device_handle *handle, int iface)
 }
 
 int
-sunos_set_interface_altsetting(struct libusb_device_handle *handle, int iface,
-    int altsetting)
+sunos_set_interface_altsetting(struct libusb_device_handle *handle, uint8_t iface,
+    uint8_t altsetting)
 {
        sunos_dev_priv_t *dpriv = usbi_get_device_priv(handle->dev);
        sunos_dev_handle_priv_t *hpriv = usbi_get_device_handle_priv(handle);
 
-       usbi_dbg("iface %d, setting %d", iface, altsetting);
+       usbi_dbg("iface %u, setting %u", iface, altsetting);
 
        if (dpriv->ugenpath == NULL)
                return (LIBUSB_ERROR_NOT_FOUND);
@@ -1340,7 +1340,7 @@ solaris_submit_ctrl_on_default(struct libusb_transfer *transfer)
 }
 
 int
-sunos_clear_halt(struct libusb_device_handle *handle, uint8_t endpoint)
+sunos_clear_halt(struct libusb_device_handle *handle, unsigned char endpoint)
 {
        int ret;
 
index 1c1ca01..d8f1e38 100644 (file)
@@ -619,7 +619,7 @@ static int windows_get_config_descriptor_by_value(struct libusb_device *dev,
        return priv->backend->get_config_descriptor_by_value(dev, bConfigurationValue, buffer);
 }
 
-static int windows_get_configuration(struct libusb_device_handle *dev_handle, int *config)
+static int windows_get_configuration(struct libusb_device_handle *dev_handle, uint8_t *config)
 {
        struct windows_context_priv *priv = usbi_get_context_priv(HANDLE_CTX(dev_handle));
        return priv->backend->get_configuration(dev_handle, config);
@@ -628,23 +628,25 @@ static int windows_get_configuration(struct libusb_device_handle *dev_handle, in
 static int windows_set_configuration(struct libusb_device_handle *dev_handle, int config)
 {
        struct windows_context_priv *priv = usbi_get_context_priv(HANDLE_CTX(dev_handle));
-       return priv->backend->set_configuration(dev_handle, config);
+       if (config == -1)
+               config = 0;
+       return priv->backend->set_configuration(dev_handle, (uint8_t)config);
 }
 
-static int windows_claim_interface(struct libusb_device_handle *dev_handle, int interface_number)
+static int windows_claim_interface(struct libusb_device_handle *dev_handle, uint8_t interface_number)
 {
        struct windows_context_priv *priv = usbi_get_context_priv(HANDLE_CTX(dev_handle));
        return priv->backend->claim_interface(dev_handle, interface_number);
 }
 
-static int windows_release_interface(struct libusb_device_handle *dev_handle, int interface_number)
+static int windows_release_interface(struct libusb_device_handle *dev_handle, uint8_t interface_number)
 {
        struct windows_context_priv *priv = usbi_get_context_priv(HANDLE_CTX(dev_handle));
        return priv->backend->release_interface(dev_handle, interface_number);
 }
 
 static int windows_set_interface_altsetting(struct libusb_device_handle *dev_handle,
-       int interface_number, int altsetting)
+       uint8_t interface_number, uint8_t altsetting)
 {
        struct windows_context_priv *priv = usbi_get_context_priv(HANDLE_CTX(dev_handle));
        return priv->backend->set_interface_altsetting(dev_handle, interface_number, altsetting);
index 6617de4..59891d4 100644 (file)
@@ -304,12 +304,12 @@ struct windows_backend {
                uint8_t config_index, void *buffer, size_t len);
        int (*get_config_descriptor_by_value)(struct libusb_device *device,
                uint8_t bConfigurationValue, void **buffer);
-       int (*get_configuration)(struct libusb_device_handle *dev_handle, int *config);
-       int (*set_configuration)(struct libusb_device_handle *dev_handle, int config);
-       int (*claim_interface)(struct libusb_device_handle *dev_handle, int interface_number);
-       int (*release_interface)(struct libusb_device_handle *dev_handle, int interface_number);
+       int (*get_configuration)(struct libusb_device_handle *dev_handle, uint8_t *config);
+       int (*set_configuration)(struct libusb_device_handle *dev_handle, uint8_t config);
+       int (*claim_interface)(struct libusb_device_handle *dev_handle, uint8_t interface_number);
+       int (*release_interface)(struct libusb_device_handle *dev_handle, uint8_t interface_number);
        int (*set_interface_altsetting)(struct libusb_device_handle *dev_handle,
-               int interface_number, int altsetting);
+               uint8_t interface_number, uint8_t altsetting);
        int (*clear_halt)(struct libusb_device_handle *dev_handle,
                unsigned char endpoint);
        int (*reset_device)(struct libusb_device_handle *dev_handle);
index 7d6a3d5..d9e2a9c 100644 (file)
@@ -421,7 +421,7 @@ static void usbdk_close(struct libusb_device_handle *dev_handle)
                usbi_err(HANDLE_CTX(dev_handle), "Redirector shutdown failed");
 }
 
-static int usbdk_get_configuration(struct libusb_device_handle *dev_handle, int *config)
+static int usbdk_get_configuration(struct libusb_device_handle *dev_handle, uint8_t *config)
 {
        struct usbdk_device_priv *priv = usbi_get_device_priv(dev_handle->dev);
 
@@ -430,21 +430,21 @@ static int usbdk_get_configuration(struct libusb_device_handle *dev_handle, int
        return LIBUSB_SUCCESS;
 }
 
-static int usbdk_set_configuration(struct libusb_device_handle *dev_handle, int config)
+static int usbdk_set_configuration(struct libusb_device_handle *dev_handle, uint8_t config)
 {
        UNUSED(dev_handle);
        UNUSED(config);
        return LIBUSB_SUCCESS;
 }
 
-static int usbdk_claim_interface(struct libusb_device_handle *dev_handle, int iface)
+static int usbdk_claim_interface(struct libusb_device_handle *dev_handle, uint8_t iface)
 {
        UNUSED(dev_handle);
        UNUSED(iface);
        return LIBUSB_SUCCESS;
 }
 
-static int usbdk_set_interface_altsetting(struct libusb_device_handle *dev_handle, int iface, int altsetting)
+static int usbdk_set_interface_altsetting(struct libusb_device_handle *dev_handle, uint8_t iface, uint8_t altsetting)
 {
        struct usbdk_device_priv *priv = usbi_get_device_priv(dev_handle->dev);
 
@@ -456,7 +456,7 @@ static int usbdk_set_interface_altsetting(struct libusb_device_handle *dev_handl
        return LIBUSB_SUCCESS;
 }
 
-static int usbdk_release_interface(struct libusb_device_handle *dev_handle, int iface)
+static int usbdk_release_interface(struct libusb_device_handle *dev_handle, uint8_t iface)
 {
        UNUSED(dev_handle);
        UNUSED(iface);
index a623a61..8ea9697 100644 (file)
@@ -54,11 +54,11 @@ static bool winusbx_init(struct libusb_context *ctx);
 static void winusbx_exit(void);
 static int winusbx_open(int sub_api, struct libusb_device_handle *dev_handle);
 static void winusbx_close(int sub_api, struct libusb_device_handle *dev_handle);
-static int winusbx_configure_endpoints(int sub_api, struct libusb_device_handle *dev_handle, int iface);
-static int winusbx_claim_interface(int sub_api, struct libusb_device_handle *dev_handle, int iface);
-static int winusbx_release_interface(int sub_api, struct libusb_device_handle *dev_handle, int iface);
+static int winusbx_configure_endpoints(int sub_api, struct libusb_device_handle *dev_handle, uint8_t iface);
+static int winusbx_claim_interface(int sub_api, struct libusb_device_handle *dev_handle, uint8_t iface);
+static int winusbx_release_interface(int sub_api, struct libusb_device_handle *dev_handle, uint8_t iface);
 static int winusbx_submit_control_transfer(int sub_api, struct usbi_transfer *itransfer);
-static int winusbx_set_interface_altsetting(int sub_api, struct libusb_device_handle *dev_handle, int iface, int altsetting);
+static int winusbx_set_interface_altsetting(int sub_api, struct libusb_device_handle *dev_handle, uint8_t iface, uint8_t altsetting);
 static int winusbx_submit_iso_transfer(int sub_api, struct usbi_transfer *itransfer);
 static int winusbx_submit_bulk_transfer(int sub_api, struct usbi_transfer *itransfer);
 static int winusbx_clear_halt(int sub_api, struct libusb_device_handle *dev_handle, unsigned char endpoint);
@@ -70,9 +70,9 @@ static bool hid_init(struct libusb_context *ctx);
 static void hid_exit(void);
 static int hid_open(int sub_api, struct libusb_device_handle *dev_handle);
 static void hid_close(int sub_api, struct libusb_device_handle *dev_handle);
-static int hid_claim_interface(int sub_api, struct libusb_device_handle *dev_handle, int iface);
-static int hid_release_interface(int sub_api, struct libusb_device_handle *dev_handle, int iface);
-static int hid_set_interface_altsetting(int sub_api, struct libusb_device_handle *dev_handle, int iface, int altsetting);
+static int hid_claim_interface(int sub_api, struct libusb_device_handle *dev_handle, uint8_t iface);
+static int hid_release_interface(int sub_api, struct libusb_device_handle *dev_handle, uint8_t iface);
+static int hid_set_interface_altsetting(int sub_api, struct libusb_device_handle *dev_handle, uint8_t iface, uint8_t altsetting);
 static int hid_submit_control_transfer(int sub_api, struct usbi_transfer *itransfer);
 static int hid_submit_bulk_transfer(int sub_api, struct usbi_transfer *itransfer);
 static int hid_clear_halt(int sub_api, struct libusb_device_handle *dev_handle, unsigned char endpoint);
@@ -81,9 +81,9 @@ static enum libusb_transfer_status hid_copy_transfer_data(int sub_api, struct us
 // Composite API prototypes
 static int composite_open(int sub_api, struct libusb_device_handle *dev_handle);
 static void composite_close(int sub_api, struct libusb_device_handle *dev_handle);
-static int composite_claim_interface(int sub_api, struct libusb_device_handle *dev_handle, int iface);
-static int composite_set_interface_altsetting(int sub_api, struct libusb_device_handle *dev_handle, int iface, int altsetting);
-static int composite_release_interface(int sub_api, struct libusb_device_handle *dev_handle, int iface);
+static int composite_claim_interface(int sub_api, struct libusb_device_handle *dev_handle, uint8_t iface);
+static int composite_set_interface_altsetting(int sub_api, struct libusb_device_handle *dev_handle, uint8_t iface, uint8_t altsetting);
+static int composite_release_interface(int sub_api, struct libusb_device_handle *dev_handle, uint8_t iface);
 static int composite_submit_control_transfer(int sub_api, struct usbi_transfer *itransfer);
 static int composite_submit_bulk_transfer(int sub_api, struct usbi_transfer *itransfer);
 static int composite_submit_iso_transfer(int sub_api, struct usbi_transfer *itransfer);
@@ -467,7 +467,7 @@ static int get_interface_by_endpoint(struct libusb_config_descriptor *conf_desc,
 /*
  * Populate the endpoints addresses of the device_priv interface helper structs
  */
-static int windows_assign_endpoints(struct libusb_device_handle *dev_handle, int iface, int altsetting)
+static int windows_assign_endpoints(struct libusb_device_handle *dev_handle, uint8_t iface, uint8_t altsetting)
 {
        struct winusb_device_priv *priv = usbi_get_device_priv(dev_handle->dev);
        struct libusb_config_descriptor *conf_desc;
@@ -484,7 +484,7 @@ static int windows_assign_endpoints(struct libusb_device_handle *dev_handle, int
        safe_free(priv->usb_interface[iface].endpoint);
 
        if (if_desc->bNumEndpoints == 0) {
-               usbi_dbg("no endpoints found for interface %d", iface);
+               usbi_dbg("no endpoints found for interface %u", iface);
                libusb_free_config_descriptor(conf_desc);
                priv->usb_interface[iface].current_altsetting = altsetting;
                return LIBUSB_SUCCESS;
@@ -499,7 +499,7 @@ static int windows_assign_endpoints(struct libusb_device_handle *dev_handle, int
        priv->usb_interface[iface].nb_endpoints = if_desc->bNumEndpoints;
        for (i = 0; i < if_desc->bNumEndpoints; i++) {
                priv->usb_interface[iface].endpoint[i] = if_desc->endpoint[i].bEndpointAddress;
-               usbi_dbg("(re)assigned endpoint %02X to interface %d", priv->usb_interface[iface].endpoint[i], iface);
+               usbi_dbg("(re)assigned endpoint %02X to interface %u", priv->usb_interface[iface].endpoint[i], iface);
        }
        libusb_free_config_descriptor(conf_desc);
 
@@ -1595,15 +1595,10 @@ static void winusb_close(struct libusb_device_handle *dev_handle)
                priv->apib->close(SUB_API_NOTSET, dev_handle);
 }
 
-static int winusb_get_configuration(struct libusb_device_handle *dev_handle, int *config)
+static int winusb_get_configuration(struct libusb_device_handle *dev_handle, uint8_t *config)
 {
        struct winusb_device_priv *priv = usbi_get_device_priv(dev_handle->dev);
 
-       if (priv->active_config == 0) {
-               *config = 0;
-               return LIBUSB_ERROR_NOT_FOUND;
-       }
-
        *config = priv->active_config;
        return LIBUSB_SUCCESS;
 }
@@ -1613,23 +1608,23 @@ static int winusb_get_configuration(struct libusb_device_handle *dev_handle, int
  * does not currently expose a service that allows higher-level drivers to set
  * the configuration."
  */
-static int winusb_set_configuration(struct libusb_device_handle *dev_handle, int config)
+static int winusb_set_configuration(struct libusb_device_handle *dev_handle, uint8_t config)
 {
        struct winusb_device_priv *priv = usbi_get_device_priv(dev_handle->dev);
        int r = LIBUSB_SUCCESS;
 
        r = libusb_control_transfer(dev_handle, LIBUSB_ENDPOINT_OUT |
                LIBUSB_REQUEST_TYPE_STANDARD | LIBUSB_RECIPIENT_DEVICE,
-               LIBUSB_REQUEST_SET_CONFIGURATION, (uint16_t)config,
+               LIBUSB_REQUEST_SET_CONFIGURATION, config,
                0, NULL, 0, 1000);
 
        if (r == LIBUSB_SUCCESS)
-               priv->active_config = (uint8_t)config;
+               priv->active_config = config;
 
        return r;
 }
 
-static int winusb_claim_interface(struct libusb_device_handle *dev_handle, int iface)
+static int winusb_claim_interface(struct libusb_device_handle *dev_handle, uint8_t iface)
 {
        struct winusb_device_priv *priv = usbi_get_device_priv(dev_handle->dev);
        int r;
@@ -1647,7 +1642,7 @@ static int winusb_claim_interface(struct libusb_device_handle *dev_handle, int i
        return r;
 }
 
-static int winusb_set_interface_altsetting(struct libusb_device_handle *dev_handle, int iface, int altsetting)
+static int winusb_set_interface_altsetting(struct libusb_device_handle *dev_handle, uint8_t iface, uint8_t altsetting)
 {
        struct winusb_device_priv *priv = usbi_get_device_priv(dev_handle->dev);
        int r;
@@ -1665,7 +1660,7 @@ static int winusb_set_interface_altsetting(struct libusb_device_handle *dev_hand
        return r;
 }
 
-static int winusb_release_interface(struct libusb_device_handle *dev_handle, int iface)
+static int winusb_release_interface(struct libusb_device_handle *dev_handle, uint8_t iface)
 {
        struct winusb_device_priv *priv = usbi_get_device_priv(dev_handle->dev);
 
@@ -2160,7 +2155,7 @@ static void winusbx_close(int sub_api, struct libusb_device_handle *dev_handle)
        }
 }
 
-static int winusbx_configure_endpoints(int sub_api, struct libusb_device_handle *dev_handle, int iface)
+static int winusbx_configure_endpoints(int sub_api, struct libusb_device_handle *dev_handle, uint8_t iface)
 {
        struct winusb_device_handle_priv *handle_priv = usbi_get_device_handle_priv(dev_handle);
        struct winusb_device_priv *priv = usbi_get_device_priv(dev_handle->dev);
@@ -2213,7 +2208,7 @@ static int winusbx_configure_endpoints(int sub_api, struct libusb_device_handle
        return LIBUSB_SUCCESS;
 }
 
-static int winusbx_claim_interface(int sub_api, struct libusb_device_handle *dev_handle, int iface)
+static int winusbx_claim_interface(int sub_api, struct libusb_device_handle *dev_handle, uint8_t iface)
 {
        struct libusb_context *ctx = HANDLE_CTX(dev_handle);
        struct winusb_device_handle_priv *handle_priv = usbi_get_device_handle_priv(dev_handle);
@@ -2244,7 +2239,7 @@ static int winusbx_claim_interface(int sub_api, struct libusb_device_handle *dev
                        switch (err) {
                        case ERROR_BAD_COMMAND:
                                // The device was disconnected
-                               usbi_err(ctx, "could not access interface %d: %s", iface, windows_error_str(0));
+                               usbi_err(ctx, "could not access interface %u: %s", iface, windows_error_str(0));
                                return LIBUSB_ERROR_NO_DEVICE;
                        default:
                                // it may be that we're using the libusb0 filter driver.
@@ -2287,7 +2282,7 @@ static int winusbx_claim_interface(int sub_api, struct libusb_device_handle *dev
                                if (r != LIBUSB_SUCCESS)
                                        return r;
                                if (!found_filter) {
-                                       usbi_err(ctx, "could not access interface %d: %s", iface, windows_error_str(err));
+                                       usbi_err(ctx, "could not access interface %u: %s", iface, windows_error_str(err));
                                        return LIBUSB_ERROR_ACCESS;
                                }
                        }
@@ -2302,9 +2297,9 @@ static int winusbx_claim_interface(int sub_api, struct libusb_device_handle *dev
                        file_handle = handle_priv->interface_handle[0].dev_handle;
                        if (WinUSBX[sub_api].Initialize(file_handle, &winusb_handle)) {
                                handle_priv->interface_handle[0].api_handle = winusb_handle;
-                               usbi_warn(ctx, "auto-claimed interface 0 (required to claim %d with WinUSB)", iface);
+                               usbi_warn(ctx, "auto-claimed interface 0 (required to claim %u with WinUSB)", iface);
                        } else {
-                               usbi_warn(ctx, "failed to auto-claim interface 0 (required to claim %d with WinUSB): %s", iface, windows_error_str(0));
+                               usbi_warn(ctx, "failed to auto-claim interface 0 (required to claim %u with WinUSB): %s", iface, windows_error_str(0));
                                return LIBUSB_ERROR_ACCESS;
                        }
                }
@@ -2319,19 +2314,19 @@ static int winusbx_claim_interface(int sub_api, struct libusb_device_handle *dev
                        case ERROR_ALREADY_EXISTS:  // already claimed
                                return LIBUSB_ERROR_BUSY;
                        default:
-                               usbi_err(ctx, "could not claim interface %d: %s", iface, windows_error_str(0));
+                               usbi_err(ctx, "could not claim interface %u: %s", iface, windows_error_str(0));
                                return LIBUSB_ERROR_ACCESS;
                        }
                }
                handle_priv->interface_handle[iface].dev_handle = handle_priv->interface_handle[0].dev_handle;
        }
-       usbi_dbg("claimed interface %d", iface);
+       usbi_dbg("claimed interface %u", iface);
        handle_priv->active_interface = iface;
 
        return LIBUSB_SUCCESS;
 }
 
-static int winusbx_release_interface(int sub_api, struct libusb_device_handle *dev_handle, int iface)
+static int winusbx_release_interface(int sub_api, struct libusb_device_handle *dev_handle, uint8_t iface)
 {
        struct winusb_device_handle_priv *handle_priv = usbi_get_device_handle_priv(dev_handle);
        struct winusb_device_priv *priv = usbi_get_device_priv(dev_handle->dev);
@@ -2479,7 +2474,7 @@ static int winusbx_submit_control_transfer(int sub_api, struct usbi_transfer *it
        return LIBUSB_SUCCESS;
 }
 
-static int winusbx_set_interface_altsetting(int sub_api, struct libusb_device_handle *dev_handle, int iface, int altsetting)
+static int winusbx_set_interface_altsetting(int sub_api, struct libusb_device_handle *dev_handle, uint8_t iface, uint8_t altsetting)
 {
        struct winusb_device_handle_priv *handle_priv = usbi_get_device_handle_priv(dev_handle);
        struct winusb_device_priv *priv = usbi_get_device_priv(dev_handle->dev);
@@ -2493,7 +2488,7 @@ static int winusbx_set_interface_altsetting(int sub_api, struct libusb_device_ha
                return LIBUSB_ERROR_NOT_FOUND;
        }
 
-       if (!WinUSBX[sub_api].SetCurrentAlternateSetting(winusb_handle, (UCHAR)altsetting)) {
+       if (!WinUSBX[sub_api].SetCurrentAlternateSetting(winusb_handle, altsetting)) {
                usbi_err(HANDLE_CTX(dev_handle), "SetCurrentAlternateSetting failed: %s", windows_error_str(0));
                return LIBUSB_ERROR_IO;
        }
@@ -3549,7 +3544,7 @@ static void hid_close(int sub_api, struct libusb_device_handle *dev_handle)
        }
 }
 
-static int hid_claim_interface(int sub_api, struct libusb_device_handle *dev_handle, int iface)
+static int hid_claim_interface(int sub_api, struct libusb_device_handle *dev_handle, uint8_t iface)
 {
        struct winusb_device_handle_priv *handle_priv = usbi_get_device_handle_priv(dev_handle);
        struct winusb_device_priv *priv = usbi_get_device_priv(dev_handle->dev);
@@ -3567,13 +3562,13 @@ static int hid_claim_interface(int sub_api, struct libusb_device_handle *dev_han
 
        handle_priv->interface_handle[iface].dev_handle = INTERFACE_CLAIMED;
 
-       usbi_dbg("claimed interface %d", iface);
+       usbi_dbg("claimed interface %u", iface);
        handle_priv->active_interface = iface;
 
        return LIBUSB_SUCCESS;
 }
 
-static int hid_release_interface(int sub_api, struct libusb_device_handle *dev_handle, int iface)
+static int hid_release_interface(int sub_api, struct libusb_device_handle *dev_handle, uint8_t iface)
 {
        struct winusb_device_handle_priv *handle_priv = usbi_get_device_handle_priv(dev_handle);
        struct winusb_device_priv *priv = usbi_get_device_priv(dev_handle->dev);
@@ -3592,7 +3587,7 @@ static int hid_release_interface(int sub_api, struct libusb_device_handle *dev_h
        return LIBUSB_SUCCESS;
 }
 
-static int hid_set_interface_altsetting(int sub_api, struct libusb_device_handle *dev_handle, int iface, int altsetting)
+static int hid_set_interface_altsetting(int sub_api, struct libusb_device_handle *dev_handle, uint8_t iface, uint8_t altsetting)
 {
        UNUSED(sub_api);
        UNUSED(iface);
@@ -3617,7 +3612,8 @@ static int hid_submit_control_transfer(int sub_api, struct usbi_transfer *itrans
        WINUSB_SETUP_PACKET *setup = (WINUSB_SETUP_PACKET *)transfer->buffer;
        HANDLE hid_handle;
        OVERLAPPED *overlapped;
-       int current_interface, config;
+       int current_interface;
+       uint8_t config;
        size_t size;
        int r;
 
@@ -3654,7 +3650,7 @@ static int hid_submit_control_transfer(int sub_api, struct usbi_transfer *itrans
                        r = winusb_get_configuration(dev_handle, &config);
                        if (r == LIBUSB_SUCCESS) {
                                size = 1;
-                               ((uint8_t *)transfer->buffer)[LIBUSB_CONTROL_SETUP_SIZE] = (uint8_t)config;
+                               ((uint8_t *)transfer->buffer)[LIBUSB_CONTROL_SETUP_SIZE] = config;
                                r = LIBUSB_COMPLETED;
                        }
                        break;
@@ -3672,7 +3668,7 @@ static int hid_submit_control_transfer(int sub_api, struct usbi_transfer *itrans
                        r = LIBUSB_COMPLETED;
                        break;
                case LIBUSB_REQUEST_SET_INTERFACE:
-                       r = hid_set_interface_altsetting(0, dev_handle, setup->Index, setup->Value);
+                       r = hid_set_interface_altsetting(0, dev_handle, (uint8_t)setup->Index, (uint8_t)setup->Value);
                        if (r == LIBUSB_SUCCESS)
                                r = LIBUSB_COMPLETED;
                        break;
@@ -3951,7 +3947,7 @@ static void composite_close(int sub_api, struct libusb_device_handle *dev_handle
                hid_close(SUB_API_NOTSET, dev_handle);
 }
 
-static int composite_claim_interface(int sub_api, struct libusb_device_handle *dev_handle, int iface)
+static int composite_claim_interface(int sub_api, struct libusb_device_handle *dev_handle, uint8_t iface)
 {
        struct winusb_device_priv *priv = usbi_get_device_priv(dev_handle->dev);
 
@@ -3962,7 +3958,7 @@ static int composite_claim_interface(int sub_api, struct libusb_device_handle *d
                claim_interface(priv->usb_interface[iface].sub_api, dev_handle, iface);
 }
 
-static int composite_set_interface_altsetting(int sub_api, struct libusb_device_handle *dev_handle, int iface, int altsetting)
+static int composite_set_interface_altsetting(int sub_api, struct libusb_device_handle *dev_handle, uint8_t iface, uint8_t altsetting)
 {
        struct winusb_device_priv *priv = usbi_get_device_priv(dev_handle->dev);
 
@@ -3973,7 +3969,7 @@ static int composite_set_interface_altsetting(int sub_api, struct libusb_device_
                set_interface_altsetting(priv->usb_interface[iface].sub_api, dev_handle, iface, altsetting);
 }
 
-static int composite_release_interface(int sub_api, struct libusb_device_handle *dev_handle, int iface)
+static int composite_release_interface(int sub_api, struct libusb_device_handle *dev_handle, uint8_t iface)
 {
        struct winusb_device_priv *priv = usbi_get_device_priv(dev_handle->dev);
 
index 39ce6fe..88863ff 100644 (file)
@@ -98,10 +98,10 @@ struct windows_usb_api_backend {
        void (*exit)(void);
        int (*open)(int sub_api, struct libusb_device_handle *dev_handle);
        void (*close)(int sub_api, struct libusb_device_handle *dev_handle);
-       int (*configure_endpoints)(int sub_api, struct libusb_device_handle *dev_handle, int iface);
-       int (*claim_interface)(int sub_api, struct libusb_device_handle *dev_handle, int iface);
-       int (*set_interface_altsetting)(int sub_api, struct libusb_device_handle *dev_handle, int iface, int altsetting);
-       int (*release_interface)(int sub_api, struct libusb_device_handle *dev_handle, int iface);
+       int (*configure_endpoints)(int sub_api, struct libusb_device_handle *dev_handle, uint8_t iface);
+       int (*claim_interface)(int sub_api, struct libusb_device_handle *dev_handle, uint8_t iface);
+       int (*set_interface_altsetting)(int sub_api, struct libusb_device_handle *dev_handle, uint8_t iface, uint8_t altsetting);
+       int (*release_interface)(int sub_api, struct libusb_device_handle *dev_handle, uint8_t iface);
        int (*clear_halt)(int sub_api, struct libusb_device_handle *dev_handle, unsigned char endpoint);
        int (*reset_device)(int sub_api, struct libusb_device_handle *dev_handle);
        int (*submit_bulk_transfer)(int sub_api, struct usbi_transfer *itransfer);
index a81bd38..f648dfc 100644 (file)
@@ -1 +1 @@
-#define LIBUSB_NANO 11513
+#define LIBUSB_NANO 11514