libusb 0.1.2-x86-mingw32 → 0.1.3-x86-mingw32

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.
@@ -1,3 +1,8 @@
1
+ === 0.1.3 / 2012-03-15
2
+
3
+ * Add documentation of descriptor accessors
4
+ * Fix #extra accessor of Configuration, Setting and Endpoint
5
+
1
6
  === 0.1.2 / 2012-03-14
2
7
 
3
8
  * Mark all blocking functions as blocking in FFI, so that parallel threads are not blocked
Binary file
@@ -18,7 +18,7 @@ require 'ffi'
18
18
 
19
19
 
20
20
  module LIBUSB
21
- VERSION = "0.1.2"
21
+ VERSION = "0.1.3"
22
22
 
23
23
  module Call
24
24
  extend FFI::Library
@@ -235,6 +235,7 @@ module LIBUSB
235
235
  Call::RequestRecipients.to_h.each{|k,v| const_set(k,v) }
236
236
  Call::IsoSyncTypes.to_h.each{|k,v| const_set(k,v) }
237
237
 
238
+ # Base class of libusb errors
238
239
  class Error < RuntimeError
239
240
  end
240
241
  ErrorClassForResult = {}
@@ -592,6 +593,7 @@ module LIBUSB
592
593
  private :actual_length, :actual_buffer
593
594
  end
594
595
 
596
+ # @private
595
597
  class DeviceDescriptor < FFI::Struct
596
598
  include Comparable
597
599
 
@@ -626,10 +628,61 @@ module LIBUSB
626
628
  :extra, :pointer,
627
629
  :extra_length, :int
628
630
 
629
- members.each do |member|
630
- define_method(member) do
631
- self[member]
632
- end
631
+ # Size of this descriptor (in bytes).
632
+ def bLength
633
+ self[:bLength]
634
+ end
635
+
636
+ # Descriptor type (0x02)
637
+ def bDescriptorType
638
+ self[:bDescriptorType]
639
+ end
640
+
641
+ # Total length of data returned for this configuration.
642
+ def wTotalLength
643
+ self[:wTotalLength]
644
+ end
645
+
646
+ # Number of interfaces supported by this configuration.
647
+ def bNumInterfaces
648
+ self[:bNumInterfaces]
649
+ end
650
+
651
+ # Identifier value for this configuration.
652
+ def bConfigurationValue
653
+ self[:bConfigurationValue]
654
+ end
655
+
656
+ # Index of string descriptor describing this configuration.
657
+ def iConfiguration
658
+ self[:iConfiguration]
659
+ end
660
+
661
+ # Configuration characteristics.
662
+ #
663
+ # * Bit 7: Reserved, set to 1. (USB 1.0 Bus Powered)
664
+ # * Bit 6: Self Powered
665
+ # * Bit 5: Remote Wakeup
666
+ # * Bit 4..0: Reserved, set to 0.
667
+ #
668
+ # @return [Integer]
669
+ def bmAttributes
670
+ self[:bmAttributes]
671
+ end
672
+
673
+ # Maximum power consumption of the USB device from this bus in this configuration when the device is fully opreation.
674
+ #
675
+ # @result [Integer] Maximum Power Consumption in 2mA units
676
+ def maxPower
677
+ self[:maxPower]
678
+ end
679
+
680
+ # Extra descriptors.
681
+ #
682
+ # @return [String]
683
+ def extra
684
+ return if self[:extra].null?
685
+ self[:extra].read_string(self[:extra_length])
633
686
  end
634
687
 
635
688
  def initialize(device, *args)
@@ -663,15 +716,15 @@ module LIBUSB
663
716
  "\#<#{self.class} #{attrs.join(' ')}>"
664
717
  end
665
718
 
666
- # Return name of the configuration as String.
719
+ # Return name of this configuration as String.
667
720
  def description
668
721
  return @description if defined? @description
669
722
  @description = device.try_string_descriptor_ascii(self.iConfiguration)
670
723
  end
671
724
 
