kinect_upload_fw: fix setting configuration for some devices
authorKristof Robot <krirobo@gmail.com>
Sun, 8 Dec 2013 14:46:50 +0000 (15:46 +0100)
committerAntonio Ospite <ospite@studenti.unina.it>
Wed, 11 Dec 2013 11:09:45 +0000 (12:09 +0100)
On some Kinect devices where the desired configuration is already the
currently active one libusb_set_configuration() fails in some way
causing the subsequent bulk transfer to fail, and the program to exit,
with this message:

  libusbx: error [op_set_configuration] failed, error -1 errno 110
  About to send: 09 20 02 06 01 00 00 00 60 00 00 00 00 00 00 00 15 00 00 00 00 00 00 00
  libusbx: error [submit_bulk_transfer] submiturb failed error -1 errno=2
  Error: res: -1    transferred: 0 (expected 24)

Only set the desired configuration if it hasn't been set already.
This prevents the problems from above.

Do the configuration check as illustrated in
http://libusbx.sourceforge.net/api-1.0/caveats.html that is by checking
that the current configuration is still the desired one after claiming
the device.

kinect_upload_fw/kinect_upload_fw.c

index b2188d6..e3b72db 100644 (file)
@@ -155,9 +155,19 @@ int main(int argc, char** argv) {
                goto fail_libusb_open;
        }
 
                goto fail_libusb_open;
        }
 
-       libusb_set_configuration(dev, 1);
+       int current_configuration = 0;
+       libusb_get_configuration(dev, &current_configuration);
+       if (current_configuration != 1)
+               libusb_set_configuration(dev, 1);
+
        libusb_claim_interface(dev, 0);
 
        libusb_claim_interface(dev, 0);
 
+       libusb_get_configuration(dev, &current_configuration);
+       if (current_configuration != 1) {
+               res = -ENODEV;
+               goto cleanup;
+       }
+
        seq = 1;
 
        bootloader_command cmd;
        seq = 1;
 
        bootloader_command cmd;