revdev 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -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.