672
- # Return all interface decriptions of the configuration as Array of InterfaceDescriptor s.
725
+ # Return all interface decriptions of the configuration as Array of {Setting}s.
673
726
  def settings() self.interfaces.map {|d| d.settings }.flatten end
674
- # Return all endpoints of all interfaces of the configuration as Array of EndpointDescriptor s.
727
+ # Return all endpoints of all interfaces of the configuration as Array of {Endpoint}s.
675
728
  def endpoints() self.settings.map {|d| d.endpoints }.flatten end
676
729
 
677
730
  def <=>(o)
@@ -704,9 +757,9 @@ module LIBUSB
704
757
  end
705
758
  alias settings alt_settings
706
759
 
707
- # The Device the Interface belongs to.
760
+ # The {Device} this Interface belongs to.
708
761
  def device() self.configuration.device end
709
- # Return all endpoints of all alternative settings as Array of EndpointDescriptor s.
762
+ # Return all endpoints of all alternative settings as Array of {Endpoint}s.
710
763
  def endpoints() self.alt_settings.map {|d| d.endpoints }.flatten end
711
764
 
712
765
  def <=>(o)
@@ -730,10 +783,57 @@ module LIBUSB
730
783
  :extra, :pointer,
731
784
  :extra_length, :int
732
785
 
733
- members.each do |member|
734
- define_method(member) do
735
- self[member]
736
- end
786
+ # Size of this descriptor (in bytes).
787
+ def bLength
788
+ self[:bLength]
789
+ end
790
+
791
+ # Descriptor type (0x04)
792
+ def bDescriptorType
793
+ self[:bDescriptorType]
794
+ end
795
+
796
+ # Number of this interface.
797
+ def bInterfaceNumber
798
+ self[:bInterfaceNumber]
799
+ end
800
+
801
+ # Value used to select this alternate setting for this interface.
802
+ def bAlternateSetting
803
+ self[:bAlternateSetting]
804
+ end
805
+
806
+ # Number of endpoints used by this interface (excluding the control endpoint).
807
+ def bNumEndpoints
808
+ self[:bNumEndpoints]
809
+ end
810
+
811
+ # USB-IF class code for this interface.
812
+ def bInterfaceClass
813
+ self[:bInterfaceClass]
814
+ end
815
+
816
+ # USB-IF subclass code for this interface, qualified by the {bInterfaceClass} value.
817
+ def bInterfaceSubClass
818
+ self[:bInterfaceSubClass]
819
+ end
820
+
821
+ # USB-IF protocol code for this interface, qualified by the {bInterfaceClass} and {bInterfaceSubClass} values.
822
+ def bInterfaceProtocol
823
+ self[:bInterfaceProtocol]
824
+ end
825
+
826
+ # Index of string descriptor describing this interface.
827
+ def iInterface
828
+ self[:iInterface]
829
+ end
830
+
831
+ # Extra descriptors.
832
+ #
833
+ # @return [String]
834
+ def extra
835
+ return if self[:extra].null?
836
+ self[:extra].read_string(self[:extra_length])
737
837
  end
738
838
 
739
839
  def initialize(interface, *args)
@@ -762,15 +862,15 @@ module LIBUSB
762
862
  "\#<#{self.class} #{attrs.join(' ')}>"
763
863
  end
764
864
 
765
- # Return name of the Interface as String.
865
+ # Return name of this interface as String.
766
866
  def description
767
867
  return @description if defined? @description
768
868
  @description = device.try_string_descriptor_ascii(self.iInterface)
769
869
  end
770
870
 
771
- # The Device the InterfaceDescriptor belongs to.
871
+ # The {Device} this Setting belongs to.
772
872
  def device() self.interface.configuration.device end
773
- # The ConfigDescriptor the InterfaceDescriptor belongs to.
873
+ # The {Configuration} this Setting belongs to.
774
874
  def configuration() self.interface.configuration end
775
875
 
776
876
  def <=>(o)
@@ -795,10 +895,82 @@ module LIBUSB
795
895
  :extra, :pointer,
796
896
  :extra_length, :int
797
897
 
