libusb 0.6.3 → 0.6.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 6ebc972537614783fdc012824abb12ca1f3f6be8
4
- data.tar.gz: 70c26bd9f94e05484c4371045c87c910b24df7dd
2
+ SHA256:
3
+ metadata.gz: 1d40d1cf55c220e3db032cf0d01264b370865fb840186ae518aeaf701dfd8434
4
+ data.tar.gz: d4ad70aa5044bf2a733da31b31a6d500e6faa614158095ab53dfee904cb7823a
5
5
  SHA512:
6
- metadata.gz: a18f891801d3358b04da7624b234221433839d7390e30eeaebe4089906e39edf52f7820184f6f3d74c69e4a258b2acb8ee68ef45fb5e315449480c9b0bed021c
7
- data.tar.gz: '007083ca903a19d73823487b946a1124e4f3336b64e95250072b0d745f305ea7cd175c993933254b7ae4e05d4c721ccfb85c094b05a48a41151f1afd88bb298f'
6
+ metadata.gz: 41ebadc85b22529aa2170cfd3daf282a68897148786cf9717483d7fc1e3fab663fef4f328c9c8163273558d517d34bca534f70a4874aa4564005da0a17a9a83c
7
+ data.tar.gz: dc0b95995415319ea711668a550e575638b180bd99ebedc796d4316022dd38a70b55ca04f2e4e7ec20531148bff0761b2278bf87fcafdfb73fb2bb9232614c4e
@@ -3,17 +3,19 @@ sudo: false
3
3
  dist: trusty
4
4
  matrix:
5
5
  include:
6
- - rvm: 2.4.1
6
+ - rvm: ruby-head
7
+ env:
8
+ - RUBYOPT="--enable-frozen-string-literal --debug=frozen-string-literal"
9
+ - rvm: 2.4.3
7
10
  env:
8
11
  - RUBYOPT="--enable-frozen-string-literal --debug=frozen-string-literal"
9
- - rvm: 1.9.3
10
12
  - rvm: 2.0
11
13
  - rvm: 2.1
12
14
  - rvm: 2.2.5
13
15
  - rvm: 2.3.1
14
- - rvm: jruby-1.7
15
16
  - rvm: jruby-9.1.5.0
16
17
  - rvm: rbx-3
17
18
  allow_failures:
18
19
  - rvm: rbx-3
20
+ - rvm: ruby-head
19
21
  script: bundle exec rake travis
data/Gemfile CHANGED
@@ -9,3 +9,8 @@ group :test do
9
9
  end
10
10
 
11
11
  gem 'rake-compiler-dock', '~> 0.6.0'
12
+
13
+ # For some reason this is required in addition to the gemspec
14
+ # when 'bundle config force_ruby_platform true' is active:
15
+ gem 'ffi'
16
+ gem 'mini_portile2'
data/History.md CHANGED
@@ -1,3 +1,22 @@
1
+ 0.6.4 / 2018-05-05
2
+ ------------------
3
+
4
+ Added:
5
+ * New function Context#set_option.
6
+ It is also available when running libusb < 1.0.22 and calls libusb_set_debug() in this case.
7
+ * Add definition for SUPER_SPEED_PLUS.
8
+ * Linux: Use system libusb even when only library but no dev package is installed.
9
+ * Add Transfer#dev_handle and #timeout
10
+ * Use system libusb even when no development package is installed.
11
+ Means "libusb-1.0-0" is enough, no need for "libusb-dev" on Ubuntu.
12
+
13
+ Changed:
14
+ * Update libusb to 1.0.22
15
+
16
+ Deprecated:
17
+ * Deprecate Context#debug= analogous to libusb_set_debug in libusb-1.0.22.
18
+
19
+
1
20
  0.6.3 / 2017-08-20
2
21
  ------------------
3
22
  * Fix compat with FreeBSD. #24
data/README.md CHANGED
@@ -65,7 +65,7 @@ Prerequisites
65
65
  * Debian or Ubuntu:
66
66
 
67
67
  ```
68
- $ sudo apt-get install libusb-1.0-0-dev
68
+ $ sudo apt-get install libusb-1.0-0
69
69
  ```
