libusb 0.2.2-x86-mingw32 → 0.3.0-x86-mingw32

Sign up to get free protection for your applications and to get access to all the features.
@@ -21,7 +21,12 @@ class TestLibusbIsoTransfer < Test::Unit::TestCase
21
21
 
22
22
  def setup
23
23
  c = Context.new
24
- @dev = c.devices.first.open
24
+ begin
25
+ @dev = c.devices.first.open
26
+ rescue LIBUSB::ERROR_ACCESS
27
+ @dev = nil
28
+ skip "error opening device"
29
+ end
25
30
  end
26
31
 
27
32
  def teardown
@@ -41,7 +41,7 @@ class TestLibusbMassStorage < Test::Unit::TestCase
41
41
  @asynchron = false
42
42
 
43
43
  @device = usb.devices( :bClass=>CLASS_MASS_STORAGE, :bSubClass=>[0x06,0x01], :bProtocol=>0x50 ).last
44
- abort "no mass storage device found" unless @device
44
+ skip "no mass storage device found" unless @device
45
45
 
46
46
  @endpoint_in = @device.endpoints.find{|ep| ep.bEndpointAddress&ENDPOINT_IN != 0 }
47
47
  @endpoint_out = @device.endpoints.find{|ep| ep.bEndpointAddress&ENDPOINT_IN == 0 }
@@ -215,9 +215,15 @@ class TestLibusbMassStorage < Test::Unit::TestCase
215
215
  sleep 0.01
216
216
  end
217
217
  end
218
- assert_raise(CSWError, LIBUSB::ERROR_TIMEOUT) do
219
- bulk_transfer(:endpoint=>endpoint_in, :dataIn=>123)
218
+ assert_raise(LIBUSB::ERROR_TIMEOUT) do
219
+ begin
220
+ bulk_transfer(:endpoint=>endpoint_in, :dataIn=>123)
221
+ rescue LIBUSB::ERROR_TIMEOUT => err
222
+ assert_kind_of String, err.transferred
223
+ raise
224
+ end
220
225
  end
226
+
221
227
  th.kill
222
228
  dev.clear_halt(endpoint_in)
223
229
  dev.clear_halt(endpoint_out)
@@ -28,7 +28,7 @@ class TestLibusbMassStorage2 < Test::Unit::TestCase
28
28
  @usb = Context.new
29
29
  @usb.debug = 3
30
30
  @device = usb.devices( :bClass=>CLASS_MASS_STORAGE, :bSubClass=>[0x06,0x01], :bProtocol=>0x50 ).last
31
- abort "no mass storage device found" unless @device
31
+ skip "no mass storage device found" unless @device
32
32
 
33
33
  @interface = device.interfaces.first
34
34
 