798
- members.each do |member|
799
- define_method(member) do
800
- self[member]
801
- end
898
+ # Size of Descriptor in Bytes (7 bytes)
899
+ def bLength
900
+ self[:bLength]
901
+ end
902
+
903
+ # Descriptor type (0x05)
904
+ def bDescriptorType
905
+ self[:bDescriptorType]
906
+ end
907
+
908
+ # The address of the endpoint described by this descriptor.
909
+ #
910
+ # * Bits 0..3: Endpoint Number.
911
+ # * Bits 4..6: Reserved. Set to Zero
912
+ # * Bits 7: Direction 0 = Out, 1 = In (Ignored for Control Endpoints)
913
+ #
914
+ # @return [Integer]
915
+ def bEndpointAddress
916
+ self[:bEndpointAddress]
917
+ end
918
+
919
+ # Attributes which apply to the endpoint when it is configured using the {Configuration#bConfigurationValue}.
920
+ #
921
+ # * Bits 0..1: Transfer Type
922
+ # * 00 = Control
923
+ # * 01 = Isochronous
924
+ # * 10 = Bulk
925
+ # * 11 = Interrupt
926
+ # * Bits 2..7: are reserved. If Isochronous endpoint,
927
+ # * Bits 3..2: Synchronisation Type (Iso Mode)
928
+ # * 00 = No Synchonisation
929
+ # * 01 = Asynchronous
930
+ # * 10 = Adaptive
931
+ # * 11 = Synchronous
932
+ # * Bits 5..4: Usage Type (Iso Mode)
933
+ # * 00 = Data Endpoint
934
+ # * 01 = Feedback Endpoint
935
+ # * 10 = Explicit Feedback Data Endpoint
936
+ # * 11 = Reserved
937
+ #
938
+ # @return [Integer]
939
+ def bmAttributes
940
+ self[:bmAttributes]
941
+ end
942
+
943
+ # Maximum Packet Size this endpoint is capable of sending or receiving
944
+ def wMaxPacketSize
945
+ self[:wMaxPacketSize]
946
+ end
947
+
948
+ # Interval for polling endpoint data transfers. Value in frame counts.
949
+ # Ignored for Bulk & Control Endpoints. Isochronous must equal 1 and field
950
+ # may range from 1 to 255 for interrupt endpoints.
951
+ #
952
+ # The interval is respected by the kernel driver, so user mode processes
953
+ # using libusb don't need to care about it.
954
+ def bInterval
955
+ self[:bInterval]
956
+ end
957
+
958
+ # For audio devices only: the rate at which synchronization feedback is provided.
959
+ def bRefresh
960
+ self[:bRefresh]
961
+ end
962
+
963
+ # For audio devices only: the address if the synch endpoint.
964
+ def bSynchAddress
965
+ self[:bSynchAddress]
966
+ end
967
+
968
+ # Extra descriptors.
969
+ #
970
+ # @return [String]
971
+ def extra
972
+ return if self[:extra].null?
973
+ self[:extra].read_string(self[:extra_length])
802
974
  end
803
975
 
804
976
  def initialize(setting, *args)
@@ -824,11 +996,11 @@ module LIBUSB
824
996
  "\#<#{self.class} #{num} #{inout} #{type.join(" ")}>"
825
997
  end
826
998
 
827
- # The Device the EndpointDescriptor belongs to.
999
+ # The {Device} this Endpoint belongs to.
828
1000
  def device() self.setting.interface.configuration.device end
829
- # The ConfigDescriptor the EndpointDescriptor belongs to.
1001
+ # The {Configuration} this Endpoint belongs to.
830
1002
  def configuration() self.setting.interface.configuration end
831
- # The Interface the EndpointDescriptor belongs to.
1003
+ # The {Interface} this Endpoint belongs to.
832
1004
  def interface() self.setting.interface end
833
1005
 
834
1006
  def <=>(o)
@@ -1072,13 +1244,85 @@ module LIBUSB
1072
1244
  config
1073
1245
  end
1074
1246
 
