libusb 0.4.0 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (118) hide show
  1. data/.travis.yml +2 -2
  2. data/Gemfile +0 -8
  3. data/History.md +5 -0
  4. data/README.md +6 -6
  5. data/Rakefile +9 -9
  6. data/ext/extconf.rb +1 -1
  7. data/ext/{libusbx-1.0.17 → libusb-1.0.18}/AUTHORS +10 -0
  8. data/ext/{libusbx-1.0.17 → libusb-1.0.18}/COPYING +0 -0
  9. data/ext/{libusbx-1.0.17 → libusb-1.0.18}/ChangeLog +17 -9
  10. data/ext/{libusbx-1.0.17 → libusb-1.0.18}/INSTALL +0 -0
  11. data/ext/{libusbx-1.0.17 → libusb-1.0.18}/Makefile.am +0 -0
  12. data/ext/{libusbx-1.0.17 → libusb-1.0.18}/Makefile.in +153 -178
  13. data/ext/libusb-1.0.18/NEWS +2 -0
  14. data/ext/{libusbx-1.0.17 → libusb-1.0.18}/PORTING +13 -13
  15. data/ext/{libusbx-1.0.17 → libusb-1.0.18}/README +9 -11
  16. data/ext/libusb-1.0.18/TODO +2 -0
  17. data/ext/{libusbx-1.0.17 → libusb-1.0.18}/Xcode/common.xcconfig +3 -3
  18. data/ext/{libusbx-1.0.17 → libusb-1.0.18}/Xcode/config.h +0 -0
  19. data/ext/{libusbx-1.0.17 → libusb-1.0.18}/Xcode/debug.xcconfig +2 -2
  20. data/ext/{libusbx-1.0.17/Xcode/libusbx.xcconfig → libusb-1.0.18/Xcode/libusb.xcconfig} +2 -2
  21. data/ext/libusb-1.0.18/Xcode/libusb.xcodeproj/project.pbxproj +1 -0
  22. data/ext/{libusbx-1.0.17/Xcode/libusbx_debug.xcconfig → libusb-1.0.18/Xcode/libusb_debug.xcconfig} +3 -3
  23. data/ext/{libusbx-1.0.17/Xcode/libusbx_release.xcconfig → libusb-1.0.18/Xcode/libusb_release.xcconfig} +3 -3
  24. data/ext/{libusbx-1.0.17 → libusb-1.0.18}/Xcode/release.xcconfig +2 -2
  25. data/ext/{libusbx-1.0.17/m4/libtool.m4 → libusb-1.0.18/aclocal.m4} +1731 -27
  26. data/ext/{libusbx-1.0.17 → libusb-1.0.18}/android/README +0 -0
  27. data/ext/{libusbx-1.0.17 → libusb-1.0.18}/android/config.h +1 -10
  28. data/ext/{libusbx-1.0.17 → libusb-1.0.18}/android/jni/Android.mk +0 -0
  29. data/ext/{libusbx-1.0.17 → libusb-1.0.18}/android/jni/Application.mk +6 -1
  30. data/ext/{libusbx-1.0.17 → libusb-1.0.18}/android/jni/examples.mk +0 -0
  31. data/ext/{libusbx-1.0.17 → libusb-1.0.18}/android/jni/libusb.mk +0 -0
  32. data/ext/{libusbx-1.0.17 → libusb-1.0.18}/android/jni/tests.mk +0 -0
  33. data/ext/{libusbx-1.0.17 → libusb-1.0.18}/compile +3 -7
  34. data/ext/{libusbx-1.0.17 → libusb-1.0.18}/config.guess +19 -24
  35. data/ext/{libusbx-1.0.17 → libusb-1.0.18}/config.h.in +0 -0
  36. data/ext/{libusbx-1.0.17 → libusb-1.0.18}/config.sub +30 -47
  37. data/ext/{libusbx-1.0.17 → libusb-1.0.18}/configure +118 -172
  38. data/ext/{libusbx-1.0.17 → libusb-1.0.18}/configure.ac +24 -2
  39. data/ext/{libusbx-1.0.17 → libusb-1.0.18}/depcomp +186 -268
  40. data/ext/{libusbx-1.0.17 → libusb-1.0.18}/doc/Makefile.am +1 -1
  41. data/ext/{libusbx-1.0.17 → libusb-1.0.18}/doc/Makefile.in +36 -73
  42. data/ext/{libusbx-1.0.17 → libusb-1.0.18}/doc/doxygen.cfg.in +1 -1
  43. data/ext/{libusbx-1.0.17 → libusb-1.0.18}/examples/Makefile.am +0 -0
  44. data/ext/{libusbx-1.0.17 → libusb-1.0.18}/examples/Makefile.in +68 -132
  45. data/ext/{libusbx-1.0.17 → libusb-1.0.18}/examples/dpfp.c +1 -1
  46. data/ext/{libusbx-1.0.17 → libusb-1.0.18}/examples/dpfp_threaded.c +1 -1
  47. data/ext/{libusbx-1.0.17 → libusb-1.0.18}/examples/ezusb.c +57 -26
  48. data/ext/{libusbx-1.0.17 → libusb-1.0.18}/examples/ezusb.h +0 -0
  49. data/ext/{libusbx-1.0.17 → libusb-1.0.18}/examples/fxload.c +3 -3
  50. data/ext/{libusbx-1.0.17 → libusb-1.0.18}/examples/getopt/getopt.c +0 -0
  51. data/ext/{libusbx-1.0.17 → libusb-1.0.18}/examples/getopt/getopt.h +0 -0
  52. data/ext/{libusbx-1.0.17 → libusb-1.0.18}/examples/getopt/getopt1.c +0 -0
  53. data/ext/{libusbx-1.0.17 → libusb-1.0.18}/examples/hotplugtest.c +9 -2
  54. data/ext/{libusbx-1.0.17 → libusb-1.0.18}/examples/listdevs.c +1 -1
  55. data/ext/{libusbx-1.0.17 → libusb-1.0.18}/examples/sam3u_benchmark.c +0 -0
  56. data/ext/{libusbx-1.0.17 → libusb-1.0.18}/examples/xusb.c +20 -4
  57. data/ext/{libusbx-1.0.17 → libusb-1.0.18}/install-sh +7 -7
  58. data/ext/{libusbx-1.0.17 → libusb-1.0.18}/libusb-1.0.pc.in +1 -1
  59. data/ext/{libusbx-1.0.17 → libusb-1.0.18}/libusb/Makefile.am +1 -1
  60. data/ext/{libusbx-1.0.17 → libusb-1.0.18}/libusb/Makefile.in +94 -134
  61. data/ext/{libusbx-1.0.17 → libusb-1.0.18}/libusb/core.c +95 -74
  62. data/ext/{libusbx-1.0.17 → libusb-1.0.18}/libusb/descriptor.c +2 -2
  63. data/ext/{libusbx-1.0.17 → libusb-1.0.18}/libusb/hotplug.c +3 -3
  64. data/ext/{libusbx-1.0.17 → libusb-1.0.18}/libusb/hotplug.h +1 -1
  65. data/ext/{libusbx-1.0.17 → libusb-1.0.18}/libusb/io.c +127 -116
  66. data/ext/{libusbx-1.0.17 → libusb-1.0.18}/libusb/libusb-1.0.def +0 -0
  67. data/ext/{libusbx-1.0.17 → libusb-1.0.18}/libusb/libusb-1.0.rc +1 -1
  68. data/ext/{libusbx-1.0.17 → libusb-1.0.18}/libusb/libusb.h +42 -39
  69. data/ext/{libusbx-1.0.17 → libusb-1.0.18}/libusb/libusbi.h +20 -11
  70. data/ext/{libusbx-1.0.17 → libusb-1.0.18}/libusb/os/darwin_usb.c +20 -16
  71. data/ext/{libusbx-1.0.17 → libusb-1.0.18}/libusb/os/darwin_usb.h +1 -1
  72. data/ext/{libusbx-1.0.17 → libusb-1.0.18}/libusb/os/linux_netlink.c +0 -0
  73. data/ext/{libusbx-1.0.17 → libusb-1.0.18}/libusb/os/linux_udev.c +0 -0
  74. data/ext/{libusbx-1.0.17 → libusb-1.0.18}/libusb/os/linux_usbfs.c +15 -12
  75. data/ext/{libusbx-1.0.17 → libusb-1.0.18}/libusb/os/linux_usbfs.h +0 -0
  76. data/ext/{libusbx-1.0.17 → libusb-1.0.18}/libusb/os/netbsd_usb.c +2 -4
  77. data/ext/{libusbx-1.0.17 → libusb-1.0.18}/libusb/os/openbsd_usb.c +5 -2
  78. data/ext/{libusbx-1.0.17 → libusb-1.0.18}/libusb/os/poll_posix.c +0 -0
  79. data/ext/{libusbx-1.0.17 → libusb-1.0.18}/libusb/os/poll_posix.h +0 -0
  80. data/ext/{libusbx-1.0.17 → libusb-1.0.18}/libusb/os/poll_windows.c +2 -2
  81. data/ext/{libusbx-1.0.17 → libusb-1.0.18}/libusb/os/poll_windows.h +0 -0
  82. data/ext/{libusbx-1.0.17 → libusb-1.0.18}/libusb/os/threads_posix.c +1 -1
  83. data/ext/{libusbx-1.0.17 → libusb-1.0.18}/libusb/os/threads_posix.h +1 -1
  84. data/ext/{libusbx-1.0.17 → libusb-1.0.18}/libusb/os/threads_windows.c +1 -1
  85. data/ext/{libusbx-1.0.17 → libusb-1.0.18}/libusb/os/threads_windows.h +1 -1
  86. data/ext/{libusbx-1.0.17 → libusb-1.0.18}/libusb/os/wince_usb.c +1 -2
  87. data/ext/{libusbx-1.0.17 → libusb-1.0.18}/libusb/os/wince_usb.h +2 -2
  88. data/ext/{libusbx-1.0.17 → libusb-1.0.18}/libusb/os/windows_common.h +1 -1
  89. data/ext/{libusbx-1.0.17 → libusb-1.0.18}/libusb/os/windows_usb.c +53 -33
  90. data/ext/{libusbx-1.0.17 → libusb-1.0.18}/libusb/os/windows_usb.h +6 -1
  91. data/ext/{libusbx-1.0.17 → libusb-1.0.18}/libusb/strerror.c +2 -2
  92. data/ext/{libusbx-1.0.17 → libusb-1.0.18}/libusb/sync.c +6 -6
  93. data/ext/{libusbx-1.0.17 → libusb-1.0.18}/libusb/version.h +1 -1
  94. data/ext/libusb-1.0.18/libusb/version_nano.h +1 -0
  95. data/ext/{libusbx-1.0.17 → libusb-1.0.18}/ltmain.sh +3 -3
  96. data/ext/libusb-1.0.18/missing +331 -0
  97. data/ext/{libusbx-1.0.17 → libusb-1.0.18}/tests/Makefile.am +1 -1
  98. data/ext/{libusbx-1.0.17 → libusb-1.0.18}/tests/Makefile.in +69 -127
  99. data/ext/{libusbx-1.0.17/tests/libusbx_testlib.h → libusb-1.0.18/tests/libusb_testlib.h} +15 -15
  100. data/ext/{libusbx-1.0.17 → libusb-1.0.18}/tests/stress.c +16 -16
  101. data/ext/{libusbx-1.0.17 → libusb-1.0.18}/tests/testlib.c +21 -20
  102. data/lib/libusb/version_gem.rb +1 -1
  103. data/libusb.gemspec +1 -6
  104. metadata +117 -135
  105. checksums.yaml +0 -7
  106. checksums.yaml.gz.sig +0 -0
  107. data.tar.gz.sig +0 -0
  108. data/ext/libusbx-1.0.17/NEWS +0 -2
  109. data/ext/libusbx-1.0.17/TODO +0 -2
  110. data/ext/libusbx-1.0.17/Xcode/libusbx.xcodeproj/project.pbxproj +0 -864
  111. data/ext/libusbx-1.0.17/aclocal.m4 +0 -1112
  112. data/ext/libusbx-1.0.17/libusb/version_nano.h +0 -1
  113. data/ext/libusbx-1.0.17/m4/ltoptions.m4 +0 -384
  114. data/ext/libusbx-1.0.17/m4/ltsugar.m4 +0 -123
  115. data/ext/libusbx-1.0.17/m4/ltversion.m4 +0 -23
  116. data/ext/libusbx-1.0.17/m4/lt~obsolete.m4 +0 -98
  117. data/ext/libusbx-1.0.17/missing +0 -215
  118. metadata.gz.sig +0 -0