70
70
  * MacOS: install with homebrew:
71
71
 
data/Rakefile CHANGED
@@ -21,7 +21,7 @@ task :test=>:compile do
21
21
  sh "ruby -w -W2 -I. -Ilib -e \"#{Dir["test/test_*.rb"].map{|f| "require '#{f}';"}.join}\" -- -v"
22
22
  end
23
23
 
24
- travis_tests = %w[test_libusb_capability.rb test_libusb_structs.rb test_libusb_version.rb]
24
+ travis_tests = %w[test_libusb.rb test_libusb_structs.rb]
25
25
  task :travis=>:compile do
26
26
  sh "ruby -w -W2 -I. -Ilib -e \"#{travis_tests.map{|f| "require 'test/#{f}';"}.join}\" -- -v"
27
27
  end
@@ -2,6 +2,11 @@ init:
2
2
  - SET PATH=C:/Ruby%ruby_version%/bin;%PATH%
3
3
  - SET RAKEOPT=-rdevkit
4
4
  install:
5
+ - ps: |
6
+ if ($env:ruby_version -like "*head*") {
7
+ $(new-object net.webclient).DownloadFile("https://github.com/oneclick/rubyinstaller2/releases/download/rubyinstaller-head/rubyinstaller-$env:ruby_version.exe", "$pwd/ruby-setup.exe")
8
+ cmd /c ruby-setup.exe /verysilent /dir=C:/Ruby$env:ruby_version
9
+ }
5
10
  - ruby --version
6
11
  - gem --version
7
12
  - ps: |
@@ -10,6 +15,8 @@ install:
10
15
  $env:SSL_CERT_FILE = "$env:TMP/ca-bundle.crt"
11
16
  Write-Host "Using SSL CA list $env:SSL_CERT_FILE" -foreground Green
12
17
  }
18
+ - gem install bundler --conservative
19
+ - bundle config force_ruby_platform true
13
20
  - bundle install
14
21
  build_script:
15
22
  - bundle exec rake compile
@@ -17,21 +24,13 @@ test_script:
17
24
  - bundle exec rake travis
18
25
  environment:
19
26
  matrix:
20
- - ruby_version: "24-x64"
27
+ - ruby_version: "head-x64"
21
28
  - ruby_version: "200"
22
29
  BROKEN_SSL: true
23
- - ruby_version: "200-x64"
24
- BROKEN_SSL: true
25
- - ruby_version: "21"
26
- BROKEN_SSL: true
27
30
  - ruby_version: "21-x64"
28
31
  BROKEN_SSL: true
29
32
  - ruby_version: "22"
30
33
  BROKEN_SSL: true
31
- - ruby_version: "22-x64"
32
- BROKEN_SSL: true
33
- - ruby_version: "23"
34
- BROKEN_SSL: true
35
34
  - ruby_version: "23-x64"
36
35
  BROKEN_SSL: true
37
36
  - ruby_version: "24"
@@ -53,7 +53,7 @@ def libusb_usable?
53
53
  prefix = FFI::Platform::LIBPREFIX.empty? ? 'lib' : FFI::Platform::LIBPREFIX
54
54
  bundled_dll = File.join(root_path, "lib/#{prefix}usb-1.0.#{ext}")
55
55
  bundled_dll_cygwin = File.join(root_path, "bin/#{prefix}usb-1.0.#{ext}")
56
- ffi_lib([bundled_dll, bundled_dll_cygwin, "#{prefix}usb-1.0", "#{prefix}usb"])
56
+ ffi_lib([bundled_dll, bundled_dll_cygwin, "#{prefix}usb-1.0.#{ext}.0", "#{prefix}usb-1.0", "#{prefix}usb"])
57
57
  end
58
58
  true
59
59
  rescue LoadError
@@ -28,7 +28,7 @@ module LIBUSB
28
28
  prefix = FFI::Platform::LIBPREFIX.empty? ? 'lib' : FFI::Platform::LIBPREFIX
29
29
  bundled_dll = File.join(root_path, "lib/#{prefix}usb-1.0.#{ext}")