1075
- # allow access to Descriptor members on Device
1076
- DeviceDescriptor.members.each do |member|
1077
- define_method(member) do
1078
- @pDevDesc[member]
1079
- end
1247
+ # Size of the Descriptor in Bytes (18 bytes)
1248
+ def bLength
1249
+ @pDevDesc[:bLength]
1080
1250
  end
1081
1251
 
1252
+ # Device Descriptor (0x01)
1253
+ def bDescriptorType
1254
+ @pDevDesc[:bDescriptorType]
1255
+ end
1256
+
1257
+ # USB specification release number which device complies too
1258
+ #
1259
+ # @return [Integer] in binary-coded decimal
1260
+ def bcdUSB
1261
+ @pDevDesc[:bcdUSB]
1262
+ end
1263
+
1264
+ # USB-IF class code for the device (Assigned by USB Org)
1265
+ #
1266
+ # * If equal to 0x00, each interface specifies it's own class code
1267
+ # * If equal to 0xFF, the class code is vendor specified
1268
+ # * Otherwise field is valid Class Code
1269
+ def bDeviceClass
1270
+ @pDevDesc[:bDeviceClass]
1271
+ end
1272
+
1273
+ # USB-IF subclass code for the device, qualified by the {bDeviceClass}
1274
+ # value (Assigned by USB Org)
1275
+ def bDeviceSubClass
1276
+ @pDevDesc[:bDeviceSubClass]
1277
+ end
1278
+
1279
+ # USB-IF protocol code for the device, qualified by the {bDeviceClass}
1280
+ # and {bDeviceSubClass} values (Assigned by USB Org)
1281
+ def bDeviceProtocol
1282
+ @pDevDesc[:bDeviceProtocol]
1283
+ end
1284
+
1285
+ # Maximum Packet Size for Endpoint 0. Valid Sizes are 8, 16, 32, 64
1286
+ def bMaxPacketSize0
1287
+ @pDevDesc[:bMaxPacketSize0]
1288
+ end
1289
+
1290
+ # USB-IF vendor ID (Assigned by USB Org)
1291
+ def idVendor
1292
+ @pDevDesc[:idVendor]
1293
+ end
1294
+
1295
+ # USB-IF product ID (Assigned by Manufacturer)
1296
+ def idProduct
1297
+ @pDevDesc[:idProduct]
1298
+ end
1299
+
1300
+ # Device release number in binary-coded decimal.
1301
+ def bcdDevice
1302
+ @pDevDesc[:bcdDevice]
1303
+ end
1304
+
1305
+ # Index of string descriptor describing manufacturer.
1306
+ def iManufacturer
1307
+ @pDevDesc[:iManufacturer]
1308
+ end
1309
+
1310
+ # Index of string descriptor describing product.
1311
+ def iProduct
1312
+ @pDevDesc[:iProduct]
1313
+ end
1314
+
1315
+ # Index of string descriptor containing device serial number.
1316
+ def iSerialNumber
1317
+ @pDevDesc[:iSerialNumber]
1318
+ end
1319
+
1320
+ # Number of Possible Configurations
1321
+ def bNumConfigurations
1322
+ @pDevDesc[:bNumConfigurations]
1323
+ end
1324
+
1325
+
1082
1326
  def inspect
1083
1327
  attrs = []
1084
1328
  attrs << "#{self.bus_number}/#{self.device_address}"
@@ -1147,13 +1391,13 @@ module LIBUSB
1147
1391
  configs
1148
1392
  end
1149
1393
 
1150
- # Return all interfaces of the device.
1394
+ # Return all interfaces of this device.
1151
1395
  # @return [Array<Interface>]
1152
1396
  def interfaces() self.configurations.map {|d| d.interfaces }.flatten end
1153
- # Return all interface decriptions of the device.
1397
+ # Return all interface decriptions of this device.
1154
1398
  # @return [Array<Setting>]
1155
1399
  def settings() self.interfaces.map {|d| d.settings }.flatten end
1156
- # Return all endpoints of all interfaces of the device.
1400
+ # Return all endpoints of all interfaces of this device.
1157
1401
  # @return [Array<Endpoint>]