@@ -0,0 +1,45 @@
1
+ # This file is part of Libusb for Ruby.
2
+ #
3
+ # Libusb for Ruby is free software: you can redistribute it and/or modify
4
+ # it under the terms of the GNU Lesser General Public License as published by
5
+ # the Free Software Foundation, either version 3 of the License, or
6
+ # (at your option) any later version.
7
+ #
8
+ # Libusb for Ruby is distributed in the hope that it will be useful,
9
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
10
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
+ # GNU Lesser General Public License for more details.
12
+ #
13
+ # You should have received a copy of the GNU Lesser General Public License
14
+ # along with Libusb for Ruby. If not, see <http://www.gnu.org/licenses/>.
15
+
16
+ require "test/unit"
17
+ require "libusb"
18
+
19
+ class TestLibusbStructs < Test::Unit::TestCase
20
+ def test_struct_Timeval
21
+ s = LIBUSB::Call::Timeval.new
22
+ assert_equal 0, s.in_ms
23
+ s.in_ms = 12345678
24
+ assert_equal 12345, s[:tv_sec]
25
+ assert_equal 678000, s[:tv_usec]
26
+ assert_equal 12345678, s.in_ms
27
+
28
+ s.in_s = 1234.5678
29
+ assert_equal 1234, s[:tv_sec]
30
+ assert_equal 567800, s[:tv_usec]
31
+ assert_equal 1234.5678, s.in_s
32
+ end
33
+
34
+ def test_struct_CompletionFlag
35
+ s = LIBUSB::Context::CompletionFlag.new
36
+ assert_equal 0, s[:completed]
37
+ assert_equal false, s.completed?
38
+ s.completed = true
39
+ assert_equal 1, s[:completed]
40
+ assert_equal true, s.completed?
41
+ s.completed = false
42
+ assert_equal false, s.completed?
43
+ assert_equal 0, s[:completed]
44
+ end
45
+ end
@@ -0,0 +1,89 @@
1
+ # This file is part of Libusb for Ruby.
2
+ #
3
+ # Libusb for Ruby is free software: you can redistribute it and/or modify
4
+ # it under the terms of the GNU Lesser General Public License as published by
5
+ # the Free Software Foundation, either version 3 of the License, or
6
+ # (at your option) any later version.
7
+ #
8
+ # Libusb for Ruby is distributed in the hope that it will be useful,
9
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
10
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
+ # GNU Lesser General Public License for more details.
12
+ #
13
+ # You should have received a copy of the GNU Lesser General Public License
14
+ # along with Libusb for Ruby. If not, see <http://www.gnu.org/licenses/>.
15
+ #
16
+ # This test requires two connected, but not mounted mass storage device with
17
+ # read/write access allowed.
18
+
19
+ require "test/unit"
20
+ require "libusb"
21
+
22
+ class TestLibusbThreads < Test::Unit::TestCase
23
+ include LIBUSB
24
+
25
+ BOMS_GET_MAX_LUN = 0xFE
26
+
27
+ attr_accessor :usb
28
+ attr_accessor :devices
29
+ attr_accessor :devs
30
+ attr_accessor :endpoints_in
31
+ attr_accessor :endpoints_out
32
+
33
+ def setup
34
+ @usb = Context.new
35
+ @usb.debug = 3
36
+
37
+ @devices = usb.devices( :bClass=>CLASS_MASS_STORAGE, :bSubClass=>[0x06,0x01], :bProtocol=>0x50 )
38
+ skip "less than two mass storage devices found" unless @devices.length >= 2
39
+
40
+ @devs = @devices.map do |device|
41
+ dev = device.open
42
+ if RUBY_PLATFORM=~/linux/i && dev.kernel_driver_active?(0)
43
+ dev.detach_kernel_driver(0)
44
+ end
45
+ dev.claim_interface(0)
46
+ dev
47
+ end
48
+
49
+ @endpoints_in = {}
50
+ @endpoints_out = {}
51
+
52
+ @devs.each do |dev|
53
+ @endpoints_in[dev] = dev.device.endpoints.find{|ep| ep.bEndpointAddress&ENDPOINT_IN != 0 }
54
+ @endpoints_out[dev] = dev.device.endpoints.find{|ep| ep.bEndpointAddress&ENDPOINT_IN == 0 }
55
+ end
56
+
57
+ Thread.abort_on_exception = true
58
+ end
59
+
60
+ def teardown
61
+ if devs
62
+ devs.each do |dev|
63
+ dev.release_interface(0)
64
+ dev.close
65
+ end
66
+ end
67
+ end
68
+
69
+ def thread_worker(dev)
70
+ endpoint = endpoints_in[dev]
71
+ 1.times do
72
+ st = Time.now
73
+ assert_raise LIBUSB::ERROR_TIMEOUT do
74
+ dev.bulk_transfer(:endpoint=>endpoint, :dataIn=>123, :timeout=>100)
75
+ end
76
+ assert_operator Time.now-st, :<, 5
77
+ dev.clear_halt(endpoint)
78
+ end
79
+ end
80
+
81
+ def test_sync_api
82
+ threads = devs.map do |dev|
83
+ Thread.new do
84
+ thread_worker(dev)
85
+ end
86
+ end
87
+ threads.map(&:join)
88
+ end
89
+ end
@@ -33,4 +33,8 @@ class TestLibusbVersion < Test::Unit::TestCase
33
33
  assert_match(/^\d+\.\d+\.\d+/, @v.to_s)