30
30
  bundled_dll_cygwin = File.join(root_path, "bin/#{prefix}usb-1.0.#{ext}")
31
- ffi_lib([bundled_dll, bundled_dll_cygwin, "#{prefix}usb-1.0", "#{prefix}usb"])
31
+ ffi_lib([bundled_dll, bundled_dll_cygwin, "#{prefix}usb-1.0.#{ext}.0", "#{prefix}usb-1.0", "#{prefix}usb"])
32
32
 
33
33
  ClassCodes = enum :libusb_class_code, [
34
34
  :CLASS_PER_INTERFACE, 0,
@@ -164,12 +164,21 @@ module LIBUSB
164
164
  :ISO_SYNC_TYPE_SYNC, 3,
165
165
  ]
166
166
 
167
+ # Speed codes. Indicates the speed at which the device is operating.
167
168
  Speeds = enum :libusb_speed, [
169
+ # The OS doesn't report or know the device speed.
168
170
  :SPEED_UNKNOWN, 0,
171
+ # The device is operating at low speed (1.5MBit/s).
169
172
  :SPEED_LOW, 1,
173
+ # The device is operating at full speed (12MBit/s).
170
174
  :SPEED_FULL, 2,
175
+ # The device is operating at high speed (480MBit/s).
171
176
  :SPEED_HIGH, 3,
177
+ # The device is operating at super speed (5000MBit/s).
172
178
  :SPEED_SUPER, 4,
179
+ # The device is operating at super speed plus (10000MBit/s).
180
+ # Available since libusb-1.0.22
181
+ :SPEED_SUPER_PLUS, 5,
173
182
  ]
174
183
 
175
184
  # Supported speeds (wSpeedSupported) bitfield. Indicates what
@@ -250,6 +259,56 @@ module LIBUSB
250
259
  :HOTPLUG_ENUMERATE, 1,
251
260
  ]
252
261
 
262
+ # Log message levels.
263
+ #
264
+ # - :LOG_LEVEL_NONE (0) : no messages ever printed by the library (default)
265
+ # - :LOG_LEVEL_ERROR (1) : error messages are printed to stderr
266
+ # - :LOG_LEVEL_WARNING (2) : warning and error messages are printed to stderr
267
+ # - :LOG_LEVEL_INFO (3) : informational messages are printed to stderr
268
+ # - :LOG_LEVEL_DEBUG (4) : debug and informational messages are printed to stderr
269
+ LogLevels = enum :libusb_log_level, [
270
+ :LOG_LEVEL_NONE, 0,
271
+ :LOG_LEVEL_ERROR, 1,
272
+ :LOG_LEVEL_WARNING, 2,
273
+ :LOG_LEVEL_INFO, 3,
274
+ :LOG_LEVEL_DEBUG, 4,
275
+ ]
276
+
277
+ # Available option values for {Context#set_option}.
278
+ Options = enum :libusb_option, [
279
+ # Set the log message verbosity.
280
+ #
281
+ # The default level is :LOG_LEVEL_NONE, which means no messages are ever
282
+ # printed. If you choose to increase the message verbosity level, ensure
283
+ # that your application does not close the stderr file descriptor.
284
+ #
285
+ # You are advised to use level :LOG_LEVEL_WARNING. libusb is conservative
286
+ # with its message logging and most of the time, will only log messages that
287
+ # explain error conditions and other oddities. This will help you debug
288
+ # your software.
289
+ #
290
+ # If the +LIBUSB_DEBUG+ environment variable was set when libusb was
291
+ # initialized, this function does nothing: the message verbosity is fixed
292
+ # to the value in the environment variable.
293
+ #
294
+ # If libusb was compiled without any message logging, this function does
295
+ # nothing: you'll never get any messages.
296
+ #
297
+ # If libusb was compiled with verbose debug message logging, this function
298
+ # does nothing: you'll always get messages from all levels.
299
+ :OPTION_LOG_LEVEL,
300
+
301
+ # Use the UsbDk backend for a specific context, if available.
302
+ #
303
+ # This option should be set immediately after calling {Context.new}, otherwise
304
+ # unspecified behavior may occur.
305
+ #
306
+ # Only valid on Windows.
307
+ #
308
+ # Available since libusb-1.0.22.
309
+ :OPTION_USE_USBDK,
310
+ ]
311
+
253
312
  typedef :pointer, :libusb_context
