revdev 0.1.1 → 0.1.2

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.
@@ -15,30 +15,33 @@ module Revdev
15
15
  class InputEvent; end
16
16
  class InputId; end
17
17
 
18
+ def Revdev.extract_prefix const_name
19
+ return nil if not const_name
20
+ m = const_name.to_s.match(/^(FF_STATUS|[A-Z]{2,4})_/)
21
+ m && m[1] && m[1].to_sym
22
+ end
23
+
24
+ def Revdev.extract_suffix const_name
25
+ return nil if not const_name
26
+ m = const_name.to_s.match(/^(?:FF_STATUS|[A-Z]{2,4})_(.+)$/)
27
+ m && m[1] && m[1].to_sym
28
+ end
29
+
18
30
  PREFIX_CONVERTER = {
19
- 'BTN' => 'KEY',
20
- 'MT' => nil, # TODO how to use MT prefix values
21
- 'ID' => nil, # TODO how to use ID prefix values
22
- 'BUS' => nil # TODO how to use BUS prefix values
31
+ :BTN => :KEY,
32
+ :MT => nil, # TODO how to use 'MT_' prefix values
33
+ :ID => nil, # TODO how to use 'ID_' prefix values
34
+ #:BUS => nil # TODO how to use 'BUS_' prefix values
23
35
  }
24
36
 
25
37
  REVERSE_MAPS = Hash.new
26
38
  constants.each do |const|
27
- m = const.to_s.match(/^(FF_STATUS|[A-Z]{2,4})_/)
28
- next if m.nil?
29
-
30
- prefix = m[1]
31
- if prefix == 'EV'
32
- REVERSE_MAPS[:EV] ||= Hash.new
33
- REVERSE_MAPS[:EV][const_get const] = const.to_sym
34
- next
35
- end
39
+ prefix = Revdev.extract_prefix const
36
40
  prefix = PREFIX_CONVERTER[prefix] if PREFIX_CONVERTER.has_key? prefix
37
41
  next if prefix.nil?
38
42
 
39
- ev = "EV_#{prefix}".to_sym
40
- REVERSE_MAPS[ev] ||= Hash.new
41
- REVERSE_MAPS[ev][const_get const] = const.to_sym
43
+ REVERSE_MAPS[prefix] ||= Hash.new
44
+ REVERSE_MAPS[prefix][const_get const] = const.to_sym
42
45
  end
43
46
 
44
47
  end
@@ -4,6 +4,8 @@ module Revdev
4
4
  class EventDevice
5
5
  attr_reader :file
6
6
 
7
+ ONE_CHAR_CODE = '1'[0]
8
+
7
9
  def initialize arg
8
10
  if arg.kind_of? File
9
11
  @file = arg
@@ -20,7 +22,11 @@ module Revdev
20
22
 
21
23
  def driver_version
22
24
  r = read_ioctl_with EVIOCGVERSION
23
- r.unpack('i').first
25
+ r.unpack('C3')
26
+ end
27
+
28
+ def device_id
29
+ InputId.new read_ioctl_with EVIOCGID
24
30
  end
25
31
 
26
32
  def read_ioctl_as_string_with command
@@ -49,15 +55,36 @@ module Revdev
49
55
  end
50
56
 
51
57
  def all_leds_status
52
- read_ioctl_as_string_with EVIOCGLED
58
+ r = read_ioctl_with EVIOCGLED
59
+ r = r.unpack("b#{LED_MAX}")[0]
60
+ m = {}
61
+ LED_MAX.times do |i|
62
+ break if REVERSE_MAPS[:LED][i].nil?
63
+ m[REVERSE_MAPS[:LED][i]] = (r[i] == ONE_CHAR_CODE)
64
+ end
65
+ m
53
66
  end
54
67
 
55
68
  def all_sounds_status
56
- read_ioctl_as_string_with EVIOCGSND
69
+ r = read_ioctl_with EVIOCGSND
70
+ r = r.unpack("b#{LED_MAX}")[0]
71
+ m = {}
72
+ SND_MAX.times do |i|
73
+ break if REVERSE_MAPS[:SND][i].nil?
74
+ m[REVERSE_MAPS[:SND][i]] = (r[i] == ONE_CHAR_CODE)
75
+ end
76
+ m
57
77
  end
58
78
 
59
79
  def all_switch_status
60
- read_ioctl_as_string_with EVIOCGSW
80
+ r = read_ioctl_with EVIOCGSW
81
+ r = r.unpack("b#{LED_MAX}")[0]
82
+ m = {}
83
+ SW_MAX.times do |i|
84
+ break if REVERSE_MAPS[:SW][i].nil?
85
+ m[REVERSE_MAPS[:SW][i]] = (r[i] == ONE_CHAR_CODE)
86
+ end
87
+ m
61
88
  end
62
89
 
63
90
  # grab all input events of the event device
@@ -33,8 +33,9 @@ module Revdev
33
33
  # human readable @code of input event
34
34
  def hr_code
35
35
  ht = hr_type
36
- return nil if ht.nil?
37
- map = REVERSE_MAPS[ht]
36
+ suffix = Revdev.extract_suffix ht
37
+ return nil if suffix.nil?
38
+ map = REVERSE_MAPS[suffix]
38
39
  map && map[@code]
39
40
  end
40
41
 
@@ -24,6 +24,21 @@ module Revdev
24
24
  end
25
25
  end
26
26
 
27
+ def hr_bustype
28
+ REVERSE_MAPS[:BUS][@bustype]
29
+ end
30
+
31
+ def hr_version
32
+ v = @version
33
+ v_arr = []
34
+ v_arr << (v & 0xff)
35
+ 2.times do
36
+ v = (v >> 8)
37
+ v_arr << (v & 0xff)
38
+ end
39
+ v_arr.reverse.join '.'
40
+ end
41
+
27
42
  end