@@ -1,5 +1,5 @@
1
1
  /*
2
- * libusbx example program to manipulate U.are.U 4000B fingerprint scanner.
2
+ * libusb example program to manipulate U.are.U 4000B fingerprint scanner.
3
3
  * Copyright © 2007 Daniel Drake <dsd@gentoo.org>
4
4
  *
5
5
  * Basic image capture program only, does not consider the powerup quirks or
@@ -1,5 +1,5 @@
1
1
  /*
2
- * libusbx example program to manipulate U.are.U 4000B fingerprint scanner.
2
+ * libusb example program to manipulate U.are.U 4000B fingerprint scanner.
3
3
  * Copyright © 2007 Daniel Drake <dsd@gentoo.org>
4
4
  *
5
5
  * Basic image capture program only, does not consider the powerup quirks or
@@ -181,7 +181,7 @@ static bool ezusb_cpucs(libusb_device_handle *device, uint32_t addr, bool doRun)
181
181
  RW_INTERNAL, addr & 0xFFFF, addr >> 16,
182
182
  &data, 1, 1000);
183
183
  if ((status != 1) &&
184
- /* We may get an I/O error from libusbx as the device disappears */
184
+ /* We may get an I/O error from libusb as the device disappears */
185
185
  ((!doRun) || (status != LIBUSB_ERROR_IO)))