254
313
  typedef :pointer, :libusb_device
255
314
  typedef :pointer, :libusb_device_handle
@@ -266,7 +325,8 @@ module LIBUSB
266
325
 
267
326
  attach_function 'libusb_init', [ :pointer ], :int
268
327
  attach_function 'libusb_exit', [ :pointer ], :void
269
- attach_function 'libusb_set_debug', [:pointer, :int], :void
328
+ attach_function 'libusb_set_debug', [:pointer, :libusb_log_level], :void
329
+ try_attach_function 'libusb_set_option', [:libusb_context, :libusb_option, :varargs], :int
270
330
  try_attach_function 'libusb_has_capability', [:libusb_capability], :int
271
331
 
272
332
  attach_function 'libusb_get_device_list', [:pointer, :pointer], :ssize_t
@@ -16,22 +16,28 @@
16
16
  require 'libusb/call'
17
17
 
18
18
  module LIBUSB
19
- Call::ClassCodes.to_h.each{|k,v| const_set(k,v) }
20
- Call::TransferTypes.to_h.each{|k,v| const_set(k,v) }
21
- Call::StandardRequests.to_h.each{|k,v| const_set(k,v) }
22
- Call::RequestTypes.to_h.each{|k,v| const_set(k,v) }
23
- Call::DescriptorTypes.to_h.each{|k,v| const_set(k,v) }
24
- Call::EndpointDirections.to_h.each{|k,v| const_set(k,v) }
25
- Call::RequestRecipients.to_h.each{|k,v| const_set(k,v) }
26
- Call::IsoSyncTypes.to_h.each{|k,v| const_set(k,v) }
27
- Call::Speeds.to_h.each{|k,v| const_set(k,v) }
28
- Call::Capabilities.to_h.each{|k,v| const_set(k,v) }
29
- Call::SupportedSpeeds.to_h.each{|k,v| const_set(k,v) }
30
- Call::Usb20ExtensionAttributes.to_h.each{|k,v| const_set(k,v) }
31
- Call::SsUsbDeviceCapabilityAttributes.to_h.each{|k,v| const_set(k,v) }
32
- Call::BosTypes.to_h.each{|k,v| const_set(k,v) }
33
- Call::HotplugEvents.to_h.each{|k,v| const_set(k,v) }
34
- Call::HotplugFlags.to_h.each{|k,v| const_set(k,v) }
19
+ [
20
+ Call::ClassCodes,
21
+ Call::TransferTypes,
22
+ Call::StandardRequests,
23
+ Call::RequestTypes,
24
+ Call::DescriptorTypes,
25
+ Call::EndpointDirections,
26
+ Call::RequestRecipients,
27
+ Call::IsoSyncTypes,
28
+ Call::Speeds,
29
+ Call::Capabilities,
30
+ Call::SupportedSpeeds,
31
+ Call::Usb20ExtensionAttributes,
32
+ Call::SsUsbDeviceCapabilityAttributes,
33
+ Call::BosTypes,
34
+ Call::HotplugEvents,
35
+ Call::HotplugFlags,
36
+ Call::LogLevels,
37
+ Call::Options,
38
+ ].each do |enum|
39
+ enum.to_h.each{|k,v| const_set(k,v) }
40
+ end
35
41
 
36
42
  # Base class of libusb errors
37
43
  class Error < RuntimeError
@@ -114,37 +114,46 @@ module LIBUSB
114
114
  Call.libusb_exit(@ctx)
115
115
  end
116
116
 