28
43
 
29
44
  end
@@ -1,3 +1,3 @@
1
1
  module Revdev
2
- VERSION = "0.1.1"
2
+ VERSION = "0.1.2"
3
3
  end
@@ -0,0 +1,47 @@
1
+ #!/usr/bin/env ruby
2
+ # -*- coding:utf-8; mode:ruby; -*-
3
+
4
+ require "revdev"
5
+ require "optparse"
6
+
7
+ USAGE=<<__EOF
8
+ usage:
9
+ #{$0} event_device [ event_device [ ... ] ]
10
+
11
+ display device informatioin for event_device(s)
12
+
13
+ example:
14
+ #{$0} /dev/input/event*
15
+ __EOF
16
+
17
+ def main
18
+ include Revdev
19
+
20
+ if ARGV.length == 0
21
+ puts USAGE
22
+ exit false
23
+ end
24
+
25
+ STDOUT.sync = true
26
+ puts "path name version bustype vendor product id.version"
27
+ ARGV.each do |devname|
28
+ begin
29
+ evdev = EventDevice.new devname
30
+ params = []
31
+ params << evdev.file.path
32
+ params << evdev.device_name
33
+ params << evdev.driver_version.join('.')
34
+ id = evdev.device_id
35
+ params << "#{id.hr_bustype}(#{id.bustype})"
36
+ params << id.vendor
37
+ params << id.product
38
+ params << id.hr_version || id.version
39
+ puts params.join ' '
40
+ rescue => e
41
+ p e
42
+ end
43
+ end
44
+
45
+ end
46
+
47
+ main
@@ -35,4 +35,4 @@ def main
35
35
 
36
36
  end
37
37
 
38
- main if ($0 == __FILE__)
38
+ main
File without changes
@@ -0,0 +1,42 @@
1
+ #!/usr/bin env ruby
2
+ # -*- coding:utf-8-unix; mode:ruby; -*-
3
+
4
+ require 'revdev'
5
+
6
+ USAGE = <<__USAGE
7
+ usage: #{$0} <device> <command> <on/off>
8
+ light <on/off> <command> to <device>
9
+
10
+ example: #{$0} /dev/input/event2 LED_CAPSL ON
11
+
12
+ command list:
13
+ #{
14
+ Revdev.constants.delete_if do |c|
15
+ not c.match(/^LED_/)
16
+ end.delete_if do |c|
17
+ c.match(/^LED_(?:CNT|MAX)$/)
18
+ end.join("\n ")}
19
+ __USAGE
20
+
21
+ def main
22
+ include Revdev
23
+
24
+ if not (ARGV.length == 3 and ARGV[1].match(/^LED_/) and ARGV[2].match(/^ON|OFF$/i))
25
+ puts USAGE
26
+ exit false
27
+ end
28
+
29
+ dev = ARGV.shift
30
+ cmd = ARGV.shift
31
+ st = ARGV.shift.upcase == 'ON' ? 1 : 0
32
+
33
+ ed = EventDevice.new dev
34
+ ie = InputEvent.new nil, EV_LED, self.class.const_get(cmd), st
35
+ ed.write_input_event ie
36
+ puts "# send <#{cmd}> <#{st}> to #{dev}"
37
+ ed.all_leds_status.each do |k,v|
38
+ puts "#{k} #{(v ? 'on' : 'off')}"
39
+ end
40
+ end
41
+
42
+ main
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: revdev
3
3
  version: !ruby/object:Gem::Version
4
- hash: 25
5
- prerelease: false
4
+ hash: 31
5
+ prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 1
9
- - 1
10
- version: 0.1.1
9
+ - 2
10
+ version: 0.1.2
11
11
  platform: ruby
12
12
  authors:
13
13
  - Keiichiro Ui
@@ -15,8 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2012-04-17 00:00:00 +09:00
19
- default_executable:
18
+ date: 2012-04-19 00:00:00 Z
20
19
  dependencies:
21
20
  - !ruby/object:Gem::Dependency
22
21
  name: rake
@@ -49,9 +48,8 @@ dependencies:
49
48
  description: revdev is a ruby binding to handling event devices.
50
49
  email:
51
50
  - keiichiro.ui@gmail.com
52
- executables:
53
- - device_name
54
- - key_dump
51
+ executables: []
52
+
55
53
  extensions:
56
54
  - ext/revdev/extconf.rb
57
55
  extra_rdoc_files: []
@@ -62,8 +60,6 @@ files:
62
60
  - LICENSE
63
61
  - README.md
64
62
  - Rakefile
65
- - bin/device_name
66
- - bin/key_dump
67
63
  - ext/revdev/extconf.rb
68
64
  - ext/revdev/revdev.c
69
65
  - lib/revdev.rb
@@ -73,11 +69,14 @@ files:
73
69
  - lib/revdev/input_id.rb
74
70
  - lib/revdev/version.rb
75
71
  - revdev.gemspec
72
+ - sample/device_info
73
+ - sample/device_name
74
+ - sample/key_dump
75
+ - sample/keyboard_leds
76
76
  - test/test_event_device.rb
77
77
  - test/test_input_event.rb
78
78
  - test/test_input_id.rb
79
79
  - test/test_revdev.rb
80
- has_rdoc: true
81
80
  homepage: https://rubygems.org/gems/revdev
82
81
  licenses: []
83
82
 
@@ -107,7 +106,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
107
106
  requirements: []
108
107
 
109
108
  rubyforge_project:
110
- rubygems_version: 1.3.7
109
+ rubygems_version: 1.7.2
111
110
  signing_key:
112
111
  specification_version: 3
113
112
  summary: ruby binding to handling event devices.