34
34
  assert_match(/^#<LIBUSB::Version \d+\.\d+\.\d+/, @v.inspect)
35
35
  end
36
+
37
+ def test_gem_version_string
38
+ assert_match(/^\d+\.\d+\.\d+/, LIBUSB::VERSION)
39
+ end
36
40
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: libusb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.3.0
5
5
  prerelease:
6
6
  platform: x86-mingw32
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-10-19 00:00:00.000000000 Z
12
+ date: 2013-01-21 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: ffi
16
- requirement: &20360580 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,21 +21,15 @@ dependencies:
21
21
  version: '1.0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *20360580
25
- - !ruby/object:Gem::Dependency
26
- name: rdoc
27
- requirement: &20359940 !ruby/object:Gem::Requirement
24
+ version_requirements: !ruby/object:Gem::Requirement
28
25
  none: false
29
26
  requirements:
30
- - - ~>
27
+ - - ! '>='
31
28
  - !ruby/object:Gem::Version
32
- version: '3.10'
33
- type: :development
34
- prerelease: false
35
- version_requirements: *20359940
29
+ version: '1.0'
36
30
  - !ruby/object:Gem::Dependency
37
31
  name: rake-compiler
38
- requirement: &20359420 !ruby/object:Gem::Requirement
32
+ requirement: !ruby/object:Gem::Requirement
39
33
  none: false
40
34
  requirements:
41
35
  - - ! '>='
@@ -43,35 +37,46 @@ dependencies:
43
37
  version: '0.6'
44
38
  type: :development
45
39
  prerelease: false
46
- version_requirements: *20359420
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0.6'
47
46
  - !ruby/object:Gem::Dependency
48
- name: hoe
49
- requirement: &20358840 !ruby/object:Gem::Requirement
47
+ name: bundler
48
+ requirement: !ruby/object:Gem::Requirement
50
49
  none: false
51
50
  requirements:
52
- - - ~>
51
+ - - ! '>='
53
52
  - !ruby/object:Gem::Version
54
- version: '3.0'
53
+ version: '0'
55
54
  type: :development
56
55
  prerelease: false
57
- version_requirements: *20358840
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
58
62
  description: LIBUSB is a Ruby binding that gives Ruby programmers access to arbitrary
59
63
  USB devices
60
64
  email:
61
- - kanis@comcard.de
65
+ - lars@greiz-reinsdorf.de
62
66
  executables: []
63
- extensions: []
64
- extra_rdoc_files:
65
- - README.rdoc
67
+ extensions:
68
+ - ext/extconf.rb
69
+ extra_rdoc_files: []
66
70
  files:
67
- - .autotest
68
- - .gemtest
71
+ - .gitignore
72
+ - .travis.yml
69
73
  - .yardopts
70
74
  - COPYING
71
- - History.txt
72
- - Manifest.txt
73
- - README.rdoc
75
+ - Gemfile
76
+ - History.md
77
+ - README.md
74
78
  - Rakefile
79
+ - ext/extconf.rb
75
80
  - lib/libusb.rb
76
81
  - lib/libusb/call.rb
77
82
  - lib/libusb/compat.rb
@@ -81,27 +86,32 @@ files:
81
86
  - lib/libusb/dev_handle.rb
82
87
  - lib/libusb/device.rb
83
88
  - lib/libusb/endpoint.rb
89
+ - lib/libusb/eventmachine.rb
84
90
  - lib/libusb/interface.rb
85
91
  - lib/libusb/setting.rb
86
92
  - lib/libusb/transfer.rb
87
- - lib/libusb/version.rb
93
+ - lib/libusb/version_gem.rb
94
+ - lib/libusb/version_struct.rb
95
+ - libusb.gemspec
88
96
  - test/test_libusb_capability.rb
89
97
  - test/test_libusb_compat.rb
90
98
  - test/test_libusb_compat_mass_storage.rb
91
99
  - test/test_libusb_descriptors.rb
100
+ - test/test_libusb_event_machine.rb
92
101
  - test/test_libusb_gc.rb
93
102
  - test/test_libusb_iso_transfer.rb
94
103
  - test/test_libusb_mass_storage.rb
95
104
  - test/test_libusb_mass_storage2.rb
105
+ - test/test_libusb_structs.rb
106
+ - test/test_libusb_threads.rb
96
107
  - test/test_libusb_version.rb
97
- - test/test_libusb_keyboard.rb
98
108
  - lib/libusb-1.0.dll
99
- homepage:
109
+ homepage: http://github.com/larskanis/libusb
100
110
  licenses: []
101
111
  post_install_message:
102
112
  rdoc_options:
103
113
  - --main
104
- - README.rdoc
114
+ - README.md
105
115
  - --charset=UTF-8
106
116
  require_paths:
107
117
  - lib
@@ -119,18 +129,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
119
129
  version: '0'
120
130
  requirements: []
121
131
  rubyforge_project: libusb
122
- rubygems_version: 1.8.10
132
+ rubygems_version: 1.8.24
123
133
  signing_key:
124
134
  specification_version: 3
125
135
  summary: Access USB devices from Ruby via libusb-1.0
126
- test_files:
127
- - test/test_libusb_keyboard.rb
128
- - test/test_libusb_gc.rb
129
- - test/test_libusb_mass_storage2.rb
130
- - test/test_libusb_capability.rb
131
- - test/test_libusb_iso_transfer.rb
132
- - test/test_libusb_mass_storage.rb
133
- - test/test_libusb_compat.rb
134
- - test/test_libusb_compat_mass_storage.rb
135
- - test/test_libusb_version.rb
136
- - test/test_libusb_descriptors.rb
136
+ test_files: []
data/.autotest DELETED
@@ -1,23 +0,0 @@
1
- # -*- ruby -*-
2
-
3
- require 'autotest/restart'
4
-
5
- # Autotest.add_hook :initialize do |at|
6
- # at.extra_files << "../some/external/dependency.rb"
7
- #
8
- # at.libs << ":../some/external"
9
- #
10
- # at.add_exception 'vendor'
11
- #
12
- # at.add_mapping(/dependency.rb/) do |f, _|
13
- # at.files_matching(/test_.*rb$/)
14
- # end
15
- #
16
- # %w(TestA TestB).each do |klass|
17
- # at.extra_class_map[klass] = "test/test_misc.rb"
18
- # end
19
- # end
20
-
21
- # Autotest.add_hook :run_command do |at|
22
- # system "rake build"
23
- # end
data/.gemtest DELETED
File without changes
@@ -1,3 +0,0 @@
1
- # List of files is auto generated by 'git ls-files',
2
- # but let Hoe find the VERSION string:
3
- lib/libusb.rb
@@ -1,115 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
-
3
- = Access USB devices from Ruby via libusb-1.0.
4
-
5
- * http://github.com/larskanis/libusb
6
-
7
- == DESCRIPTION:
8
-
9
- LIBUSB is a Ruby binding that gives Ruby programmers access to arbitrary USB devices.
10
-
11
- * libusb[http://libusbx.org] is a library that gives full access to devices connected via the USB bus. No special kernel driver is thus necessary for accessing USB devices.
12
- * This Ruby binding supports the API version 1.0 of libusb[http://libusbx.org]. Note that the old "legacy" version 0.1.x of libusb uses a completely different API that is covered by the ruby extension ruby-usb[http://www.a-k-r.org/ruby-usb/] .
13
-
14
-
15
- LIBUSB for Ruby is covered by the GNU Lesser General Public License version 3.
16
-
17
- == FEATURES:
18
- * Access to descriptors of devices, configurations, interfaces, settings and endpoints
19
- * Synchronous and asynchronous communication for bulk, control, interrupt and isochronous transfers
20
- * Compatibility layer for ruby-usb[http://www.a-k-r.org/ruby-usb/] (API based on libusb-0.1). See {::USB} for description.
21
-
22
- == SYNOPSIS:
23
-
24
- require "libusb"
25
-
26
- usb = LIBUSB::Context.new
27
- device = usb.devices(:idVendor => 0x04b4, :idProduct => 0x8613).first
28
- device.open_interface(0) do |handle|
29
- handle.control_transfer(:bmRequestType => 0x40, :bRequest => 0xa0, :wValue => 0xe600, :wIndex => 0x0000, :dataOut => 1.chr)
30
- end
31
- {LIBUSB::Context#devices} is used to get all or only particular devices.
32
- After {LIBUSB::Device#open_interface opening and claiming} the {LIBUSB::Device} the resulting {LIBUSB::DevHandle} can be
33
- used to communicate with the connected USB device
34
- by {LIBUSB::DevHandle#control_transfer}, {LIBUSB::DevHandle#bulk_transfer},
35
- {LIBUSB::DevHandle#interrupt_transfer} or by using the {LIBUSB::Transfer} classes.
36
-
37
- A {LIBUSB::Device} can also be used to retrieve information about it,
38
- by using the device descriptor attributes.
39
- A {LIBUSB::Device} could have several configurations. You can then decide of which
40
- configuration to enable. You can only enable one configuration at a time.
41
-
42
- Each {LIBUSB::Configuration} has one or more interfaces. These can be seen as functional group
43
- performing a single feature of the device.
44
-
45
- Each {LIBUSB::Interface} has at least one {LIBUSB::Setting}. The first setting is always default.
46
- An alternate setting can be used independent on each interface.
47
-
48
- Each {LIBUSB::Setting} specifies it's own set of communication endpoints.
49
- Each {LIBUSB::Endpoint} specifies the type of transfer, direction, polling interval and
50
- maximum packet size.
51
-
52
-
53
- == REQUIREMENTS:
54
-
55
- * Linux, MacOSX or Windows system with Ruby MRI 1.8.7/1.9.x or JRuby
56
-
57
- == INSTALL:
58
-
59
- gem install libusb
60
-
61
- In order to use LIBUSB, you also need the libusb-1.0[http://libusbx.org] library (but not necessarily its header files).
62
- * Debian or Ubuntu:
63
- sudo apt-get install libusb-1.0-0-dev
64
- * OS-X: install with homebrew:
65
- brew install libusb
66
- or macports:
67
- port install libusb
68
- * Windows: libusb.gem comes with a precompiled +libusb.dll+, but you need to install a device driver (see below)
69
-
70
- Latest code can be used in this way:
71
-
72
- git clone git://github.com/larskanis/libusb.git
73
- rake install_gem
74
-
75
-
76
- == Usage on Windows
77
-
78
- In contrast to Linux, any access to an USB device by LIBUSB on Windows requires a proper driver
79
- installed in the system. Fortunately creating such a driver is quite easy with
80
- Zadig[http://sourceforge.net/projects/libwdi/files/zadig/]. Select the interesting USB device,
81
- choose WinUSB driver and press "Install Driver". That's it. You may take the generated output directory
82
- with it's INI-file and use it for driver installation on other 32 or 64 bit Windows
83
- systems.
84
-
85
-
86
- == Cross compiling for Windows
87
-
88
- Libusb-gem can be build on a linux or darwin host for the win32 platform,
89
- using the mingw cross compiler collection. Libusb is downloaded from source
90
- git repo, cross compiled and included in the generated libusb.gem.
91
-
92
- Install mingw32. On a debian based system this should work:
93
-
94
- apt-get install mingw32
95
-
96
- On MacOS X, if you have MacPorts installed:
97
-
98
- port install i386-mingw32-gcc
99
-
100
- Download and cross compile libusb for win32:
101
-
102
- rake cross gem
103
-
104
- If everything works, there should be libusb-VERSION-x86-mingw32.gem in the pkg
105
- directory.
106
-
107
- == Resources
108
-
109
- * API documentation of Libusb for Ruby: http://rubydoc.info/gems/libusb/frames
110
- * Mailinglist: http://rubyforge.org/mailman/listinfo/libusb-hackers
111
- * Overall introduction to USB: http://www.usbmadesimple.co.uk
112
-
113
- == Todo
114
-
115
- * add proper handling for polling and timing: http://libusb.sourceforge.net/api-1.0/group__poll.html