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.
- data/lib/revdev.rb +19 -16
- data/lib/revdev/event_device.rb +31 -4
- data/lib/revdev/input_event.rb +3 -2
- data/lib/revdev/input_id.rb +15 -0
- data/lib/revdev/version.rb +1 -1
- data/sample/device_info +47 -0
- data/{bin → sample}/device_name +1 -1
- data/{bin → sample}/key_dump +0 -0
- data/sample/keyboard_leds +42 -0
- metadata +12 -13
data/lib/revdev.rb
CHANGED
@@ -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
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
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
|
-
|
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
|
-
|
40
|
-
REVERSE_MAPS[
|
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
|
data/lib/revdev/event_device.rb
CHANGED
@@ -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('
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
data/lib/revdev/input_event.rb
CHANGED
@@ -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
|
-
|
37
|
-
|
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
|
|
data/lib/revdev/input_id.rb
CHANGED
@@ -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
|
data/lib/revdev/version.rb
CHANGED
data/sample/device_info
ADDED
@@ -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
|
data/{bin → sample}/device_name
RENAMED
data/{bin → sample}/key_dump
RENAMED
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:
|
5
|
-
prerelease:
|
4
|
+
hash: 31
|
5
|
+
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 1
|
9
|
-
-
|
10
|
-
version: 0.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-
|
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
|
-
|
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.
|
109
|
+
rubygems_version: 1.7.2
|
111
110
|
signing_key:
|
112
111
|
specification_version: 3
|
113
112
|
summary: ruby binding to handling event devices.
|