117
- # Set message verbosity.
118
- #
119
- # * Level 0: no messages ever printed by the library (default)
120
- # * Level 1: error messages are printed to stderr
121
- # * Level 2: warning and error messages are printed to stderr
122
- # * Level 3: informational messages are printed to stdout, warning and
123
- # error messages are printed to stderr
124
- #
125
- # The default level is 0, which means no messages are ever printed. If you
126
- # choose to increase the message verbosity level, ensure that your
127
- # application does not close the stdout/stderr file descriptors.
128
- #
129
- # You are advised to set level 3. libusb is conservative with its message
130
- # logging and most of the time, will only log messages that explain error
131
- # conditions and other oddities. This will help you debug your software.
132
- #
133
- # If the LIBUSB_DEBUG environment variable was set when libusb was
134
- # initialized, this method does nothing: the message verbosity is
135
- # fixed to the value in the environment variable.
136
- #
137
- # If libusb was compiled without any message logging, this method
138
- # does nothing: you'll never get any messages.
139
- #
140
- # If libusb was compiled with verbose debug message logging, this
141
- # method does nothing: you'll always get messages from all levels.
142
- #
143
- # @param [Fixnum] level debug level to set
117
+ # @deprecated Use {Context#set_option} instead using the +:OPTION_LOG_LEVEL+ option.
144
118
  def debug=(level)
145
119
  Call.libusb_set_debug(@ctx, level)
146
120
  end
147
121
 
122
+ def expect_option_args(exp, is)
123
+ raise ArgumentError, "wrong number of arguments (given #{is+1}, expected #{exp+1})" if is != exp
124
+ end
125
+ private :expect_option_args
126
+
127
+ # Set a libusb option from the {Call::Options option list}.
128
+ #
129
+ # @param [Symbol, Fixnum] option
130
+ # @param args Zero or more arguments depending on +option+
131
+ def set_option(option, *args)
132
+ if Call.respond_to?(:libusb_set_option)
133
+ # Available since libusb-1.0.22
134
+
135
+ ffi_args = case option
136
+ when :OPTION_LOG_LEVEL, LIBUSB::OPTION_LOG_LEVEL
137
+ expect_option_args(1, args.length)
138
+ [:libusb_log_level, args[0]]
139
+ when :OPTION_USE_USBDK, LIBUSB::OPTION_USE_USBDK
140
+ expect_option_args(0, args.length)
141
+ []
142
+ else
143
+ raise ArgumentError, "unknown option #{option.inspect}"
144
+ end
145
+
146
+ res = Call.libusb_set_option(@ctx, option, *ffi_args)
147
+ LIBUSB.raise_error res, "in libusb_set_option" if res<0
148
+
149
+ else
150
+ # Fallback to deprecated function, if the gem is linked to an older libusb.
151
+
152
+ raise ArgumentError, "unknown option #{option.inspect}" unless [:OPTION_LOG_LEVEL, LIBUSB::OPTION_LOG_LEVEL].include?(option)
153
+ Call.libusb_set_debug(@ctx, *args)
154
+ end
155
+ end
156
+
148
157
  def device_list
149
158
  pppDevs = FFI::MemoryPointer.new :pointer
150
159
  size = Call.libusb_get_device_list(@ctx, pppDevs)
@@ -1,7 +1,7 @@
1
1
  module LIBUSB
2
- LIBUSB_VERSION = ENV['LIBUSB_VERSION'] || '1.0.21'
2
+ LIBUSB_VERSION = ENV['LIBUSB_VERSION'] || '1.0.22'
3
3
  LIBUSB_SOURCE_URI = "https://github.com/libusb/libusb/releases/download/v#{LIBUSB_VERSION}/libusb-#{LIBUSB_VERSION}.tar.bz2"
4
- LIBUSB_SOURCE_SHA1 = '54d71841542eb1a6f0b0420878a4d5434efe8d28'
4
+ LIBUSB_SOURCE_SHA1 = '10116aa265aac4273a0c894faa089370262ec0dc'
5
5
 
6
6
  MINI_PORTILE_VERSION = '~> 2.1'
7
7
  end
@@ -43,10 +43,15 @@ module LIBUSB
43
43
  end
44
44
  end
45
45
 
46
+ class << self
47
+ private :new
48
+ end
49
+
46
50
  def initialize(args={})
47
51
  @buffer = nil
