device_input 0.1.0.1 → 0.1.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +69 -22
- data/VERSION +1 -0
- data/bin/devsniff +3 -1
- data/lib/device_input.rb +20 -32
- data/lib/device_input/labels.rb +465 -0
- metadata +4 -3
- data/lib/device_input/codes.rb +0 -438
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7b6a65816d84145d35e91685e6c65ade829cc898
|
4
|
+
data.tar.gz: d4bc6894c5763401e890e588a5bcd48757d71d01
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 566ffdd5388b0b92751f158b8fdc20ef6d0ab5ea96b77b5b430e5d1328fab8a718d5e577ed4d3f8960ba76f0f060884ec41b6a86bd30a70372804133e82657df
|
7
|
+
data.tar.gz: 074f459314a86d675d7f9ca4612e7c108e3eb866d89fb067e333762ac94418300113a4c94a014fe826914f6600c9e3db9033cc87aa4167d437c9a406f9e21f8b
|
data/README.md
CHANGED
@@ -22,7 +22,7 @@ to delimit individual messages and decode them. We can't simply read a byte
|
|
22
22
|
at a time and try to make sense of it. In fact, on my system,
|
23
23
|
`/dev/input/event0` refuses any read that is not a multiple of the struct /
|
24
24
|
message size, so we need to know the message size before even attempting a
|
25
|
-
read()
|
25
|
+
`read()`, let alone a `decode()`.
|
26
26
|
|
27
27
|
To determine the message size, we need to know the data structure. For a
|
28
28
|
long time, it was pretty simple: events are 16 bytes:
|
@@ -34,8 +34,9 @@ long time, it was pretty simple: events are 16 bytes:
|
|
34
34
|
|
35
35
|
However, this is only true for 32-bit platforms. On 64-bit platforms, event
|
36
36
|
timestamps became 16 bytes, increasing the size of events from 16 to 24 bytes.
|
37
|
-
This is because a timestamp is defined (ultimately) as two `long`s, and
|
38
|
-
|
37
|
+
This is because a timestamp is defined (ultimately) as two `long`s, and as
|
38
|
+
everyone knows, two longs don't make a light. No, wait -- it's that `long`s
|
39
|
+
are bigger on 64-bit platforms. It's easy to remember:
|
39
40
|
|
40
41
|
* 32-bit platform: 32-bit `long` (4 bytes)
|
41
42
|
* 64-bit platform: 64-bit `long` (8 bytes)
|
@@ -50,48 +51,94 @@ executable code to assist in examining kernel input events.
|
|
50
51
|
|
51
52
|
# Installation
|
52
53
|
|
53
|
-
|
54
|
+
**REQUIREMENTS**
|
54
55
|
|
55
|
-
|
56
|
+
* Ruby >= 2.0
|
57
|
+
|
58
|
+
**DEPENDENCIES**
|
59
|
+
|
60
|
+
* none
|
56
61
|
|
57
62
|
Install the gem:
|
58
|
-
```
|
63
|
+
```shell
|
59
64
|
$ gem install device_input # sudo as necessary
|
60
65
|
```
|
61
66
|
|
62
67
|
Or, if using [Bundler](http://bundler.io/), add to your `Gemfile`:
|
63
|
-
```
|
64
|
-
gem 'device_input', '~> 0.
|
68
|
+
```ruby
|
69
|
+
gem 'device_input', '~> 0.1'
|
65
70
|
```
|
66
71
|
|
67
72
|
# Usage
|
68
73
|
|
69
74
|
## Executable
|
70
75
|
|
71
|
-
```
|
76
|
+
```shell
|
72
77
|
$ sudo devsniff /dev/input/event0
|
73
78
|
```
|
74
79
|
|
75
80
|
When the `f` key is pressed:
|
76
81
|
```
|
77
|
-
|
78
|
-
|
79
|
-
|
82
|
+
EV_MSC:ScanCode:33
|
83
|
+
EV_KEY:F:1
|
84
|
+
EV_SYN:SYN_REPORT:0
|
80
85
|
```
|
81
86
|
|
82
|
-
And released:
|
87
|
+
And released immediately (1=pressed, 0=released):
|
83
88
|
```
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
89
|
+
EV_MSC:ScanCode:33
|
90
|
+
EV_KEY:F:1
|
91
|
+
EV_SYN:SYN_REPORT:0
|
92
|
+
EV_MSC:ScanCode:33
|
93
|
+
EV_KEY:F:0
|
94
|
+
EV_SYN:SYN_REPORT:0
|
90
95
|
```
|
91
96
|
|
92
|
-
|
97
|
+
How about pretty mode?
|
98
|
+
```shell
|
99
|
+
$ sudo devsniff /dev/input/event0 pretty
|
100
|
+
|
101
|
+
# f
|
102
|
+
|
103
|
+
2017-01-24 05:29:43.923 Misc:ScanCode:33
|
104
|
+
2017-01-24 05:29:43.923 Key:F:1
|
105
|
+
2017-01-24 05:29:43.923 Sync:Report:0
|
106
|
+
2017-01-24 05:29:44.012 Misc:ScanCode:33
|
107
|
+
2017-01-24 05:29:44.012 Key:F:0
|
108
|
+
2017-01-24 05:29:44.012 Sync:Report:0
|
109
|
+
```
|
93
110
|
|
111
|
+
We can pull off the labels and go raw:
|
112
|
+
```shell
|
113
|
+
$ sudo devsniff /dev/input/event0 raw
|
114
|
+
|
115
|
+
# f
|
116
|
+
|
117
|
+
4:4:33
|
118
|
+
1:33:1
|
119
|
+
0:0:0
|
120
|
+
4:4:33
|
121
|
+
1:33:0
|
122
|
+
0:0:0
|
94
123
|
```
|
124
|
+
|
125
|
+
Fulfill your hacker-matrix fantasies:
|
126
|
+
```shell
|
127
|
+
$ sudo devsniff /dev/input/event0 hex
|
128
|
+
|
129
|
+
# f
|
130
|
+
|
131
|
+
00000000588757bd 00000000000046ca 0004 0004 00000021
|
132
|
+
00000000588757bd 00000000000046ca 0001 0021 00000001
|
133
|
+
00000000588757bd 00000000000046ca 0000 0000 00000000
|
134
|
+
00000000588757bd 000000000001a298 0004 0004 00000021
|
135
|
+
00000000588757bd 000000000001a298 0001 0021 00000000
|
136
|
+
00000000588757bd 000000000001a298 0000 0000 00000000
|
137
|
+
```
|
138
|
+
|
139
|
+
## Library
|
140
|
+
|
141
|
+
```ruby
|
95
142
|
require 'device_input'
|
96
143
|
|
97
144
|
# this loops forever and blocks waiting for input
|
@@ -110,7 +157,7 @@ An event has:
|
|
110
157
|
* `#value`: Fixnum (signed) from `#data`
|
111
158
|
|
112
159
|
You will probably want to write your own read loop for your own project.
|
113
|
-
[`DeviceInput.read_from`](lib/device_input.rb#
|
160
|
+
[`DeviceInput.read_from`](lib/device_input.rb#L100) is very simple and can
|
114
161
|
easily be rewritten outside of this project's namespace and adapted for your
|
115
162
|
needs.
|
116
163
|
|
@@ -213,5 +260,5 @@ value __s32 int32_t l
|
|
213
260
|
|
214
261
|
* Inspired by https://github.com/prullmann/libdevinput (don't use it)
|
215
262
|
- also the source of an early version of the
|
216
|
-
[event code labels](lib/device_input/
|
263
|
+
[event code labels](lib/device_input/labels.rb)
|
217
264
|
* Thanks to al2o3-cr from #ruby on Freenode for feedback
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.1.1.1
|
data/bin/devsniff
CHANGED
data/lib/device_input.rb
CHANGED
@@ -1,38 +1,27 @@
|
|
1
|
+
require 'device_input/labels'
|
2
|
+
|
1
3
|
module DeviceInput
|
2
4
|
class Event
|
3
5
|
DEFINITION = {
|
4
|
-
:tv_sec => 'long',
|
5
|
-
:tv_usec => 'long',
|
6
|
+
:tv_sec => 'long', # 64 bits on 64-bit platforms
|
7
|
+
:tv_usec => 'long', # 32 bits on 32-bit platforms
|
6
8
|
:type => 'uint16_t',
|
7
9
|
:code => 'uint16_t',
|
8
10
|
:value => 'int32_t',
|
9
11
|
}
|
10
12
|
PACK_MAP = {
|
11
|
-
'long' => 'l!',
|
13
|
+
'long' => 'l!', # platform-dependent
|
12
14
|
'uint16_t' => 'S',
|
13
15
|
'int32_t' => 'l',
|
14
16
|
}
|
15
17
|
PACK = DEFINITION.values.map { |v| PACK_MAP.fetch(v) }.join
|
16
18
|
|
17
|
-
#
|
19
|
+
# This defines a class, i.e. class Data ... with keys/ivars matching
|
20
|
+
# DEFINITION. Data instances will hold a value for each of the keys.
|
21
|
+
# Sorry for the name. It refers literally to the struct-of-integers
|
22
|
+
# representation we're creating here, every time we use the term `data`
|
18
23
|
Data = Struct.new(*DEFINITION.keys)
|
19
24
|
|
20
|
-
# these are just labels, not used internally
|
21
|
-
TYPES = {
|
22
|
-
0x00 => ['EV_SYN', 'Sync'],
|
23
|
-
0x01 => ['EV_KEY', 'Key'],
|
24
|
-
0x02 => ['EV_REL', 'Relative'],
|
25
|
-
0x03 => ['EV_ABS', 'Absolute'],
|
26
|
-
0x04 => ['EV_MSC', 'Misc'],
|
27
|
-
0x05 => ['EV_SW', 'ToggleSwitch'],
|
28
|
-
0x17 => ['EV_LED', 'LED'],
|
29
|
-
0x18 => ['EV_SND', 'Sound'],
|
30
|
-
0x20 => ['EV_REP', 'Repeat'],
|
31
|
-
0x21 => ['EV_FF', 'ForceFeedback'],
|
32
|
-
0x22 => ['EV_PWR', 'Power'],
|
33
|
-
0x23 => ['EV_FF_STATUS', 'ForceFeedbackStatus'],
|
34
|
-
}
|
35
|
-
|
36
25
|
# convert Event::Data to a string
|
37
26
|
def self.encode(data)
|
38
27
|
data.values.pack(PACK)
|
@@ -40,23 +29,22 @@ module DeviceInput
|
|
40
29
|
|
41
30
|
# convert string to Event::Data
|
42
31
|
def self.decode(binstr)
|
43
|
-
Data.new
|
32
|
+
Data.new(*binstr.unpack(PACK))
|
44
33
|
end
|
45
34
|
|
46
|
-
# return an array
|
47
|
-
def self.type_labels(
|
48
|
-
TYPES[
|
35
|
+
# return an array of equivalent labels, prettier toward the end
|
36
|
+
def self.type_labels(type_val)
|
37
|
+
TYPES[type_val] || ["UNK-#{type_val}"]
|
49
38
|
end
|
50
39
|
|
51
|
-
# return an array
|
52
|
-
def self.code_labels(
|
53
|
-
|
54
|
-
labels = DeviceInput::CODES.dig(type_code, code_code)
|
40
|
+
# return an array of equivalent labels, prettier toward the end
|
41
|
+
def self.code_labels(type_val, code_val)
|
42
|
+
labels = CODES.dig(type_val, code_val)
|
55
43
|
if labels
|
56
44
|
# not all labels have been converted to arrays yet
|
57
|
-
labels.kind_of?(
|
45
|
+
labels.kind_of?(String) ? [labels] : labels
|
58
46
|
else
|
59
|
-
["UNK-#{
|
47
|
+
["UNK-#{type_val}-#{code_val}"]
|
60
48
|
end
|
61
49
|
end
|
62
50
|
|
@@ -67,7 +55,7 @@ module DeviceInput
|
|
67
55
|
attr_reader :data, :time, :type, :code
|
68
56
|
|
69
57
|
def initialize(data)
|
70
|
-
@data = data
|
58
|
+
@data = data # sorry for the name. it's a Data. data everywhere
|
71
59
|
@time = Time.at(data.tv_sec, data.tv_usec)
|
72
60
|
# take the raw label, closest to the metal
|
73
61
|
@type = self.class.type_labels(data.type).first
|
@@ -97,7 +85,7 @@ module DeviceInput
|
|
97
85
|
end
|
98
86
|
|
99
87
|
# display fields in hex
|
100
|
-
def
|
88
|
+
def hex
|
101
89
|
require 'rbconfig/sizeof'
|
102
90
|
DEFINITION.inject('') { |memo, (field, type)|
|
103
91
|
int = @data.send(field)
|
@@ -0,0 +1,465 @@
|
|
1
|
+
module DeviceInput
|
2
|
+
class Event
|
3
|
+
# https://www.kernel.org/doc/Documentation/input/event-codes.txt
|
4
|
+
# linux.git/tree/include/uapi/linux/input-event-codes.h
|
5
|
+
|
6
|
+
EV_SYN = 0x00
|
7
|
+
EV_KEY = 0x01
|
8
|
+
EV_REL = 0x02
|
9
|
+
EV_ABS = 0x03
|
10
|
+
EV_MSC = 0x04
|
11
|
+
EV_SW = 0x05
|
12
|
+
EV_LED = 0x11
|
13
|
+
EV_SND = 0x12
|
14
|
+
EV_REP = 0x14
|
15
|
+
EV_FF = 0x15
|
16
|
+
EV_PWR = 0x16
|
17
|
+
EV_FF_STATUS = 0x17
|
18
|
+
EV_MAX = 0x1f
|
19
|
+
EV_CNT = EV_MAX + 1
|
20
|
+
|
21
|
+
TYPES = {
|
22
|
+
EV_SYN => ['EV_SYN', 'Sync'],
|
23
|
+
EV_KEY => ['EV_KEY', 'Key'],
|
24
|
+
EV_REL => ['EV_REL', 'Relative'],
|
25
|
+
EV_ABS => ['EV_ABS', 'Absolute'],
|
26
|
+
EV_MSC => ['EV_MSC', 'Misc'],
|
27
|
+
EV_SW => ['EV_SW', 'ToggleSwitch'],
|
28
|
+
EV_LED => ['EV_LED', 'LED'],
|
29
|
+
EV_SND => ['EV_SND', 'Sound'],
|
30
|
+
EV_REP => ['EV_REP', 'Repeat'],
|
31
|
+
EV_FF => ['EV_FF', 'ForceFeedback'],
|
32
|
+
EV_PWR => ['EV_PWR', 'Power'],
|
33
|
+
EV_FF_STATUS => ['EV_FF_STATUS', 'ForceFeedbackStatus'],
|
34
|
+
}
|
35
|
+
|
36
|
+
CODES = {
|
37
|
+
EV_SYN => {
|
38
|
+
0 => ['SYN_REPORT', 'Report'],
|
39
|
+
1 => ['SYN_CONFIG', 'Config'],
|
40
|
+
2 => ['SYN_MT_REPORT', 'Multitouch'],
|
41
|
+
3 => ['SYN_DROPPED', 'Desync'],
|
42
|
+
},
|
43
|
+
|
44
|
+
EV_KEY => {
|
45
|
+
0 => 'Reserved',
|
46
|
+
1 => 'Esc',
|
47
|
+
2 => '1',
|
48
|
+
3 => '2',
|
49
|
+
4 => '3',
|
50
|
+
5 => '4',
|
51
|
+
6 => '5',
|
52
|
+
7 => '6',
|
53
|
+
8 => '7',
|
54
|
+
9 => '8',
|
55
|
+
10 => '9',
|
56
|
+
11 => '0',
|
57
|
+
12 => 'Minus',
|
58
|
+
13 => 'Equal',
|
59
|
+
14 => 'Backspace',
|
60
|
+
15 => 'Tab',
|
61
|
+
16 => 'Q',
|
62
|
+
17 => 'W',
|
63
|
+
18 => 'E',
|
64
|
+
19 => 'R',
|
65
|
+
20 => 'T',
|
66
|
+
21 => 'Y',
|
67
|
+
22 => 'U',
|
68
|
+
23 => 'I',
|
69
|
+
24 => 'O',
|
70
|
+
25 => 'P',
|
71
|
+
26 => 'LeftBrace',
|
72
|
+
27 => 'RightBrace',
|
73
|
+
28 => 'Enter',
|
74
|
+
29 => 'LeftControl',
|
75
|
+
30 => 'A',
|
76
|
+
31 => 'S',
|
77
|
+
32 => 'D',
|
78
|
+
33 => 'F',
|
79
|
+
34 => 'G',
|
80
|
+
35 => 'H',
|
81
|
+
36 => 'J',
|
82
|
+
37 => 'K',
|
83
|
+
38 => 'L',
|
84
|
+
39 => 'Semicolon',
|
85
|
+
40 => 'Apostrophe',
|
86
|
+
41 => 'Grave',
|
87
|
+
42 => 'LeftShift',
|
88
|
+
43 => 'BackSlash',
|
89
|
+
44 => 'Z',
|
90
|
+
45 => 'X',
|
91
|
+
46 => 'C',
|
92
|
+
47 => 'V',
|
93
|
+
48 => 'B',
|
94
|
+
49 => 'N',
|
95
|
+
50 => 'M',
|
96
|
+
51 => 'Comma',
|
97
|
+
52 => 'Dot',
|
98
|
+
53 => 'Slash',
|
99
|
+
54 => 'RightShift',
|
100
|
+
55 => 'KPAsterisk',
|
101
|
+
56 => 'LeftAlt',
|
102
|
+
57 => 'Space',
|
103
|
+
58 => 'CapsLock',
|
104
|
+
59 => 'F1',
|
105
|
+
60 => 'F2',
|
106
|
+
61 => 'F3',
|
107
|
+
62 => 'F4',
|
108
|
+
63 => 'F5',
|
109
|
+
64 => 'F6',
|
110
|
+
65 => 'F7',
|
111
|
+
66 => 'F8',
|
112
|
+
67 => 'F9',
|
113
|
+
68 => 'F10',
|
114
|
+
69 => 'NumLock',
|
115
|
+
70 => 'ScrollLock',
|
116
|
+
71 => 'KP7',
|
117
|
+
72 => 'KP8',
|
118
|
+
73 => 'KP9',
|
119
|
+
74 => 'KPMinus',
|
120
|
+
75 => 'KP4',
|
121
|
+
76 => 'KP5',
|
122
|
+
77 => 'KP6',
|
123
|
+
78 => 'KPPlus',
|
124
|
+
79 => 'KP1',
|
125
|
+
80 => 'KP2',
|
126
|
+
81 => 'KP3',
|
127
|
+
82 => 'KP0',
|
128
|
+
83 => 'KPDot',
|
129
|
+
85 => 'Zenkaku/Hankaku',
|
130
|
+
86 => '102nd',
|
131
|
+
87 => 'F11',
|
132
|
+
88 => 'F12',
|
133
|
+
89 => 'RO',
|
134
|
+
90 => 'Katakana',
|
135
|
+
91 => 'HIRAGANA',
|
136
|
+
92 => 'Henkan',
|
137
|
+
93 => 'Katakana/Hiragana',
|
138
|
+
94 => 'Muhenkan',
|
139
|
+
95 => 'KPJpComma',
|
140
|
+
96 => 'KPEnter',
|
141
|
+
97 => 'RightCtrl',
|
142
|
+
98 => 'KPSlash',
|
143
|
+
99 => 'SysRq',
|
144
|
+
100 => 'RightAlt',
|
145
|
+
101 => 'LineFeed',
|
146
|
+
102 => 'Home',
|
147
|
+
103 => 'Up',
|
148
|
+
104 => 'PageUp',
|
149
|
+
105 => 'Left',
|
150
|
+
106 => 'Right',
|
151
|
+
107 => 'End',
|
152
|
+
108 => 'Down',
|
153
|
+
109 => 'PageDown',
|
154
|
+
110 => 'Insert',
|
155
|
+
111 => 'Delete',
|
156
|
+
112 => 'Macro',
|
157
|
+
113 => 'Mute',
|
158
|
+
114 => 'VolumeDown',
|
159
|
+
115 => 'VolumeUp',
|
160
|
+
116 => 'Power',
|
161
|
+
117 => 'KPEqual',
|
162
|
+
118 => 'KPPlusMinus',
|
163
|
+
119 => 'Pause',
|
164
|
+
121 => 'KPComma',
|
165
|
+
122 => 'Hanguel',
|
166
|
+
123 => 'Hanja',
|
167
|
+
124 => 'Yen',
|
168
|
+
125 => 'LeftMeta',
|
169
|
+
126 => 'RightMeta',
|
170
|
+
127 => 'Compose',
|
171
|
+
128 => 'Stop',
|
172
|
+
129 => 'Again',
|
173
|
+
130 => 'Props',
|
174
|
+
131 => 'Undo',
|
175
|
+
132 => 'Front',
|
176
|
+
133 => 'Copy',
|
177
|
+
134 => 'Open',
|
178
|
+
135 => 'Paste',
|
179
|
+
136 => 'Find',
|
180
|
+
137 => 'Cut',
|
181
|
+
138 => 'Help',
|
182
|
+
139 => 'Menu',
|
183
|
+
140 => 'Calc',
|
184
|
+
141 => 'Setup',
|
185
|
+
142 => 'Sleep',
|
186
|
+
143 => 'WakeUp',
|
187
|
+
144 => 'File',
|
188
|
+
145 => 'SendFile',
|
189
|
+
146 => 'DeleteFile',
|
190
|
+
147 => 'X-fer',
|
191
|
+
148 => 'Prog1',
|
192
|
+
149 => 'Prog2',
|
193
|
+
150 => 'WWW',
|
194
|
+
151 => 'MSDOS',
|
195
|
+
152 => 'Coffee',
|
196
|
+
153 => 'Direction',
|
197
|
+
154 => 'CycleWindows',
|
198
|
+
155 => 'Mail',
|
199
|
+
156 => 'Bookmarks',
|
200
|
+
157 => 'Computer',
|
201
|
+
158 => 'Back',
|
202
|
+
159 => 'Forward',
|
203
|
+
160 => 'CloseCD',
|
204
|
+
161 => 'EjectCD',
|
205
|
+
162 => 'EjectCloseCD',
|
206
|
+
163 => 'NextSong',
|
207
|
+
164 => 'PlayPause',
|
208
|
+
165 => 'PreviousSong',
|
209
|
+
166 => 'StopCD',
|
210
|
+
167 => 'Record',
|
211
|
+
168 => 'Rewind',
|
212
|
+
169 => 'Phone',
|
213
|
+
170 => 'ISOKey',
|
214
|
+
171 => 'Config',
|
215
|
+
172 => 'HomePage',
|
216
|
+
173 => 'Refresh',
|
217
|
+
174 => 'Exit',
|
218
|
+
175 => 'Move',
|
219
|
+
176 => 'Edit',
|
220
|
+
177 => 'ScrollUp',
|
221
|
+
178 => 'ScrollDown',
|
222
|
+
179 => 'KPLeftParenthesis',
|
223
|
+
180 => 'KPRightParenthesis',
|
224
|
+
183 => 'F13',
|
225
|
+
184 => 'F14',
|
226
|
+
185 => 'F15',
|
227
|
+
186 => 'F16',
|
228
|
+
187 => 'F17',
|
229
|
+
188 => 'F18',
|
230
|
+
189 => 'F19',
|
231
|
+
190 => 'F20',
|
232
|
+
191 => 'F21',
|
233
|
+
192 => 'F22',
|
234
|
+
193 => 'F23',
|
235
|
+
194 => 'F24',
|
236
|
+
200 => 'PlayCD',
|
237
|
+
201 => 'PauseCD',
|
238
|
+
202 => 'Prog3',
|
239
|
+
203 => 'Prog4',
|
240
|
+
205 => 'Suspend',
|
241
|
+
206 => 'Close',
|
242
|
+
207 => 'Play',
|
243
|
+
208 => 'Fast Forward',
|
244
|
+
209 => 'Bass Boost',
|
245
|
+
210 => 'Print',
|
246
|
+
211 => 'HP',
|
247
|
+
212 => 'Camera',
|
248
|
+
213 => 'Sound',
|
249
|
+
214 => 'Question',
|
250
|
+
215 => 'Email',
|
251
|
+
216 => 'Chat',
|
252
|
+
217 => 'Search',
|
253
|
+
218 => 'Connect',
|
254
|
+
219 => 'Finance',
|
255
|
+
220 => 'Sport',
|
256
|
+
221 => 'Shop',
|
257
|
+
222 => 'Alternate Erase',
|
258
|
+
223 => 'Cancel',
|
259
|
+
224 => 'Brightness down',
|
260
|
+
225 => 'Brightness up',
|
261
|
+
226 => 'Media',
|
262
|
+
240 => 'Unknown',
|
263
|
+
256 => 'Btn0',
|
264
|
+
257 => 'Btn1',
|
265
|
+
258 => 'Btn2',
|
266
|
+
259 => 'Btn3',
|
267
|
+
260 => 'Btn4',
|
268
|
+
261 => 'Btn5',
|
269
|
+
262 => 'Btn6',
|
270
|
+
263 => 'Btn7',
|
271
|
+
264 => 'Btn8',
|
272
|
+
265 => 'Btn9',
|
273
|
+
272 => 'LeftBtn',
|
274
|
+
273 => 'RightBtn',
|
275
|
+
274 => 'MiddleBtn',
|
276
|
+
275 => 'SideBtn',
|
277
|
+
276 => 'ExtraBtn',
|
278
|
+
277 => 'ForwardBtn',
|
279
|
+
278 => 'BackBtn',
|
280
|
+
279 => 'TaskBtn',
|
281
|
+
288 => 'Trigger',
|
282
|
+
289 => 'ThumbBtn',
|
283
|
+
290 => 'ThumbBtn2',
|
284
|
+
291 => 'TopBtn',
|
285
|
+
292 => 'TopBtn2',
|
286
|
+
293 => 'PinkieBtn',
|
287
|
+
294 => 'BaseBtn',
|
288
|
+
295 => 'BaseBtn2',
|
289
|
+
296 => 'BaseBtn3',
|
290
|
+
297 => 'BaseBtn4',
|
291
|
+
298 => 'BaseBtn5',
|
292
|
+
299 => 'BaseBtn6',
|
293
|
+
303 => 'BtnDead',
|
294
|
+
304 => 'BtnA',
|
295
|
+
305 => 'BtnB',
|
296
|
+
306 => 'BtnC',
|
297
|
+
307 => 'BtnX',
|
298
|
+
308 => 'BtnY',
|
299
|
+
309 => 'BtnZ',
|
300
|
+
310 => 'BtnTL',
|
301
|
+
311 => 'BtnTR',
|
302
|
+
312 => 'BtnTL2',
|
303
|
+
313 => 'BtnTR2',
|
304
|
+
314 => 'BtnSelect',
|
305
|
+
315 => 'BtnStart',
|
306
|
+
316 => 'BtnMode',
|
307
|
+
317 => 'BtnThumbL',
|
308
|
+
318 => 'BtnThumbR',
|
309
|
+
320 => 'ToolPen',
|
310
|
+
321 => 'ToolRubber',
|
311
|
+
322 => 'ToolBrush',
|
312
|
+
323 => 'ToolPencil',
|
313
|
+
324 => 'ToolAirbrush',
|
314
|
+
325 => 'ToolFinger',
|
315
|
+
326 => 'ToolMouse',
|
316
|
+
327 => 'ToolLens',
|
317
|
+
330 => 'Touch',
|
318
|
+
331 => 'Stylus',
|
319
|
+
332 => 'Stylus2',
|
320
|
+
333 => 'Tool Doubletap',
|
321
|
+
334 => 'Tool Tripletap',
|
322
|
+
336 => 'WheelBtn',
|
323
|
+
337 => 'Gear up',
|
324
|
+
352 => 'Ok',
|
325
|
+
353 => 'Select',
|
326
|
+
354 => 'Goto',
|
327
|
+
355 => 'Clear',
|
328
|
+
356 => 'Power2',
|
329
|
+
357 => 'Option',
|
330
|
+
358 => 'Info',
|
331
|
+
359 => 'Time',
|
332
|
+
360 => 'Vendor',
|
333
|
+
361 => 'Archive',
|
334
|
+
362 => 'Program',
|
335
|
+
363 => 'Channel',
|
336
|
+
364 => 'Favorites',
|
337
|
+
365 => 'EPG',
|
338
|
+
366 => 'PVR',
|
339
|
+
367 => 'MHP',
|
340
|
+
368 => 'Language',
|
341
|
+
369 => 'Title',
|
342
|
+
370 => 'Subtitle',
|
343
|
+
371 => 'Angle',
|
344
|
+
372 => 'Zoom',
|
345
|
+
373 => 'Mode',
|
346
|
+
374 => 'Keyboard',
|
347
|
+
375 => 'Screen',
|
348
|
+
376 => 'PC',
|
349
|
+
377 => 'TV',
|
350
|
+
378 => 'TV2',
|
351
|
+
379 => 'VCR',
|
352
|
+
380 => 'VCR2',
|
353
|
+
381 => 'Sat',
|
354
|
+
382 => 'Sat2',
|
355
|
+
383 => 'CD',
|
356
|
+
384 => 'Tape',
|
357
|
+
385 => 'Radio',
|
358
|
+
386 => 'Tuner',
|
359
|
+
387 => 'Player',
|
360
|
+
388 => 'Text',
|
361
|
+
389 => 'DVD',
|
362
|
+
390 => 'Aux',
|
363
|
+
391 => 'MP3',
|
364
|
+
392 => 'Audio',
|
365
|
+
393 => 'Video',
|
366
|
+
394 => 'Directory',
|
367
|
+
395 => 'List',
|
368
|
+
396 => 'Memo',
|
369
|
+
397 => 'Calendar',
|
370
|
+
398 => 'Red',
|
371
|
+
399 => 'Green',
|
372
|
+
400 => 'Yellow',
|
373
|
+
401 => 'Blue',
|
374
|
+
402 => 'ChannelUp',
|
375
|
+
403 => 'ChannelDown',
|
376
|
+
404 => 'First',
|
377
|
+
405 => 'Last',
|
378
|
+
406 => 'AB',
|
379
|
+
407 => 'Next',
|
380
|
+
408 => 'Restart',
|
381
|
+
409 => 'Slow',
|
382
|
+
410 => 'Shuffle',
|
383
|
+
411 => 'Break',
|
384
|
+
412 => 'Previous',
|
385
|
+
413 => 'Digits',
|
386
|
+
414 => 'TEEN',
|
387
|
+
415 => 'TWEN',
|
388
|
+
448 => 'Delete EOL',
|
389
|
+
449 => 'Delete EOS',
|
390
|
+
450 => 'Insert line',
|
391
|
+
451 => 'Delete line',
|
392
|
+
},
|
393
|
+
|
394
|
+
EV_REL => {
|
395
|
+
0 => 'X',
|
396
|
+
1 => 'Y',
|
397
|
+
2 => 'Z',
|
398
|
+
6 => 'HWheel',
|
399
|
+
7 => 'Dial',
|
400
|
+
8 => 'Wheel',
|
401
|
+
9 => 'Misc',
|
402
|
+
},
|
403
|
+
|
404
|
+
EV_ABS => {
|
405
|
+
0 => 'X',
|
406
|
+
1 => 'Y',
|
407
|
+
2 => 'Z',
|
408
|
+
3 => 'Rx',
|
409
|
+
4 => 'Ry',
|
410
|
+
5 => 'Rz',
|
411
|
+
6 => 'Throttle',
|
412
|
+
7 => 'Rudder',
|
413
|
+
8 => 'Wheel',
|
414
|
+
9 => 'Gas',
|
415
|
+
10 => 'Brake',
|
416
|
+
16 => 'Hat0X',
|
417
|
+
17 => 'Hat0Y',
|
418
|
+
18 => 'Hat1X',
|
419
|
+
19 => 'Hat1Y',
|
420
|
+
20 => 'Hat2X',
|
421
|
+
21 => 'Hat2Y',
|
422
|
+
22 => 'Hat3X',
|
423
|
+
23 => 'Hat 3Y',
|
424
|
+
24 => 'Pressure',
|
425
|
+
25 => 'Distance',
|
426
|
+
26 => 'XTilt',
|
427
|
+
27 => 'YTilt',
|
428
|
+
28 => 'Tool Width',
|
429
|
+
32 => 'Volume',
|
430
|
+
40 => 'Misc',
|
431
|
+
},
|
432
|
+
|
433
|
+
EV_MSC => {
|
434
|
+
0 => 'Serial',
|
435
|
+
1 => 'Pulseled',
|
436
|
+
2 => 'Gesture',
|
437
|
+
3 => 'RawData',
|
438
|
+
4 => 'ScanCode',
|
439
|
+
},
|
440
|
+
|
441
|
+
EV_LED => {
|
442
|
+
0 => 'NumLock',
|
443
|
+
1 => 'CapsLock',
|
444
|
+
2 => 'ScrollLock',
|
445
|
+
3 => 'Compose',
|
446
|
+
4 => 'Kana',
|
447
|
+
5 => 'Sleep',
|
448
|
+
6 => 'Suspend',
|
449
|
+
7 => 'Mute',
|
450
|
+
8 => 'Misc',
|
451
|
+
},
|
452
|
+
|
453
|
+
EV_SND => {
|
454
|
+
0 => 'Click',
|
455
|
+
1 => 'Bell',
|
456
|
+
2 => 'Tone',
|
457
|
+
},
|
458
|
+
|
459
|
+
EV_REP => {
|
460
|
+
0 => 'Delay',
|
461
|
+
1 => 'Period',
|
462
|
+
},
|
463
|
+
}
|
464
|
+
end
|
465
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: device_input
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rick Hull
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-01-
|
11
|
+
date: 2017-01-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: buildar
|
@@ -34,9 +34,10 @@ extensions: []
|
|
34
34
|
extra_rdoc_files: []
|
35
35
|
files:
|
36
36
|
- README.md
|
37
|
+
- VERSION
|
37
38
|
- bin/devsniff
|
38
39
|
- lib/device_input.rb
|
39
|
-
- lib/device_input/
|
40
|
+
- lib/device_input/labels.rb
|
40
41
|
homepage: https://github.com/rickhull/device_input
|
41
42
|
licenses:
|
42
43
|
- GPL-3.0
|
data/lib/device_input/codes.rb
DELETED
@@ -1,438 +0,0 @@
|
|
1
|
-
module DeviceInput
|
2
|
-
CODES = {}
|
3
|
-
|
4
|
-
# type = Sync
|
5
|
-
CODES[0] = {
|
6
|
-
0 => ['SYN_REPORT', 'Report'],
|
7
|
-
1 => ['SYN_CONFIG', 'Config'],
|
8
|
-
2 => ['SYN_MT_REPORT', 'Multitouch'],
|
9
|
-
3 => ['SYN_DROPPED', 'Desync'],
|
10
|
-
}
|
11
|
-
|
12
|
-
# type = Key
|
13
|
-
CODES[1] = {
|
14
|
-
0 => 'Reserved',
|
15
|
-
1 => 'Esc',
|
16
|
-
2 => '1',
|
17
|
-
3 => '2',
|
18
|
-
4 => '3',
|
19
|
-
5 => '4',
|
20
|
-
6 => '5',
|
21
|
-
7 => '6',
|
22
|
-
8 => '7',
|
23
|
-
9 => '8',
|
24
|
-
10 => '9',
|
25
|
-
11 => '0',
|
26
|
-
12 => 'Minus',
|
27
|
-
13 => 'Equal',
|
28
|
-
14 => 'Backspace',
|
29
|
-
15 => 'Tab',
|
30
|
-
16 => 'Q',
|
31
|
-
17 => 'W',
|
32
|
-
18 => 'E',
|
33
|
-
19 => 'R',
|
34
|
-
20 => 'T',
|
35
|
-
21 => 'Y',
|
36
|
-
22 => 'U',
|
37
|
-
23 => 'I',
|
38
|
-
24 => 'O',
|
39
|
-
25 => 'P',
|
40
|
-
26 => 'LeftBrace',
|
41
|
-
27 => 'RightBrace',
|
42
|
-
28 => 'Enter',
|
43
|
-
29 => 'LeftControl',
|
44
|
-
30 => 'A',
|
45
|
-
31 => 'S',
|
46
|
-
32 => 'D',
|
47
|
-
33 => 'F',
|
48
|
-
34 => 'G',
|
49
|
-
35 => 'H',
|
50
|
-
36 => 'J',
|
51
|
-
37 => 'K',
|
52
|
-
38 => 'L',
|
53
|
-
39 => 'Semicolon',
|
54
|
-
40 => 'Apostrophe',
|
55
|
-
41 => 'Grave',
|
56
|
-
42 => 'LeftShift',
|
57
|
-
43 => 'BackSlash',
|
58
|
-
44 => 'Z',
|
59
|
-
45 => 'X',
|
60
|
-
46 => 'C',
|
61
|
-
47 => 'V',
|
62
|
-
48 => 'B',
|
63
|
-
49 => 'N',
|
64
|
-
50 => 'M',
|
65
|
-
51 => 'Comma',
|
66
|
-
52 => 'Dot',
|
67
|
-
53 => 'Slash',
|
68
|
-
54 => 'RightShift',
|
69
|
-
55 => 'KPAsterisk',
|
70
|
-
56 => 'LeftAlt',
|
71
|
-
57 => 'Space',
|
72
|
-
58 => 'CapsLock',
|
73
|
-
59 => 'F1',
|
74
|
-
60 => 'F2',
|
75
|
-
61 => 'F3',
|
76
|
-
62 => 'F4',
|
77
|
-
63 => 'F5',
|
78
|
-
64 => 'F6',
|
79
|
-
65 => 'F7',
|
80
|
-
66 => 'F8',
|
81
|
-
67 => 'F9',
|
82
|
-
68 => 'F10',
|
83
|
-
69 => 'NumLock',
|
84
|
-
70 => 'ScrollLock',
|
85
|
-
71 => 'KP7',
|
86
|
-
72 => 'KP8',
|
87
|
-
73 => 'KP9',
|
88
|
-
74 => 'KPMinus',
|
89
|
-
75 => 'KP4',
|
90
|
-
76 => 'KP5',
|
91
|
-
77 => 'KP6',
|
92
|
-
78 => 'KPPlus',
|
93
|
-
79 => 'KP1',
|
94
|
-
80 => 'KP2',
|
95
|
-
81 => 'KP3',
|
96
|
-
82 => 'KP0',
|
97
|
-
83 => 'KPDot',
|
98
|
-
85 => 'Zenkaku/Hankaku',
|
99
|
-
86 => '102nd',
|
100
|
-
87 => 'F11',
|
101
|
-
88 => 'F12',
|
102
|
-
89 => 'RO',
|
103
|
-
90 => 'Katakana',
|
104
|
-
91 => 'HIRAGANA',
|
105
|
-
92 => 'Henkan',
|
106
|
-
93 => 'Katakana/Hiragana',
|
107
|
-
94 => 'Muhenkan',
|
108
|
-
95 => 'KPJpComma',
|
109
|
-
96 => 'KPEnter',
|
110
|
-
97 => 'RightCtrl',
|
111
|
-
98 => 'KPSlash',
|
112
|
-
99 => 'SysRq',
|
113
|
-
100 => 'RightAlt',
|
114
|
-
101 => 'LineFeed',
|
115
|
-
102 => 'Home',
|
116
|
-
103 => 'Up',
|
117
|
-
104 => 'PageUp',
|
118
|
-
105 => 'Left',
|
119
|
-
106 => 'Right',
|
120
|
-
107 => 'End',
|
121
|
-
108 => 'Down',
|
122
|
-
109 => 'PageDown',
|
123
|
-
110 => 'Insert',
|
124
|
-
111 => 'Delete',
|
125
|
-
112 => 'Macro',
|
126
|
-
113 => 'Mute',
|
127
|
-
114 => 'VolumeDown',
|
128
|
-
115 => 'VolumeUp',
|
129
|
-
116 => 'Power',
|
130
|
-
117 => 'KPEqual',
|
131
|
-
118 => 'KPPlusMinus',
|
132
|
-
119 => 'Pause',
|
133
|
-
121 => 'KPComma',
|
134
|
-
122 => 'Hanguel',
|
135
|
-
123 => 'Hanja',
|
136
|
-
124 => 'Yen',
|
137
|
-
125 => 'LeftMeta',
|
138
|
-
126 => 'RightMeta',
|
139
|
-
127 => 'Compose',
|
140
|
-
128 => 'Stop',
|
141
|
-
129 => 'Again',
|
142
|
-
130 => 'Props',
|
143
|
-
131 => 'Undo',
|
144
|
-
132 => 'Front',
|
145
|
-
133 => 'Copy',
|
146
|
-
134 => 'Open',
|
147
|
-
135 => 'Paste',
|
148
|
-
136 => 'Find',
|
149
|
-
137 => 'Cut',
|
150
|
-
138 => 'Help',
|
151
|
-
139 => 'Menu',
|
152
|
-
140 => 'Calc',
|
153
|
-
141 => 'Setup',
|
154
|
-
142 => 'Sleep',
|
155
|
-
143 => 'WakeUp',
|
156
|
-
144 => 'File',
|
157
|
-
145 => 'SendFile',
|
158
|
-
146 => 'DeleteFile',
|
159
|
-
147 => 'X-fer',
|
160
|
-
148 => 'Prog1',
|
161
|
-
149 => 'Prog2',
|
162
|
-
150 => 'WWW',
|
163
|
-
151 => 'MSDOS',
|
164
|
-
152 => 'Coffee',
|
165
|
-
153 => 'Direction',
|
166
|
-
154 => 'CycleWindows',
|
167
|
-
155 => 'Mail',
|
168
|
-
156 => 'Bookmarks',
|
169
|
-
157 => 'Computer',
|
170
|
-
158 => 'Back',
|
171
|
-
159 => 'Forward',
|
172
|
-
160 => 'CloseCD',
|
173
|
-
161 => 'EjectCD',
|
174
|
-
162 => 'EjectCloseCD',
|
175
|
-
163 => 'NextSong',
|
176
|
-
164 => 'PlayPause',
|
177
|
-
165 => 'PreviousSong',
|
178
|
-
166 => 'StopCD',
|
179
|
-
167 => 'Record',
|
180
|
-
168 => 'Rewind',
|
181
|
-
169 => 'Phone',
|
182
|
-
170 => 'ISOKey',
|
183
|
-
171 => 'Config',
|
184
|
-
172 => 'HomePage',
|
185
|
-
173 => 'Refresh',
|
186
|
-
174 => 'Exit',
|
187
|
-
175 => 'Move',
|
188
|
-
176 => 'Edit',
|
189
|
-
177 => 'ScrollUp',
|
190
|
-
178 => 'ScrollDown',
|
191
|
-
179 => 'KPLeftParenthesis',
|
192
|
-
180 => 'KPRightParenthesis',
|
193
|
-
183 => 'F13',
|
194
|
-
184 => 'F14',
|
195
|
-
185 => 'F15',
|
196
|
-
186 => 'F16',
|
197
|
-
187 => 'F17',
|
198
|
-
188 => 'F18',
|
199
|
-
189 => 'F19',
|
200
|
-
190 => 'F20',
|
201
|
-
191 => 'F21',
|
202
|
-
192 => 'F22',
|
203
|
-
193 => 'F23',
|
204
|
-
194 => 'F24',
|
205
|
-
200 => 'PlayCD',
|
206
|
-
201 => 'PauseCD',
|
207
|
-
202 => 'Prog3',
|
208
|
-
203 => 'Prog4',
|
209
|
-
205 => 'Suspend',
|
210
|
-
206 => 'Close',
|
211
|
-
207 => 'Play',
|
212
|
-
208 => 'Fast Forward',
|
213
|
-
209 => 'Bass Boost',
|
214
|
-
210 => 'Print',
|
215
|
-
211 => 'HP',
|
216
|
-
212 => 'Camera',
|
217
|
-
213 => 'Sound',
|
218
|
-
214 => 'Question',
|
219
|
-
215 => 'Email',
|
220
|
-
216 => 'Chat',
|
221
|
-
217 => 'Search',
|
222
|
-
218 => 'Connect',
|
223
|
-
219 => 'Finance',
|
224
|
-
220 => 'Sport',
|
225
|
-
221 => 'Shop',
|
226
|
-
222 => 'Alternate Erase',
|
227
|
-
223 => 'Cancel',
|
228
|
-
224 => 'Brightness down',
|
229
|
-
225 => 'Brightness up',
|
230
|
-
226 => 'Media',
|
231
|
-
240 => 'Unknown',
|
232
|
-
256 => 'Btn0',
|
233
|
-
257 => 'Btn1',
|
234
|
-
258 => 'Btn2',
|
235
|
-
259 => 'Btn3',
|
236
|
-
260 => 'Btn4',
|
237
|
-
261 => 'Btn5',
|
238
|
-
262 => 'Btn6',
|
239
|
-
263 => 'Btn7',
|
240
|
-
264 => 'Btn8',
|
241
|
-
265 => 'Btn9',
|
242
|
-
272 => 'LeftBtn',
|
243
|
-
273 => 'RightBtn',
|
244
|
-
274 => 'MiddleBtn',
|
245
|
-
275 => 'SideBtn',
|
246
|
-
276 => 'ExtraBtn',
|
247
|
-
277 => 'ForwardBtn',
|
248
|
-
278 => 'BackBtn',
|
249
|
-
279 => 'TaskBtn',
|
250
|
-
288 => 'Trigger',
|
251
|
-
289 => 'ThumbBtn',
|
252
|
-
290 => 'ThumbBtn2',
|
253
|
-
291 => 'TopBtn',
|
254
|
-
292 => 'TopBtn2',
|
255
|
-
293 => 'PinkieBtn',
|
256
|
-
294 => 'BaseBtn',
|
257
|
-
295 => 'BaseBtn2',
|
258
|
-
296 => 'BaseBtn3',
|
259
|
-
297 => 'BaseBtn4',
|
260
|
-
298 => 'BaseBtn5',
|
261
|
-
299 => 'BaseBtn6',
|
262
|
-
303 => 'BtnDead',
|
263
|
-
304 => 'BtnA',
|
264
|
-
305 => 'BtnB',
|
265
|
-
306 => 'BtnC',
|
266
|
-
307 => 'BtnX',
|
267
|
-
308 => 'BtnY',
|
268
|
-
309 => 'BtnZ',
|
269
|
-
310 => 'BtnTL',
|
270
|
-
311 => 'BtnTR',
|
271
|
-
312 => 'BtnTL2',
|
272
|
-
313 => 'BtnTR2',
|
273
|
-
314 => 'BtnSelect',
|
274
|
-
315 => 'BtnStart',
|
275
|
-
316 => 'BtnMode',
|
276
|
-
317 => 'BtnThumbL',
|
277
|
-
318 => 'BtnThumbR',
|
278
|
-
320 => 'ToolPen',
|
279
|
-
321 => 'ToolRubber',
|
280
|
-
322 => 'ToolBrush',
|
281
|
-
323 => 'ToolPencil',
|
282
|
-
324 => 'ToolAirbrush',
|
283
|
-
325 => 'ToolFinger',
|
284
|
-
326 => 'ToolMouse',
|
285
|
-
327 => 'ToolLens',
|
286
|
-
330 => 'Touch',
|
287
|
-
331 => 'Stylus',
|
288
|
-
332 => 'Stylus2',
|
289
|
-
333 => 'Tool Doubletap',
|
290
|
-
334 => 'Tool Tripletap',
|
291
|
-
336 => 'WheelBtn',
|
292
|
-
337 => 'Gear up',
|
293
|
-
352 => 'Ok',
|
294
|
-
353 => 'Select',
|
295
|
-
354 => 'Goto',
|
296
|
-
355 => 'Clear',
|
297
|
-
356 => 'Power2',
|
298
|
-
357 => 'Option',
|
299
|
-
358 => 'Info',
|
300
|
-
359 => 'Time',
|
301
|
-
360 => 'Vendor',
|
302
|
-
361 => 'Archive',
|
303
|
-
362 => 'Program',
|
304
|
-
363 => 'Channel',
|
305
|
-
364 => 'Favorites',
|
306
|
-
365 => 'EPG',
|
307
|
-
366 => 'PVR',
|
308
|
-
367 => 'MHP',
|
309
|
-
368 => 'Language',
|
310
|
-
369 => 'Title',
|
311
|
-
370 => 'Subtitle',
|
312
|
-
371 => 'Angle',
|
313
|
-
372 => 'Zoom',
|
314
|
-
373 => 'Mode',
|
315
|
-
374 => 'Keyboard',
|
316
|
-
375 => 'Screen',
|
317
|
-
376 => 'PC',
|
318
|
-
377 => 'TV',
|
319
|
-
378 => 'TV2',
|
320
|
-
379 => 'VCR',
|
321
|
-
380 => 'VCR2',
|
322
|
-
381 => 'Sat',
|
323
|
-
382 => 'Sat2',
|
324
|
-
383 => 'CD',
|
325
|
-
384 => 'Tape',
|
326
|
-
385 => 'Radio',
|
327
|
-
386 => 'Tuner',
|
328
|
-
387 => 'Player',
|
329
|
-
388 => 'Text',
|
330
|
-
389 => 'DVD',
|
331
|
-
390 => 'Aux',
|
332
|
-
391 => 'MP3',
|
333
|
-
392 => 'Audio',
|
334
|
-
393 => 'Video',
|
335
|
-
394 => 'Directory',
|
336
|
-
395 => 'List',
|
337
|
-
396 => 'Memo',
|
338
|
-
397 => 'Calendar',
|
339
|
-
398 => 'Red',
|
340
|
-
399 => 'Green',
|
341
|
-
400 => 'Yellow',
|
342
|
-
401 => 'Blue',
|
343
|
-
402 => 'ChannelUp',
|
344
|
-
403 => 'ChannelDown',
|
345
|
-
404 => 'First',
|
346
|
-
405 => 'Last',
|
347
|
-
406 => 'AB',
|
348
|
-
407 => 'Next',
|
349
|
-
408 => 'Restart',
|
350
|
-
409 => 'Slow',
|
351
|
-
410 => 'Shuffle',
|
352
|
-
411 => 'Break',
|
353
|
-
412 => 'Previous',
|
354
|
-
413 => 'Digits',
|
355
|
-
414 => 'TEEN',
|
356
|
-
415 => 'TWEN',
|
357
|
-
448 => 'Delete EOL',
|
358
|
-
449 => 'Delete EOS',
|
359
|
-
450 => 'Insert line',
|
360
|
-
451 => 'Delete line',
|
361
|
-
}
|
362
|
-
|
363
|
-
# type = Relative
|
364
|
-
CODES[2] = {
|
365
|
-
0 => 'X',
|
366
|
-
1 => 'Y',
|
367
|
-
2 => 'Z',
|
368
|
-
6 => 'HWheel',
|
369
|
-
7 => 'Dial',
|
370
|
-
8 => 'Wheel',
|
371
|
-
9 => 'Misc',
|
372
|
-
}
|
373
|
-
|
374
|
-
# type = Absolute
|
375
|
-
CODES[3] = {
|
376
|
-
0 => 'X',
|
377
|
-
1 => 'Y',
|
378
|
-
2 => 'Z',
|
379
|
-
3 => 'Rx',
|
380
|
-
4 => 'Ry',
|
381
|
-
5 => 'Rz',
|
382
|
-
6 => 'Throttle',
|
383
|
-
7 => 'Rudder',
|
384
|
-
8 => 'Wheel',
|
385
|
-
9 => 'Gas',
|
386
|
-
10 => 'Brake',
|
387
|
-
16 => 'Hat0X',
|
388
|
-
17 => 'Hat0Y',
|
389
|
-
18 => 'Hat1X',
|
390
|
-
19 => 'Hat1Y',
|
391
|
-
20 => 'Hat2X',
|
392
|
-
21 => 'Hat2Y',
|
393
|
-
22 => 'Hat3X',
|
394
|
-
23 => 'Hat 3Y',
|
395
|
-
24 => 'Pressure',
|
396
|
-
25 => 'Distance',
|
397
|
-
26 => 'XTilt',
|
398
|
-
27 => 'YTilt',
|
399
|
-
28 => 'Tool Width',
|
400
|
-
32 => 'Volume',
|
401
|
-
40 => 'Misc',
|
402
|
-
}
|
403
|
-
|
404
|
-
# type = Misc
|
405
|
-
CODES[4] = {
|
406
|
-
0 => 'Serial',
|
407
|
-
1 => 'Pulseled',
|
408
|
-
2 => 'Gesture',
|
409
|
-
3 => 'RawData',
|
410
|
-
4 => 'ScanCode',
|
411
|
-
}
|
412
|
-
|
413
|
-
# type = LED
|
414
|
-
CODES[17] = {
|
415
|
-
0 => 'NumLock',
|
416
|
-
1 => 'CapsLock',
|
417
|
-
2 => 'ScrollLock',
|
418
|
-
3 => 'Compose',
|
419
|
-
4 => 'Kana',
|
420
|
-
5 => 'Sleep',
|
421
|
-
6 => 'Suspend',
|
422
|
-
7 => 'Mute',
|
423
|
-
8 => 'Misc',
|
424
|
-
}
|
425
|
-
|
426
|
-
# type = Sound
|
427
|
-
CODES[18] = {
|
428
|
-
0 => 'Click',
|
429
|
-
1 => 'Bell',
|
430
|
-
2 => 'Tone',
|
431
|
-
}
|
432
|
-
|
433
|
-
# type = Repeat
|
434
|
-
CODES[20] = {
|
435
|
-
0 => 'Delay',
|
436
|
-
1 => 'Period',
|
437
|
-
}
|
438
|
-
end
|