186
186
  {
187
187
  const char *mesg = "can't modify CPUCS";
@@ -208,7 +208,7 @@ static bool ezusb_fx3_jump(libusb_device_handle *device, uint32_t addr)
208
208
  LIBUSB_ENDPOINT_OUT | LIBUSB_REQUEST_TYPE_VENDOR | LIBUSB_RECIPIENT_DEVICE,
209
209
  RW_INTERNAL, addr & 0xFFFF, addr >> 16,
210
210
  NULL, 0, 1000);
211
- /* We may get an I/O error from libusbx as the device disappears */
211
+ /* We may get an I/O error from libusb as the device disappears */
212
212
  if ((status != 0) && (status != LIBUSB_ERROR_IO))
213
213
  {
214
214
  const char *mesg = "failed to send jump command";
@@ -436,7 +436,11 @@ static int parse_iic(FILE *image, void *context,
436
436
  uint8_t block_header[4];
437
437
  int rc;
438
438
  bool external = false;
439
- long file_size, initial_pos = ftell(image);
439
+ long file_size, initial_pos;
440
+
441
+ initial_pos = ftell(image);
442
+ if (initial_pos < 0)
443
+ return -1;
440
444
 
441
445
  fseek(image, 0L, SEEK_END);
442
446
  file_size = ftell(image);
@@ -453,7 +457,7 @@ static int parse_iic(FILE *image, void *context,
453
457
  data_addr = (block_header[2] << 8) + block_header[3];
454
458
  if (data_len > sizeof(data)) {
455
459
  /* If this is ever reported as an error, switch to using malloc/realloc */
456
- logerror("IIC data block too small - please report this error to libusbx.org\n");
460
+ logerror("IIC data block too small - please report this error to libusb.info\n");
457
461
  return -1;
458
462
  }
459
463
  read_len = fread(data, 1, data_len, image);
@@ -563,6 +567,7 @@ static int fx3_load_ram(libusb_device_handle *device, const char *path)
563
567
  uint32_t* dImageBuf;
564
568
  unsigned char *bBuf, hBuf[4], blBuf[4], rBuf[4096];
565
569
  FILE *image;
570
+ int ret = 0;
566
571
 
567
572
  image = fopen(path, "rb");
568
573
  if (image == NULL) {
@@ -574,13 +579,15 @@ static int fx3_load_ram(libusb_device_handle *device, const char *path)
574
579
  // Read header
575
580
  if (fread(hBuf, sizeof(char), sizeof(hBuf), image) != sizeof(hBuf)) {
576
581
  logerror("could not read image header");
577
- return -3;
582
+ ret = -3;
583
+ goto exit;
578
584
  }
579
585
 
580
586
  // check "CY" signature byte and format
581
587
  if ((hBuf[0] != 'C') || (hBuf[1] != 'Y')) {
582
588
  logerror("image doesn't have a CYpress signature\n");
583
- return -3;
589
+ ret = -3;
590
+ goto exit;
584
591
  }
585
592
 
586
593
  // Check bImageType
@@ -591,20 +598,24 @@ static int fx3_load_ram(libusb_device_handle *device, const char *path)
591
598
  break;
592
599
  case 0xB1:
593
600
  logerror("security binary image is not currently supported\n");
594
- return -3;
601
+ ret = -3;
602
+ goto exit;
595
603
  case 0xB2:
596
604
  logerror("VID:PID image is not currently supported\n");
597
- return -3;
605
+ ret = -3;
606
+ goto exit;
598
607
  default:
599
608
  logerror("invalid image type 0x%02X\n", hBuf[3]);
600
- return -3;
609
+ ret = -3;
610
+ goto exit;
601
611
  }
602
612
 
603
613
  // Read the bootloader version
604
614
  if (verbose) {
605
615
  if ((ezusb_read(device, "read bootloader version", RW_INTERNAL, 0xFFFF0020, blBuf, 4) < 0)) {
606
616
  logerror("Could not read bootloader version\n");
607
- return -8;
617
+ ret = -8;
618
+ goto exit;
608
619
  }
609
620
  logerror("FX3 bootloader version: 0x%02X%02X%02X%02X\n", blBuf[3], blBuf[2], blBuf[1], blBuf[0]);
610
621
  }
@@ -616,7 +627,8 @@ static int fx3_load_ram(libusb_device_handle *device, const char *path)
616
627
  if ((fread(&dLength, sizeof(uint32_t), 1, image) != 1) || // read dLength
617
628
  (fread(&dAddress, sizeof(uint32_t), 1, image) != 1)) { // read dAddress
618
629
  logerror("could not read image");
619
- return -3;
630
+ ret = -3;
631
+ goto exit;
620
632
  }
621
633
  if (dLength == 0)
622
634
  break; // done
@@ -624,14 +636,16 @@ static int fx3_load_ram(libusb_device_handle *device, const char *path)
624
636
  dImageBuf = calloc(dLength, sizeof(uint32_t));
625
637
  if (dImageBuf == NULL) {
626
638
  logerror("could not allocate buffer for image chunk\n");
627
- return -4;
639
+ ret = -4;
640
+ goto exit;
628
641
  }
629
642
 
630
643
  // read sections
631
644
  if (fread(dImageBuf, sizeof(uint32_t), dLength, image) != dLength) {
632
645
  logerror("could not read image");
633
646
  free(dImageBuf);
634
- return -3;
647
+ ret = -3;
648
+ goto exit;
635
649
  }
636
650
  for (i = 0; i < dLength; i++)
637
651
  dCheckSum += dImageBuf[i];
@@ -646,14 +660,16 @@ static int fx3_load_ram(libusb_device_handle *device, const char *path)
646
660
  (ezusb_read(device, "read firmware", RW_INTERNAL, dAddress, rBuf, dLen) < 0)) {
647
661
  logerror("R/W error\n");
648
662
  free(dImageBuf);
649
- return -5;
663
+ ret = -5;
664
+ goto exit;
650
665
  }
651
666
  // Verify data: rBuf with bBuf
652
667
  for (i = 0; i < dLen; i++) {
653
668
  if (rBuf[i] != bBuf[i]) {
654
669
  logerror("verify error");
655
670
  free(dImageBuf);
656
- return -6;
671
+ ret = -6;
672
+ goto exit;
657
673
  }
658
674
  }
659
675
 
@@ -668,19 +684,22 @@ static int fx3_load_ram(libusb_device_handle *device, const char *path)
668
684
  if ((fread(&dExpectedCheckSum, sizeof(uint32_t), 1, image) != 1) ||
669
685
  (dCheckSum != dExpectedCheckSum)) {
670
686
  logerror("checksum error\n");
671
- return -7;
687
+ ret = -7;
688
+ goto exit;
672
689
  }
673
690
 
674
691
  // transfer execution to Program Entry
675
692
  if (!ezusb_fx3_jump(device, dAddress)) {
676
- return -6;
693
+ ret = -6;
677
694
  }
678
695
 
679
- return 0;
696
+ exit:
697
+ fclose(image);
698
+ return ret;
680
699
  }
681
700
 
682
701
  /*
683
- * Load a firmware file into target RAM. device is the open libusbx
702
+ * Load a firmware file into target RAM. device is the open libusb
684
703
  * device, and the path is the name of the source file. Open the file,
685
704
  * parse the bytes, and write them in one or two phases.
686
705
  *
@@ -701,6 +720,7 @@ int ezusb_load_ram(libusb_device_handle *device, const char *path, int fx_type,
701
720
  struct ram_poke_context ctx;
702
721
  int status;
703
722
  uint8_t iic_header[8] = { 0 };
723
+ int ret = 0;
704
724
 
705
725
  if (fx_type == FX_TYPE_FX3)
706
726
  return fx3_load_ram(device, path);
@@ -718,7 +738,8 @@ int ezusb_load_ram(libusb_device_handle *device, const char *path, int fx_type,
718
738
  || ((fx_type == FX_TYPE_AN21) && (iic_header[0] != 0xB2))
719
739
  || ((fx_type == FX_TYPE_FX1) && (iic_header[0] != 0xB6)) ) {
720
740
  logerror("IIC image does not contain executable code - cannot load to RAM.\n");
721
- return -1;
741
+ ret = -1;
742
+ goto exit;
722
743
  }
723
744
  }
724
745
 
@@ -744,7 +765,10 @@ int ezusb_load_ram(libusb_device_handle *device, const char *path, int fx_type,
744
765
 
745
766
  /* if required, halt the CPU while we overwrite its code/data */
746
767
  if (cpucs_addr && !ezusb_cpucs(device, cpucs_addr, false))
747
- return -1;
768
+ {
769
+ ret = -1;
770
+ goto exit;
771
+ }
748
772
 
749
773
  /* 2nd stage, first part? loader was already uploaded */
750
774
  } else {
@@ -761,7 +785,8 @@ int ezusb_load_ram(libusb_device_handle *device, const char *path, int fx_type,
761
785
  status = parse[img_type](image, &ctx, is_external, ram_poke);
762
786
  if (status < 0) {
763
787
  logerror("unable to upload %s\n", path);
764
- return status;
788
+ ret = status;
789
+ goto exit;
765
790
  }
766
791
 
767
792
  /* second part of 2nd stage: rescan */
@@ -771,7 +796,10 @@ int ezusb_load_ram(libusb_device_handle *device, const char *path, int fx_type,
771
796
 
772
797
  /* if needed, halt the CPU while we overwrite the 1st stage loader */
773
798
  if (cpucs_addr && !ezusb_cpucs(device, cpucs_addr, false))
774
- return -1;
799
+ {
800
+ ret = -1;
801
+ goto exit;
802
+ }
775
803
 
776
804
  /* at least write the interrupt vectors (at 0x0000) for reset! */
777
805
  rewind(image);
@@ -780,7 +808,8 @@ int ezusb_load_ram(libusb_device_handle *device, const char *path, int fx_type,
780
808
  status = parse_ihex(image, &ctx, is_external, ram_poke);
781
809
  if (status < 0) {
782
810
  logerror("unable to completely upload %s\n", path);
783
- return status;
811
+ ret = status;
812
+ goto exit;
784
813
  }
785
814
  }
786
815
 
@@ -790,7 +819,9 @@ int ezusb_load_ram(libusb_device_handle *device, const char *path, int fx_type,
790
819
 
791
820
  /* if required, reset the CPU so it runs what we just uploaded */
792
821
  if (cpucs_addr && !ezusb_cpucs(device, cpucs_addr, true))
793
- return -1;
822
+ ret = -1;
794
823
 
795
- return 0;
824
+ exit:
825
+ fclose(image);
826
+ return ret;
796
827
  }
@@ -40,7 +40,7 @@ static bool dosyslog = false;
40
40
  #endif
41
41
 
42
42
  #ifndef FXLOAD_VERSION
43
- #define FXLOAD_VERSION (__DATE__ " (libusbx)")
43
+ #define FXLOAD_VERSION (__DATE__ " (libusb)")
44
44
  #endif
45
45
 
46
46
  #ifndef ARRAYSIZE
@@ -69,7 +69,7 @@ static int print_usage(int error_code) {
69
69
  fprintf(stderr, " -i <path> -- Firmware to upload\n");
70
70
  fprintf(stderr, " -t <type> -- Target type: an21, fx, fx2, fx2lp, fx3\n");
71
71
  fprintf(stderr, " -d <vid:pid> -- Target device, as an USB VID:PID\n");
72
- fprintf(stderr, " -p <bus,addr> -- Target device, as a libusbx bus number and device address path\n");
72
+ fprintf(stderr, " -p <bus,addr> -- Target device, as a libusb bus number and device address path\n");
73
73
  fprintf(stderr, " -v -- Increase verbosity\n");
74
74
  fprintf(stderr, " -q -- Decrease verbosity (silent mode)\n");
75
75
  fprintf(stderr, " -V -- Print program version\n");
@@ -165,7 +165,7 @@ int main(int argc, char*argv[])
165
165
  }
166
166
  }
167
167
 
168
- /* open the device using libusbx */
168
+ /* open the device using libusb */
169
169
  status = libusb_init(NULL);
170
170
  if (status < 0) {
171
171
  logerror("libusb_init() failed: %s\n", libusb_error_name(status));
@@ -65,7 +65,12 @@ int main(int argc, char *argv[])
65
65
  product_id = (argc > 2) ? strtol (argv[2], NULL, 0) : 0x5005;
66
66
  class_id = (argc > 3) ? strtol (argv[3], NULL, 0) : LIBUSB_HOTPLUG_MATCH_ANY;
67
67
 
68
- libusb_init (NULL);
68
+ rc = libusb_init (NULL);
69
+ if (rc < 0)
70
+ {
71
+ printf("failed to initialise libusb: %s\n", libusb_error_name(rc));
72
+ return EXIT_FAILURE;
73
+ }
69
74
 
70
75
  if (!libusb_has_capability (LIBUSB_CAP_HAS_HOTPLUG)) {
71
76
  printf ("Hotplug capabilites are not supported on this platform\n");
@@ -90,7 +95,9 @@ int main(int argc, char *argv[])
90
95
  }
91
96
 
92
97
  while (done < 2) {
93
- libusb_handle_events (NULL);
98
+ rc = libusb_handle_events (NULL);
99
+ if (rc < 0)
100
+ printf("libusb_handle_events() failed: %s\n", libusb_error_name(rc));
94
101
  }
95
102
 
96
103
  libusb_exit (NULL);
@@ -1,5 +1,5 @@
1
1
  /*
2
- * libusbx example program to list devices on the bus
2
+ * libusb example program to list devices on the bus
3
3
  * Copyright © 2007 Daniel Drake <dsd@gentoo.org>
4
4
  *
5
5
  * This library is free software; you can redistribute it and/or
@@ -43,13 +43,14 @@
43
43
  #define false (!true)
44
44
  #endif
45
45
 
46
- // Future versions of libusbx will use usb_interface instead of interface
46
+ // Future versions of libusb will use usb_interface instead of interface
47
47
  // in libusb_config_descriptor => catter for that
48
48
  #define usb_interface interface
49
49
 
50
50
  // Global variables
51
51
  static bool binary_dump = false;
52
52
  static bool extra_info = false;
53
+ static bool force_device_request = false; // For WCID descriptor queries
53
54
  static const char* binary_name = NULL;
54
55
 
55
56
  static int perr(char const *format, ...)
@@ -415,6 +416,7 @@ static void get_sense(libusb_device_handle *handle, uint8_t endpoint_in, uint8_t
415
416
  uint8_t sense[18];
416
417
  uint32_t expected_tag;
417
418
  int size;
419
+ int rc;
418
420
 
419
421
  // Request Sense
420
422
  printf("Request Sense:\n");
@@ -424,7 +426,12 @@ static void get_sense(libusb_device_handle *handle, uint8_t endpoint_in, uint8_t
424
426
  cdb[4] = REQUEST_SENSE_LENGTH;
425
427
 
426
428
  send_mass_storage_command(handle, endpoint_out, 0, cdb, LIBUSB_ENDPOINT_IN, REQUEST_SENSE_LENGTH, &expected_tag);
427
- libusb_bulk_transfer(handle, endpoint_in, (unsigned char*)&sense, REQUEST_SENSE_LENGTH, &size, 1000);
429
+ rc = libusb_bulk_transfer(handle, endpoint_in, (unsigned char*)&sense, REQUEST_SENSE_LENGTH, &size, 1000);
430
+ if (rc < 0)
431
+ {
432
+ printf("libusb_bulk_transfer failed: %s\n", libusb_error_name(rc));
433
+ return;
434
+ }
428
435
  printf(" received %d bytes\n", size);
429
436
 
430
437
  if ((sense[0] != 0x70) && (sense[0] != 0x71)) {
@@ -707,6 +714,11 @@ static void read_ms_winsub_feature_descriptors(libusb_device_handle *handle, uin
707
714
  };
708
715
 
709
716
  if (iface_number < 0) return;
717
+ // WinUSB has a limitation that forces wIndex to the interface number when issuing
718
+ // an Interface Request. To work around that, we can force a Device Request for
719
+ // the Extended Properties, assuming the device answers both equally.
720
+ if (force_device_request)
721
+ os_fd[1].recipient = LIBUSB_RECIPIENT_DEVICE;
710
722
 
711
723
  for (i=0; i<2; i++) {
712
724
  printf("\nReading %s OS Feature Descriptor (wIndex = 0x%04d):\n", os_fd[i].desc, os_fd[i].index);
@@ -985,6 +997,9 @@ int main(int argc, char** argv)
985
997
  case 'i':
986
998
  extra_info = true;
987
999
  break;
1000
+ case 'w':
1001
+ force_device_request = true;
1002
+ break;
988
1003
  case 'b':
989
1004
  if ((j+1 >= argc) || (argv[j+1][0] == '-') || (argv[j+1][0] == '/')) {
990
1005
  printf(" Option -b requires a file name\n");
@@ -1057,7 +1072,7 @@ int main(int argc, char** argv)
1057
1072
  }
1058
1073
 
1059
1074
  if ((show_help) || (argc == 1) || (argc > 7)) {
1060
- printf("usage: %s [-h] [-d] [-i] [-k] [-b file] [-l lang] [-j] [-x] [-s] [-p] [vid:pid]\n", argv[0]);
1075
+ printf("usage: %s [-h] [-d] [-i] [-k] [-b file] [-l lang] [-j] [-x] [-s] [-p] [-w] [vid:pid]\n", argv[0]);
1061
1076
  printf(" -h : display usage\n");
1062
1077
  printf(" -d : enable debug output\n");
1063
1078
  printf(" -i : print topology and speed info\n");
@@ -1068,12 +1083,13 @@ int main(int argc, char** argv)
1068
1083
  printf(" -s : test Microsoft Sidewinder Precision Pro (HID)\n");
1069
1084
  printf(" -x : test Microsoft XBox Controller Type S\n");
1070
1085
  printf(" -l lang : language to report errors in (ISO 639-1)\n");
1086
+ printf(" -w : force the use of device requests when querying WCID descriptors\n");
1071
1087
  printf("If only the vid:pid is provided, xusb attempts to run the most appropriate test\n");
1072
1088
  return 0;
1073
1089
  }
1074
1090
 
1075
1091
  version = libusb_get_version();
1076
- printf("Using libusbx v%d.%d.%d.%d\n\n", version->major, version->minor, version->micro, version->nano);
1092
+ printf("Using libusb v%d.%d.%d.%d\n\n", version->major, version->minor, version->micro, version->nano);
1077
1093
  r = libusb_init(NULL);
1078
1094
  if (r < 0)
1079
1095
  return r;
@@ -1,7 +1,7 @@
1
1
  #!/bin/sh
2
2
  # install - install a program, script, or datafile
3
3
 
4
- scriptversion=2011-11-20.07; # UTC
4
+ scriptversion=2011-01-19.21; # UTC
5
5
 
6
6
  # This originates from X11R5 (mit/util/scripts/install.sh), which was
7
7
  # later released in X11R6 (xc/config/util/install.sh) with the
@@ -35,7 +35,7 @@ scriptversion=2011-11-20.07; # UTC
35
35
  # FSF changes to this file are in the public domain.
36
36
  #
37
37
  # Calling this script install-sh is preferred over install.sh, to prevent
38
- # 'make' implicit rules from creating a file called install from it
38
+ # `make' implicit rules from creating a file called install from it
39
39
  # when there is no Makefile.
40
40
  #
41
41
  # This script is compatible with the BSD install script, but was written
@@ -156,7 +156,7 @@ while test $# -ne 0; do
156
156
  -s) stripcmd=$stripprog;;
157
157
 
158
158
  -t) dst_arg=$2
159
- # Protect names problematic for 'test' and other utilities.
159
+ # Protect names problematic for `test' and other utilities.
160
160
  case $dst_arg in
161
161
  -* | [=\(\)!]) dst_arg=./$dst_arg;;
162
162
  esac
@@ -190,7 +190,7 @@ if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
190
190
  fi
191
191
  shift # arg
192
192
  dst_arg=$arg
193
- # Protect names problematic for 'test' and other utilities.
193
+ # Protect names problematic for `test' and other utilities.
194
194
  case $dst_arg in
195
195
  -* | [=\(\)!]) dst_arg=./$dst_arg;;
196
196
  esac
@@ -202,7 +202,7 @@ if test $# -eq 0; then
202
202
  echo "$0: no input file specified." >&2
203
203
  exit 1
204
204
  fi
205
- # It's OK to call 'install-sh -d' without argument.
205
+ # It's OK to call `install-sh -d' without argument.
206
206
  # This can happen when creating conditional directories.
207
207
  exit 0
208
208
  fi
@@ -240,7 +240,7 @@ fi
240
240
 
241
241
  for src
242
242
  do
243
- # Protect names problematic for 'test' and other utilities.
243
+ # Protect names problematic for `test' and other utilities.
244
244
  case $src in
245
245
  -* | [=\(\)!]) src=./$src;;
246
246
  esac
@@ -354,7 +354,7 @@ do
354
354
  if test -z "$dir_arg" || {
355
355
  # Check for POSIX incompatibilities with -m.
356
356
  # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
357
- # other-writable bit of parent directory when it shouldn't.
357
+ # other-writeable bit of parent directory when it shouldn't.
358
358
  # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
359
359
  ls_ld_tmpdir=`ls -ld "$tmpdir"`
360
360
  case $ls_ld_tmpdir in