48
52
  @completion_flag = Context::CompletionFlag.new
49
53
  @allow_device_memory = false
54
+ @dev_handle = nil
50
55
  args.each{|k,v| send("#{k}=", v) }
51
56
  end
52
57
  private :initialize
@@ -57,13 +62,23 @@ module LIBUSB
57
62
  @transfer[:dev_handle] = @dev_handle.pHandle
58
63
  end
59
64
 
60
- # Timeout for this transfer in millseconds.
65
+ # The handle for the device to communicate with.
66
+ attr_reader :dev_handle
67
+
68
+ # Set timeout for this transfer in millseconds.
61
69
  #
62
70
  # A value of 0 indicates no timeout.
63
71
  def timeout=(value)
64
72
  @transfer[:timeout] = value
65
73
  end
66
74
 
75
+ # Get timeout for this transfer in millseconds.
76
+ #
77
+ # A value of 0 indicates no timeout.
78
+ def timeout
79
+ @transfer[:timeout]
80
+ end
81
+
67
82
  # Set the address of a valid endpoint to communicate with.
68
83
  def endpoint=(endpoint)
69
84
  endpoint = endpoint.bEndpointAddress if endpoint.respond_to? :bEndpointAddress
@@ -225,6 +240,8 @@ module LIBUSB
225
240
  #
226
241
  # Inspect {#status} to check for transfer errors.
227
242
  def submit_and_wait
243
+ raise ArgumentError, "#{self.class}#dev_handle not set" unless @dev_handle
244
+
228
245
  @completion_flag.completed = false
229
246
  submit! do |tr2|
230
247
  @completion_flag.completed = true
@@ -256,6 +273,10 @@ module LIBUSB
256
273
  end
257
274
 
258
275
  class BulkTransfer < Transfer
276
+ def self.new(*)
277
+ super
278
+ end
279
+
259
280
  def initialize(args={})
260
281
  @transfer = Call::Transfer.new Call.libusb_alloc_transfer(0)
261
282
  @transfer[:type] = TRANSFER_TYPE_BULK
@@ -272,6 +293,10 @@ module LIBUSB
272
293
  #
273
294
  # Available since libusb-1.0.19.
274
295
  class BulkStreamTransfer < Transfer
296
+ def self.new(*)
297
+ super
298
+ end
299
+
275
300
  def initialize(args={})
276
301
  @transfer = Call::Transfer.new Call.libusb_alloc_transfer(0)
277
302
  @transfer[:type] = TRANSFER_TYPE_BULK_STREAM
@@ -299,6 +324,10 @@ module LIBUSB
299
324
  end
300
325
 
301
326
  class ControlTransfer < Transfer
327
+ def self.new(*)
328
+ super
329
+ end
330
+
302
331
  def initialize(args={})
303
332
  @transfer = Call::Transfer.new Call.libusb_alloc_transfer(0)
304
333
  @transfer[:type] = TRANSFER_TYPE_CONTROL
@@ -308,6 +337,10 @@ module LIBUSB
308
337
  end
309
338
 
310
339
  class InterruptTransfer < Transfer
340
+ def self.new(*)
341
+ super
342
+ end
343
+
311
344
  def initialize(args={})
312
345
  @transfer = Call::Transfer.new Call.libusb_alloc_transfer(0)
313
346
  @transfer[:type] = TRANSFER_TYPE_INTERRUPT
@@ -339,6 +372,10 @@ module LIBUSB
339
372
  end
340
373
 
341
374
  class IsochronousTransfer < Transfer
375
+ def self.new(*)
376
+ super
377
+ end
378
+
342
379
  def initialize(num_packets, args={})
343
380
  @ptr = Call.libusb_alloc_transfer(num_packets)
344
381
  @transfer = Call::Transfer.new @ptr
@@ -15,5 +15,5 @@
15
15
 
16
16
  module LIBUSB
17
17
  # Library version of libusb for Ruby
18
- VERSION = "0.6.3"
18
+ VERSION = "0.6.4"
19
19
  end
@@ -20,6 +20,7 @@ Gem::Specification.new do |s|
20
20
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
21
21
  s.require_paths = ["lib"]