1158
1402
  def endpoints() self.settings.map {|d| d.endpoints }.flatten end
1159
1403
 
@@ -29,10 +29,36 @@ class TestLibusbDescriptors < Test::Unit::TestCase
29
29
  def test_descriptors
30
30
  usb.devices.each do |dev|
31
31
  assert_match(/Device/, dev.inspect, "Device#inspect should work")
32
+
33
+ assert_kind_of Integer, dev.bLength
34
+ assert_equal 1, dev.bDescriptorType
35
+ assert_kind_of Integer, dev.bcdUSB
36
+ assert_kind_of Integer, dev.bDeviceClass
37
+ assert_kind_of Integer, dev.bDeviceSubClass
38
+ assert_kind_of Integer, dev.bDeviceProtocol
39
+ assert_kind_of Integer, dev.bMaxPacketSize0
40
+ assert_kind_of Integer, dev.idVendor
41
+ assert_kind_of Integer, dev.idProduct
42
+ assert_kind_of Integer, dev.bcdDevice
43
+ assert_kind_of Integer, dev.iManufacturer
44
+ assert_kind_of Integer, dev.iProduct
45
+ assert_kind_of Integer, dev.iSerialNumber
46
+ assert_kind_of Integer, dev.bNumConfigurations
47
+
32
48
  dev.configurations.each do |config_desc|
33
49
  assert_match(/Configuration/, config_desc.inspect, "ConfigDescriptor#inspect should work")
34
50
  assert dev.configurations.include?(config_desc), "Device#configurations should include this one"
35
51
 
52
+ assert_kind_of Integer, config_desc.bLength
53
+ assert_equal 2, config_desc.bDescriptorType
54
+ assert_kind_of Integer, config_desc.wTotalLength
55
+ assert_equal config_desc.interfaces.length, config_desc.bNumInterfaces
56
+ assert_kind_of Integer, config_desc.bConfigurationValue
57
+ assert_kind_of Integer, config_desc.iConfiguration
58
+ assert_kind_of Integer, config_desc.bmAttributes
59
+ assert_kind_of Integer, config_desc.maxPower
60
+ assert_kind_of String, config_desc.extra if config_desc.extra
61
+
36
62
  config_desc.interfaces.each do |interface|
37
63
  assert_match(/Interface/, interface.inspect, "Interface#inspect should work")
38
64
 
@@ -46,6 +72,17 @@ class TestLibusbDescriptors < Test::Unit::TestCase
46
72
  assert config_desc.settings.include?(if_desc), "ConfigDescriptor#settings should include this one"
47
73
  assert interface.alt_settings.include?(if_desc), "Inteerface#alt_settings should include this one"
48
74
 
75
+ assert_kind_of Integer, if_desc.bLength
76
+ assert_equal 4, if_desc.bDescriptorType
77
+ assert_kind_of Integer, if_desc.bInterfaceNumber
78
+ assert_kind_of Integer, if_desc.bAlternateSetting
79
+ assert_equal if_desc.endpoints.length, if_desc.bNumEndpoints
80
+ assert_kind_of Integer, if_desc.bInterfaceClass
81
+ assert_kind_of Integer, if_desc.bInterfaceSubClass
82
+ assert_kind_of Integer, if_desc.bInterfaceProtocol
83
+ assert_kind_of Integer, if_desc.iInterface
84
+ assert_kind_of String, if_desc.extra if if_desc.extra
85
+
49
86
  if_desc.endpoints.each do |ep|
50
87
  assert_match(/Endpoint/, ep.inspect, "EndpointDescriptor#inspect should work")
51
88
 
@@ -59,7 +96,15 @@ class TestLibusbDescriptors < Test::Unit::TestCase
59
96
  assert_equal config_desc, ep.configuration, "backref should be correct"
60
97
  assert_equal dev, ep.device, "backref should be correct"
61
98
 
99
+ assert_kind_of Integer, ep.bLength
100
+ assert_equal 5, ep.bDescriptorType
101
+ assert_kind_of Integer, ep.bEndpointAddress
102
+ assert_kind_of Integer, ep.bmAttributes
62
103
  assert_operator 0, :<, ep.wMaxPacketSize, "packet size should be > 0"