22
22
  s.extensions = ['ext/extconf.rb']
23
+ s.metadata["yard.run"] = "yri"
23
24
 
24
25
  s.required_ruby_version = Gem::Requirement.new(">= 1.9.3")
25
26
  s.add_runtime_dependency 'ffi', '~> 1.0'
@@ -27,4 +28,5 @@ Gem::Specification.new do |s|
27
28
  s.add_development_dependency 'rake-compiler', '~> 1.0'
28
29
  s.add_development_dependency 'rake-compiler-dock', '~> 0.2'
29
30
  s.add_development_dependency 'bundler', '~> 1.0'
31
+ s.add_development_dependency 'yard', '~> 0.6'
30
32
  end
@@ -16,22 +16,24 @@
16
16
  require "minitest/autorun"
17
17
  require "libusb"
18
18
 
19
- class TestLibusbVersion < Minitest::Test
20
- def setup
21
- @v = LIBUSB.version
19
+ class TestLibusb < Minitest::Test
20
+ def test_has_capability
21
+ assert LIBUSB.has_capability?(:CAP_HAS_CAPABILITY)
22
22
  end
23
23
 
24
24
  def test_version_parts
25
- assert_operator @v.major, :>=, 0
26
- assert_operator @v.minor, :>=, 0
27
- assert_operator @v.micro, :>=, 0
28
- assert_operator @v.nano, :>=, 0
29
- assert_kind_of String, @v.rc
25
+ v = LIBUSB.version
26
+ assert_operator v.major, :>=, 0
27
+ assert_operator v.minor, :>=, 0
28
+ assert_operator v.micro, :>=, 0
29
+ assert_operator v.nano, :>=, 0
30
+ assert_kind_of String, v.rc
30
31
  end
31
32
 
32
33
  def test_version_string