104
+ assert_kind_of Integer, ep.bInterval
105
+ assert_kind_of Integer, ep.bRefresh
106
+ assert_kind_of Integer, ep.bSynchAddress
107
+ assert_kind_of String, ep.extra if ep.extra
63
108
  end
64
109
  end
65
110
  end
@@ -0,0 +1,50 @@
1
+ # This test requires a connected, but not mounted mass storage device with
2
+ # read/write access allowed. Based on the following specifications:
3
+ # http://www.usb.org/developers/devclass_docs/usbmassbulk_10.pdf
4
+ # http://en.wikipedia.org/wiki/SCSI_command
5
+ #
6
+
7
+ require "test/unit"
8
+ require "libusb"
9
+
10
+ class TestLibusbKeyboard < Test::Unit::TestCase
11
+ include LIBUSB
12
+
13
+ attr_accessor :usb
14
+ attr_accessor :device
15
+ attr_accessor :dev
16
+ attr_accessor :endpoint_in
17
+ attr_accessor :endpoint_out
18
+
19
+ def setup
20
+ @usb = Context.new
21
+ @usb.debug = 3
22
+
23
+ @device = usb.devices( :bDeviceClass=>CLASS_HID, :bDeviceProtocol=>1 ).first
24
+ abort "no keyboard device found" unless @device
25
+
26
+ @endpoint_in = @device.endpoints.find{|ep| ep.bEndpointAddress&ENDPOINT_IN != 0 }.bEndpointAddress
27
+ @endpoint_out = @device.endpoints.find{|ep| ep.bEndpointAddress&ENDPOINT_IN == 0 }.bEndpointAddress
28
+
29
+ @dev = @device.open
30
+
31
+ if RUBY_PLATFORM=~/linux/i && dev.kernel_driver_active?(0)
32
+ dev.detach_kernel_driver(0)
33
+ end
34
+ dev.claim_interface(0)
35
+
36
+ # clear any pending data
37
+ dev.clear_halt(endpoint_in)
38
+ end
39
+
40
+ def teardown
41
+ dev.release_interface(0) if dev
42
+ dev.close if dev
43
+ end
44
+
45
+ def test_read
46
+ data_length = 8
47
+ recv = dev.interrupt_transfer(:endpoint=>endpoint_in, :dataIn=>data_length)
48
+ p recv
49
+ end
50
+ end
metadata CHANGED
@@ -1,80 +1,60 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: libusb
3
- version: !ruby/object:Gem::Version
4
- hash: 31
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.3
5
5
  prerelease:
6
- segments:
7
- - 0
8
- - 1
9
- - 2
10
- version: 0.1.2
11
6
  platform: x86-mingw32
12
- authors:
7
+ authors:
13
8
  - Lars Kanis
14
9
  autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
-
18
- date: 2012-03-14 00:00:00 Z
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
12
+ date: 2012-03-15 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
21
15
  name: ffi
22
- prerelease: false
23
- requirement: &id001 !ruby/object:Gem::Requirement
16
+ requirement: &11949220 !ruby/object:Gem::Requirement
24
17
  none: false
25
- requirements:
26
- - - ">="
27
- - !ruby/object:Gem::Version
28
- hash: 15
29
- segments:
30
- - 1
31
- - 0
32
- version: "1.0"
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '1.0'
33
22
  type: :runtime
34
- version_requirements: *id001
35
- - !ruby/object:Gem::Dependency
36
- name: rake-compiler
37
23
  prerelease: false
38
- requirement: &id002 !ruby/object:Gem::Requirement
24
+ version_requirements: *11949220
25
+ - !ruby/object:Gem::Dependency
26
+ name: rake-compiler
27
+ requirement: &11947620 !ruby/object:Gem::Requirement
39
28
  none: false
40
- requirements:
41
- - - ">="
42
- - !ruby/object:Gem::Version
43
- hash: 7
44
- segments:
45
- - 0
46
- - 6
47
- version: "0.6"
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0.6'
48
33
  type: :development