33
- assert_match(/^\d+\.\d+\.\d+/, @v.to_s)
34
- assert_match(/^#<LIBUSB::Version \d+\.\d+\.\d+/, @v.inspect)
34
+ v = LIBUSB.version
35
+ assert_match(/^\d+\.\d+\.\d+/, v.to_s)
36
+ assert_match(/^#<LIBUSB::Version \d+\.\d+\.\d+/, v.inspect)
35
37
  end
36
38
 
37
39
  def test_gem_version_string
@@ -16,8 +16,26 @@
16
16
  require "minitest/autorun"
17
17
  require "libusb"
18
18
 
19
- class TestLibusbCapability < Minitest::Test
20
- def test_version_parts
21
- assert LIBUSB.has_capability?(:CAP_HAS_CAPABILITY)
19
+ class TestLibusbContext < Minitest::Test
20
+ def setup
21
+ @c = LIBUSB::Context.new
22
+ end
23
+
24
+ def teardown
25
+ @c.exit if @c
26
+ end
27
+
28
+ def test_set_option
29
+ @c.set_option LIBUSB::OPTION_LOG_LEVEL, LIBUSB::LOG_LEVEL_NONE
30
+ @c.set_option LIBUSB::OPTION_LOG_LEVEL, LIBUSB::LOG_LEVEL_ERROR
31
+ @c.set_option LIBUSB::OPTION_LOG_LEVEL, LIBUSB::LOG_LEVEL_WARNING
32
+ @c.set_option LIBUSB::OPTION_LOG_LEVEL, LIBUSB::LOG_LEVEL_INFO
33
+ @c.set_option LIBUSB::OPTION_LOG_LEVEL, LIBUSB::LOG_LEVEL_DEBUG
34
+ @c.set_option :OPTION_LOG_LEVEL, :LOG_LEVEL_NONE
35
+ end
36
+
37
+ def test_set_debug
38
+ @c.debug = 4
39
+ @c.debug = 0
22
40
  end
23
41
  end
@@ -43,16 +43,45 @@ class TestLibusbStructs < Minitest::Test
43
43
  assert_equal 0, s[:completed]
44
44
  end
45
45
 
46
- def test_Transfer
46
+ def test_Transfer_buffer
47
47
  t = LIBUSB::InterruptTransfer.new allow_device_memory: true
48
48
  assert_equal :TRANSFER_COMPLETED, t.status
49
49
  assert_equal true, t.allow_device_memory
50
- assert_equal nil, t.memory_type
50
+ assert_nil t.memory_type
51
51
 
52
52
  t.alloc_buffer(10)
53
53
  assert_equal :user_space, t.memory_type, "no device assigned -> should use memory from user space"
54
54
 
55
55
  t.free_buffer
56
- assert_equal nil, t.memory_type
56
+ assert_nil t.memory_type
57
+ end
58
+
59
+ def test_Transfer_new
60
+ assert_raises(NoMethodError){ LIBUSB::Transfer.new }
61
+ LIBUSB::BulkStreamTransfer.new
62
+ LIBUSB::BulkTransfer.new
63
+ LIBUSB::ControlTransfer.new
64
+ LIBUSB::InterruptTransfer.new
65
+ LIBUSB::IsochronousTransfer.new(0)
66
+ end
67
+
68
+ def test_ControlTransfer_attributes
69
+ t = LIBUSB::ControlTransfer.new
70
+ t.timeout = 123
71
+ assert_equal 123, t.timeout
72
+ t.allow_device_memory = true
73
+ assert_equal true, t.allow_device_memory
74
+ assert_nil t.dev_handle
75
+ end
76
+
77
+ def test_ControlTransfer_new_args
78
+ t = LIBUSB::ControlTransfer.new allow_device_memory: false, timeout: 444
79
+ assert_equal false, t.allow_device_memory
80
+ assert_equal 444, t.timeout
81
+ end
82
+
83
+ def test_Transfer_no_dev_handle
84
+ t = LIBUSB::ControlTransfer.new
85
+ assert_raises(ArgumentError){ t.submit_and_wait }
57
86
  end
58
87
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: libusb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.3
4
+ version: 0.6.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lars Kanis
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-08-20 00:00:00.000000000 Z
11
+ date: 2018-05-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ffi
@@ -80,6 +80,20 @@ dependencies:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
82
  version: '1.0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: yard
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '0.6'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '0.6'
83
97
  description: LIBUSB is a Ruby binding that gives Ruby programmers access to arbitrary
84
98
  USB devices
85
99
  email:
@@ -121,12 +135,13 @@ files:
121
135
  - lib/libusb/version_gem.rb
122
136
  - lib/libusb/version_struct.rb
123
137
  - libusb.gemspec
124
- - ports/archives/libusb-1.0.21.tar.bz2
138
+ - ports/archives/libusb-1.0.22.tar.bz2
139
+ - test/test_libusb.rb
125
140
  - test/test_libusb_bos.rb
126
141
  - test/test_libusb_bulk_stream_transfer.rb
127
- - test/test_libusb_capability.rb
128
142
  - test/test_libusb_compat.rb
129
143
  - test/test_libusb_compat_mass_storage.rb
144
+ - test/test_libusb_context.rb
130
145
  - test/test_libusb_descriptors.rb
131
146
  - test/test_libusb_event_machine.rb
132
147
  - test/test_libusb_gc.rb
@@ -136,12 +151,12 @@ files:
136
151
  - test/test_libusb_mass_storage2.rb
137
152
  - test/test_libusb_structs.rb
138
153
  - test/test_libusb_threads.rb
139
- - test/test_libusb_version.rb
140
154
  - wireshark-usb-sniffer.png
141
155
  homepage: http://github.com/larskanis/libusb
142
156
  licenses:
143
157
  - LGPL-3.0
144
- metadata: {}
158
+ metadata:
159
+ yard.run: yri
145
160
  post_install_message:
146
161
  rdoc_options:
147
162
  - "--main"
@@ -161,7 +176,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
161
176
  version: '0'
162
177
  requirements: []
163
178
  rubyforge_project:
164
- rubygems_version: 2.6.12
179
+ rubygems_version: 2.7.3
165
180
  signing_key:
166
181
  specification_version: 4
167
182
  summary: Access USB devices from Ruby via libusb-1.0