49
- version_requirements: *id002
50
- - !ruby/object:Gem::Dependency
51
- name: hoe
52
34
  prerelease: false
53
- requirement: &id003 !ruby/object:Gem::Requirement
35
+ version_requirements: *11947620
36
+ - !ruby/object:Gem::Dependency
37
+ name: hoe
38
+ requirement: &11945960 !ruby/object:Gem::Requirement
54
39
  none: false
55
- requirements:
56
- - - ">="
57
- - !ruby/object:Gem::Version
58
- hash: 47
59
- segments:
60
- - 2
61
- - 8
62
- - 0
63
- version: 2.8.0
40
+ requirements:
41
+ - - ~>
42
+ - !ruby/object:Gem::Version
43
+ version: '2.12'
64
44
  type: :development
65
- version_requirements: *id003
66
- description: LIBUSB is a Ruby binding that gives Ruby programmers access to all functionality of libusb, version 1.0
67
- email:
45
+ prerelease: false
46
+ version_requirements: *11945960
47
+ description: LIBUSB is a Ruby binding that gives Ruby programmers access to all functionality
48
+ of libusb, version 1.0
49
+ email:
68
50
  - kanis@comcard.de
69
51
  executables: []
70
-
71
52
  extensions: []
72
-
73
- extra_rdoc_files:
53
+ extra_rdoc_files:
74
54
  - History.txt
75
55
  - Manifest.txt
76
56
  - README.rdoc
77
- files:
57
+ files:
78
58
  - .autotest
79
59
  - .gemtest
80
60
  - COPYING
@@ -91,47 +71,41 @@ files:
91
71
  - test/test_libusb_iso_transfer.rb
92
72
  - test/test_libusb_mass_storage.rb
93
73
  - test/test_libusb_mass_storage2.rb
74
+ - test/test_libusb_keyboard.rb
94
75
  - lib/libusb-1.0.dll
95
76
  homepage: http://github.com/larskanis/libusb
96
77
  licenses: []
97
-
98
78
  post_install_message:
99
- rdoc_options:
79
+ rdoc_options:
100
80
  - --main
101
81
  - README.rdoc
102
82
  - --charset=UTF-8
103
- require_paths:
83
+ require_paths:
104
84
  - lib
105
- required_ruby_version: !ruby/object:Gem::Requirement
85
+ required_ruby_version: !ruby/object:Gem::Requirement
106
86
  none: false
107
- requirements:
108
- - - ">="
109
- - !ruby/object:Gem::Version
110
- hash: 3
111
- segments:
112
- - 0
113
- version: "0"
114
- required_rubygems_version: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - ! '>='
89
+ - !ruby/object:Gem::Version
90
+ version: '0'
91
+ required_rubygems_version: !ruby/object:Gem::Requirement
115
92
  none: false
116
- requirements:
117
- - - ">="
118
- - !ruby/object:Gem::Version
119
- hash: 3
120
- segments:
121
- - 0
122
- version: "0"
93
+ requirements:
94
+ - - ! '>='
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
123
97
  requirements: []
124
-
125
98
  rubyforge_project: libusb
126
- rubygems_version: 1.7.2
99
+ rubygems_version: 1.8.10
127
100
  signing_key:
128
101
  specification_version: 3
129
102
  summary: Access USB devices from Ruby via libusb-1.0
130
- test_files:
131
- - test/test_libusb_compat.rb
103
+ test_files:
104
+ - test/test_libusb_compat_mass_storage.rb
105
+ - test/test_libusb_gc.rb
132
106
  - test/test_libusb_iso_transfer.rb
133
- - test/test_libusb_mass_storage2.rb
134
107
  - test/test_libusb_descriptors.rb
108
+ - test/test_libusb_compat.rb
109
+ - test/test_libusb_keyboard.rb
110
+ - test/test_libusb_mass_storage2.rb
135
111
  - test/test_libusb_mass_storage.rb
136
- - test/test_libusb_compat_mass_storage.rb
137
- - test/test_libusb_gc.rb