rf_rgb 0.8.5 → 0.9.0
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.
- checksums.yaml +4 -4
- data/README.md +0 -4
- data/examples/lock_keys_all.rb +121 -0
- data/examples/mpd_keyboard.rb +8 -0
- data/examples/set_actuation_heights_all.rb +119 -0
- data/lib/rf_rgb.rb +2 -0
- data/lib/rf_rgb/keyboard.rb +68 -19
- data/lib/rf_rgb/protocol.rb +36 -1
- data/lib/rf_rgb/version.rb +1 -1
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5de3bca0c1dcc7586fdd67e8b54377fed9fb8c63
|
4
|
+
data.tar.gz: c72977403f7fd253030b96f570b094c6dbd6042a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9e00beabab63e5b13041e7f6e70d9e5d76d1096703f2ea98def0b6ee8e585d369665a370a8bc55e2f266fc0edaf08dfe9b0bd2ef064425d0cf7c6e8fc7a0fcb9
|
7
|
+
data.tar.gz: d306229e143d44e97dded2de0e73213a51cd6dbd919e92b07d692abb7f0a0baeb9726ec9e81f75e9cced3e5ddd2f1dc257c302a4495e77f3b5fbf32fe0dd20f1
|
data/README.md
CHANGED
@@ -85,10 +85,6 @@ and prevent `usbhid` from taking the device over. If you're in that boat, try th
|
|
85
85
|
|
86
86
|
## Protocol Notes
|
87
87
|
|
88
|
-
When commands are sent from the host to the OUT endpoint, there is a response that can
|
89
|
-
be read from IN endpoint #3, but this module ignores these responses completely at
|
90
|
-
time of writing.
|
91
|
-
|
92
88
|
Some effects have a User 1-3 setting in the Windows UI. It's not clear what these
|
93
89
|
are actually for, and are mostly ignored in this module for now.
|
94
90
|
|
@@ -0,0 +1,121 @@
|
|
1
|
+
require 'rf_rgb'
|
2
|
+
|
3
|
+
# Valid values are true and false.
|
4
|
+
# This hash can also accept a :default key, a la colors
|
5
|
+
keys = {
|
6
|
+
a: true,
|
7
|
+
actuation: true,
|
8
|
+
apostrophe: true,
|
9
|
+
b: true,
|
10
|
+
backslash: true,
|
11
|
+
backspace: true,
|
12
|
+
c: true,
|
13
|
+
capslock: true,
|
14
|
+
comma: true,
|
15
|
+
d: true,
|
16
|
+
del: true,
|
17
|
+
down: true,
|
18
|
+
e: true,
|
19
|
+
eight: true,
|
20
|
+
end: true,
|
21
|
+
enter: true,
|
22
|
+
equals: true,
|
23
|
+
esc: true,
|
24
|
+
f: true,
|
25
|
+
f1: true,
|
26
|
+
f10: true,
|
27
|
+
f11: true,
|
28
|
+
f12: true,
|
29
|
+
f2: true,
|
30
|
+
f3: true,
|
31
|
+
f4: true,
|
32
|
+
f5: true,
|
33
|
+
f6: true,
|
34
|
+
f7: true,
|
35
|
+
f8: true,
|
36
|
+
f9: true,
|
37
|
+
five: true,
|
38
|
+
fn: true,
|
39
|
+
four: true,
|
40
|
+
g: true,
|
41
|
+
grave: true,
|
42
|
+
h: true,
|
43
|
+
home: true,
|
44
|
+
hyphen: true,
|
45
|
+
i: true,
|
46
|
+
ins: true,
|
47
|
+
j: true,
|
48
|
+
k: true,
|
49
|
+
l: true,
|
50
|
+
lalt: true,
|
51
|
+
lbracket: true,
|
52
|
+
lctrl: true,
|
53
|
+
left: true,
|
54
|
+
lshift: true,
|
55
|
+
lwin: true,
|
56
|
+
m: true,
|
57
|
+
mute: true,
|
58
|
+
n: true,
|
59
|
+
nine: true,
|
60
|
+
np_div: true,
|
61
|
+
np_dot: true,
|
62
|
+
np_eight: true,
|
63
|
+
np_enter: true,
|
64
|
+
np_five: true,
|
65
|
+
np_four: true,
|
66
|
+
np_minus: true,
|
67
|
+
np_mult: true,
|
68
|
+
np_nine: true,
|
69
|
+
np_one: true,
|
70
|
+
np_plus: true,
|
71
|
+
np_seven: true,
|
72
|
+
np_six: true,
|
73
|
+
np_three: true,
|
74
|
+
np_two: true,
|
75
|
+
np_zero: true,
|
76
|
+
numlk: true,
|
77
|
+
o: true,
|
78
|
+
one: true,
|
79
|
+
p: true,
|
80
|
+
pause: true,
|
81
|
+
period: true,
|
82
|
+
pgdn: true,
|
83
|
+
pgup: true,
|
84
|
+
prtsc: true,
|
85
|
+
q: true,
|
86
|
+
r: true,
|
87
|
+
ralt: true,
|
88
|
+
rbracket: true,
|
89
|
+
rctrl: true,
|
90
|
+
right: true,
|
91
|
+
rshift: true,
|
92
|
+
rwin: true,
|
93
|
+
s: true,
|
94
|
+
scrlk: true,
|
95
|
+
semicolon: true,
|
96
|
+
seven: true,
|
97
|
+
six: true,
|
98
|
+
slash: true,
|
99
|
+
space: true,
|
100
|
+
t: true,
|
101
|
+
tab: true,
|
102
|
+
three: true,
|
103
|
+
two: true,
|
104
|
+
u: true,
|
105
|
+
up: true,
|
106
|
+
v: true,
|
107
|
+
voldown: true,
|
108
|
+
volup: true,
|
109
|
+
w: true,
|
110
|
+
x: true,
|
111
|
+
y: true,
|
112
|
+
z: true,
|
113
|
+
zero: true
|
114
|
+
}
|
115
|
+
|
116
|
+
RfRgb::Keyboard.run_and_release do |keyboard|
|
117
|
+
keyboard.locked_keys = keys
|
118
|
+
# keyboard.lock_keys
|
119
|
+
# keyboard.unlock_keys
|
120
|
+
keyboard.save
|
121
|
+
end
|
@@ -0,0 +1,119 @@
|
|
1
|
+
require 'rf_rgb'
|
2
|
+
|
3
|
+
# Valid values are 15, 22, and 30.
|
4
|
+
# This hash can also accept a :default key, a la colors
|
5
|
+
heights = {
|
6
|
+
a: 30,
|
7
|
+
actuation: 30,
|
8
|
+
apostrophe: 30,
|
9
|
+
b: 30,
|
10
|
+
backslash: 30,
|
11
|
+
backspace: 30,
|
12
|
+
c: 30,
|
13
|
+
capslock: 30,
|
14
|
+
comma: 30,
|
15
|
+
d: 30,
|
16
|
+
del: 30,
|
17
|
+
down: 30,
|
18
|
+
e: 30,
|
19
|
+
eight: 30,
|
20
|
+
end: 30,
|
21
|
+
enter: 30,
|
22
|
+
equals: 30,
|
23
|
+
esc: 30,
|
24
|
+
f: 30,
|
25
|
+
f1: 30,
|
26
|
+
f10: 30,
|
27
|
+
f11: 30,
|
28
|
+
f12: 30,
|
29
|
+
f2: 30,
|
30
|
+
f3: 30,
|
31
|
+
f4: 30,
|
32
|
+
f5: 30,
|
33
|
+
f6: 30,
|
34
|
+
f7: 30,
|
35
|
+
f8: 30,
|
36
|
+
f9: 30,
|
37
|
+
five: 30,
|
38
|
+
fn: 30,
|
39
|
+
four: 30,
|
40
|
+
g: 30,
|
41
|
+
grave: 30,
|
42
|
+
h: 30,
|
43
|
+
home: 30,
|
44
|
+
hyphen: 30,
|
45
|
+
i: 30,
|
46
|
+
ins: 30,
|
47
|
+
j: 30,
|
48
|
+
k: 30,
|
49
|
+
l: 30,
|
50
|
+
lalt: 30,
|
51
|
+
lbracket: 30,
|
52
|
+
lctrl: 30,
|
53
|
+
left: 30,
|
54
|
+
lshift: 30,
|
55
|
+
lwin: 30,
|
56
|
+
m: 30,
|
57
|
+
mute: 30,
|
58
|
+
n: 30,
|
59
|
+
nine: 30,
|
60
|
+
np_div: 30,
|
61
|
+
np_dot: 30,
|
62
|
+
np_eight: 30,
|
63
|
+
np_enter: 30,
|
64
|
+
np_five: 30,
|
65
|
+
np_four: 30,
|
66
|
+
np_minus: 30,
|
67
|
+
np_mult: 30,
|
68
|
+
np_nine: 30,
|
69
|
+
np_one: 30,
|
70
|
+
np_plus: 30,
|
71
|
+
np_seven: 30,
|
72
|
+
np_six: 30,
|
73
|
+
np_three: 30,
|
74
|
+
np_two: 30,
|
75
|
+
np_zero: 30,
|
76
|
+
numlk: 30,
|
77
|
+
o: 30,
|
78
|
+
one: 30,
|
79
|
+
p: 30,
|
80
|
+
pause: 30,
|
81
|
+
period: 30,
|
82
|
+
pgdn: 30,
|
83
|
+
pgup: 30,
|
84
|
+
prtsc: 30,
|
85
|
+
q: 30,
|
86
|
+
r: 30,
|
87
|
+
ralt: 30,
|
88
|
+
rbracket: 30,
|
89
|
+
rctrl: 30,
|
90
|
+
right: 30,
|
91
|
+
rshift: 30,
|
92
|
+
rwin: 30,
|
93
|
+
s: 30,
|
94
|
+
scrlk: 30,
|
95
|
+
semicolon: 30,
|
96
|
+
seven: 30,
|
97
|
+
six: 30,
|
98
|
+
slash: 30,
|
99
|
+
space: 30,
|
100
|
+
t: 30,
|
101
|
+
tab: 30,
|
102
|
+
three: 30,
|
103
|
+
two: 30,
|
104
|
+
u: 30,
|
105
|
+
up: 30,
|
106
|
+
v: 30,
|
107
|
+
voldown: 30,
|
108
|
+
volup: 30,
|
109
|
+
w: 30,
|
110
|
+
x: 30,
|
111
|
+
y: 30,
|
112
|
+
z: 30,
|
113
|
+
zero: 30
|
114
|
+
}
|
115
|
+
|
116
|
+
RfRgb::Keyboard.run_and_release do |keyboard|
|
117
|
+
keyboard.actuation_height = heights
|
118
|
+
keyboard.save
|
119
|
+
end
|
data/lib/rf_rgb.rb
CHANGED
data/lib/rf_rgb/keyboard.rb
CHANGED
@@ -2,7 +2,8 @@ module RfRgb
|
|
2
2
|
class Keyboard
|
3
3
|
VENDOR_ID = 0x0853
|
4
4
|
PRODUCT_ID = 0x013a
|
5
|
-
|
5
|
+
ENDPOINT_OUT = 0x04
|
6
|
+
ENDPOINT_IN = 0x83
|
6
7
|
INTERFACE = 0
|
7
8
|
|
8
9
|
attr_reader :device, :handle
|
@@ -33,7 +34,7 @@ module RfRgb
|
|
33
34
|
end
|
34
35
|
|
35
36
|
def save
|
36
|
-
|
37
|
+
send_and_verify RfRgb::Protocol.save_changes
|
37
38
|
end
|
38
39
|
|
39
40
|
def release_to_os
|
@@ -44,7 +45,7 @@ module RfRgb
|
|
44
45
|
|
45
46
|
def disable_effect
|
46
47
|
reset_effect
|
47
|
-
|
48
|
+
send_and_verify RfRgb::Protocol.disable_effects
|
48
49
|
end
|
49
50
|
|
50
51
|
def colors=(new_colors)
|
@@ -55,69 +56,86 @@ module RfRgb
|
|
55
56
|
calls = RfRgb::Protocol.user_specified_colors(new_colors)
|
56
57
|
reset_effect
|
57
58
|
calls.each do |call|
|
58
|
-
|
59
|
+
send_and_verify call
|
59
60
|
end
|
60
61
|
end
|
62
|
+
alias_method :color=, :colors=
|
61
63
|
|
62
64
|
def effect_rainbow_wave
|
63
65
|
reset_effect
|
64
|
-
|
66
|
+
send_and_verify RfRgb::Protocol.rainbow_wave
|
65
67
|
end
|
66
68
|
|
67
69
|
def effect_pressed_key(rgb_hex)
|
68
70
|
reset_effect
|
69
|
-
|
71
|
+
send_and_verify RfRgb::Protocol.pressed_key_lighting(rgb_hex)
|
70
72
|
end
|
71
73
|
|
72
74
|
def effect_pressed_key_with_backlight(rgb_hex)
|
73
75
|
reset_effect
|
74
|
-
|
76
|
+
send_and_verify RfRgb::Protocol.pressed_key_lighting_with_backlight(rgb_hex)
|
75
77
|
end
|
76
78
|
|
77
79
|
def effect_shooting_star(rgb_hex, interval)
|
78
80
|
reset_effect
|
79
|
-
|
81
|
+
send_and_verify RfRgb::Protocol.shooting_star(rgb_hex, interval)
|
80
82
|
end
|
81
83
|
|
82
84
|
def effect_demo_mode
|
83
85
|
reset_effect
|
84
|
-
|
86
|
+
send_and_verify RfRgb::Protocol.demo_mode
|
85
87
|
end
|
86
88
|
|
87
89
|
def effect_random_lights
|
88
90
|
reset_effect
|
89
|
-
|
91
|
+
send_and_verify RfRgb::Protocol.random_lights
|
90
92
|
end
|
91
93
|
|
92
94
|
def effect_color_bar
|
93
95
|
reset_effect
|
94
|
-
|
96
|
+
send_and_verify RfRgb::Protocol.color_bar
|
95
97
|
end
|
96
98
|
|
97
99
|
# There's more to key locking than just this, but the way it's done is odd
|
98
100
|
# and is among the lowest of priorities on this project.
|
99
101
|
def lock_keys
|
100
|
-
|
102
|
+
send_and_verify RfRgb::Protocol.key_lock
|
103
|
+
end
|
104
|
+
|
105
|
+
def locked_keys=(keys)
|
106
|
+
calls = RfRgb::Protocol.user_specified_key_locks(keys)
|
107
|
+
calls.each do |call|
|
108
|
+
send_and_verify call
|
109
|
+
end
|
101
110
|
end
|
102
111
|
|
103
112
|
def unlock_keys
|
104
|
-
|
113
|
+
send_and_verify RfRgb::Protocol.key_unlock
|
105
114
|
end
|
106
115
|
|
107
116
|
def brightness=(new_brightness)
|
108
|
-
|
117
|
+
send_and_verify RfRgb::Protocol.change_brightness(new_brightness)
|
109
118
|
end
|
110
119
|
|
111
120
|
def actuation_height=(new_height)
|
112
|
-
|
121
|
+
if new_height.is_a? String
|
122
|
+
send_and_verify RfRgb::Protocol.change_actuation_height_all(new_height)
|
123
|
+
else
|
124
|
+
calls = RfRgb::Protocol.user_specified_actuation_heights(new_height)
|
125
|
+
reset_effect
|
126
|
+
calls.each do |call|
|
127
|
+
send_and_verify call
|
128
|
+
end
|
129
|
+
end
|
113
130
|
end
|
131
|
+
alias_method :actuation_heights=, :actuation_height=
|
114
132
|
|
115
133
|
def swap_caps_ctrl
|
116
|
-
|
134
|
+
send_and_verify RfRgb::Protocol.swap_caps_ctrl
|
117
135
|
end
|
118
136
|
|
119
137
|
def unswap_caps_ctrl
|
120
|
-
|
138
|
+
send_and_verify RfRgb::Protocol.unswap_caps_ctrl
|
121
139
|
end
|
122
140
|
|
123
141
|
private
|
@@ -125,7 +143,7 @@ module RfRgb
|
|
125
143
|
# I don't know what this actually does, but the Windows software
|
126
144
|
# sends this message before any effect change.
|
127
145
|
def reset_effect
|
128
|
-
|
146
|
+
send_and_verify RfRgb::Protocol.reset_effect
|
129
147
|
end
|
130
148
|
|
131
149
|
def initialize_device(device)
|
@@ -139,10 +157,41 @@ module RfRgb
|
|
139
157
|
|
140
158
|
def send_message(data)
|
141
159
|
@handle.interrupt_transfer(
|
142
|
-
endpoint:
|
160
|
+
endpoint: ENDPOINT_OUT,
|
143
161
|
dataOut: data,
|
144
162
|
timeout: 10_000
|
145
163
|
)
|
146
164
|
end
|
165
|
+
|
166
|
+
def receive_message
|
167
|
+
@handle.interrupt_transfer(
|
168
|
+
endpoint: ENDPOINT_IN,
|
169
|
+
dataIn: 64,
|
170
|
+
timeout: 10_000
|
171
|
+
)
|
172
|
+
end
|
173
|
+
|
174
|
+
def send_and_verify(data, retries = 2)
|
175
|
+
retry_count = 0
|
176
|
+
begin
|
177
|
+
send_message data
|
178
|
+
ack = receive_message
|
179
|
+
verify_message!(data, ack)
|
180
|
+
rescue RfRgb::VerificationError
|
181
|
+
retry_count += 1
|
182
|
+
retry if retry_count <= retries
|
183
|
+
end
|
184
|
+
end
|
185
|
+
|
186
|
+
# The keyboard acknowledges each packet sent with a response of \x55\x55\x<third byte of sent packet>
|
187
|
+
def verify_message(data, ack)
|
188
|
+
ack.bytes[0..2] == "\x55\x55#{data[2]}".bytes
|
189
|
+
end
|
190
|
+
|
191
|
+
def verify_message!(data, ack)
|
192
|
+
unless verify_message(data, ack)
|
193
|
+
raise RfRgb::VerificationError, "Ack[#{ack.bytes}] did not match data[#{data.bytes}]!"
|
194
|
+
end
|
195
|
+
end
|
147
196
|
end
|
148
197
|
end
|
data/lib/rf_rgb/protocol.rb
CHANGED
@@ -45,7 +45,42 @@ module RfRgb
|
|
45
45
|
"\xaa\xaa\x40\x84\x3a#{user}#{m[:rshift]}#{m[:lctrl]}\x00\x00\x00#{m[:lalt]}#{m[:space]}#{m[:ralt]}\x00\x00\x00#{m[:rctrl]}\x00\x00\x00\x00\x00\x00\x00\x00\x00#{m[:lwin]}#{m[:rwin]}#{m[:fn]}#{m[:mute]}#{m[:voldown]}#{m[:volup]}#{m[:actuation]}#{m[:ins]}\x00".force_encoding(Encoding::BINARY).freeze,
|
46
46
|
"\xaa\xaa\x40\x85\x3a#{user}#{m[:del]}\x00\x00\x00\x00\x00\x00#{m[:left]}#{m[:home]}#{m[:end]}\x00\x00\x00#{m[:up]}#{m[:down]}#{m[:pgup]}#{m[:pgdn]}\x00\x00\x00\x00\x00\x00#{m[:right]}#{m[:numlk]}#{m[:np_seven]}#{m[:np_four]}#{m[:np_one]}\x00\x00\x00\x00".force_encoding(Encoding::BINARY).freeze,
|
47
47
|
"\xaa\xaa\x40\x86\x3a#{user}#{m[:np_div]}#{m[:np_eight]}#{m[:np_five]}#{m[:np_two]}#{m[:np_zero]}#{m[:np_mult]}#{m[:np_nine]}#{m[:np_six]}#{m[:np_three]}#{m[:np_dot]}#{m[:np_minus]}#{m[:np_plus]}\x00\x00\x00#{m[:np_enter]}\x00\x00\x00#{m[:esc]}\x00\x00\x00#{m[:f1]}#{m[:f2]}\x00".force_encoding(Encoding::BINARY).freeze,
|
48
|
-
"\xaa\xaa\x40\xc7\x2b#{user}#{m[:f3]}#{m[:f4]}#{m[:f5]}#{m[:f6]}#{m[:f7]}#{m[:f8]}#{m[:f9]}#{m[:f10]}#{m[:f11]}#{m[:f12]}#{m[:prtsc]}#{m[:scrlk]}#{m[:pause]}\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00".force_encoding(Encoding::BINARY).freeze
|
48
|
+
"\xaa\xaa\x40\xc7\x2b#{user}#{m[:f3]}#{m[:f4]}#{m[:f5]}#{m[:f6]}#{m[:f7]}#{m[:f8]}#{m[:f9]}#{m[:f10]}#{m[:f11]}#{m[:f12]}#{m[:prtsc]}#{m[:scrlk]}#{m[:pause]}\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00".force_encoding(Encoding::BINARY).freeze,
|
49
|
+
"\xaa\xaa\x44\x00\x0d#{user}".force_encoding(Encoding::BINARY).freeze
|
50
|
+
]
|
51
|
+
end
|
52
|
+
|
53
|
+
def self.user_specified_actuation_heights(mapping)
|
54
|
+
bytes = {
|
55
|
+
'15' => HEIGHT_15,
|
56
|
+
'22' => HEIGHT_22,
|
57
|
+
'30' => HEIGHT_30
|
58
|
+
}
|
59
|
+
|
60
|
+
m = lambda { |sym| bytes[mapping[sym].to_s] || bytes[mapping[:default].to_s] || HEIGHT_15 }
|
61
|
+
|
62
|
+
[
|
63
|
+
"\xaa\xaa\x21\x41\x3b\x00#{m[:grave]}#{m[:one]}#{m[:two]}#{m[:three]}#{m[:four]}#{m[:five]}#{m[:six]}#{m[:seven]}#{m[:eight]}#{m[:nine]}#{m[:zero]}#{m[:hyphen]}#{m[:equals]}\x00#{m[:backspace]}#{m[:tab]}#{m[:q]}#{m[:w]}#{m[:e]}#{m[:r]}#{m[:t]}#{m[:y]}#{m[:u]}#{m[:i]}#{m[:o]}#{m[:p]}#{m[:lbracket]}#{m[:rbracket]}#{m[:backslash]}#{m[:capslock]}#{m[:a]}#{m[:s]}#{m[:d]}#{m[:f]}#{m[:g]}#{m[:h]}#{m[:j]}#{m[:k]}#{m[:l]}#{m[:semicolon]}#{m[:apostrophe]}\x00#{m[:enter]}#{m[:lshift]}\x00#{m[:z]}#{m[:x]}#{m[:c]}#{m[:v]}#{m[:b]}#{m[:n]}#{m[:m]}#{m[:comma]}#{m[:period]}#{m[:slash]}\x00#{m[:rshift]}#{m[:lctrl]}".force_encoding(Encoding::BINARY).freeze,
|
64
|
+
"\xaa\xaa\x21\x82\x3b\x00#{m[:lalt]}#{m[:space]}#{m[:ralt]}\x00#{m[:rctrl]}\x00\x00\x00#{m[:lwin]}#{m[:rwin]}#{m[:fn]}#{m[:mute]}#{m[:voldown]}#{m[:volup]}#{m[:actuation]}#{m[:ins]}#{m[:del]}\x00\x00#{m[:left]}#{m[:home]}#{m[:end]}\x00#{m[:up]}#{m[:down]}#{m[:pgup]}#{m[:pgdn]}\x00\x00#{m[:right]}#{m[:numlk]}#{m[:np_seven]}#{m[:np_four]}#{m[:np_one]}\x00#{m[:np_div]}#{m[:np_eight]}#{m[:np_five]}#{m[:np_two]}#{m[:np_zero]}#{m[:np_mult]}#{m[:np_nine]}#{m[:np_six]}#{m[:np_three]}#{m[:np_dot]}#{m[:np_minus]}#{m[:np_plus]}\x00#{m[:np_enter]}\x00#{m[:esc]}\x00#{m[:f1]}#{m[:f2]}#{m[:f3]}#{m[:f4]}#{m[:f5]}#{m[:f6]}".force_encoding(Encoding::BINARY).freeze,
|
65
|
+
"\xaa\xaa\x21\xc3\x0a#{m[:f7]}#{m[:f8]}#{m[:f9]}#{m[:f10]}#{m[:f11]}#{m[:f12]}#{m[:prtsc]}#{m[:scrlk]}#{m[:pause]}\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00".force_encoding(Encoding::BINARY).freeze
|
66
|
+
]
|
67
|
+
end
|
68
|
+
|
69
|
+
# TODO this doesn't seem to do anything.
|
70
|
+
def self.user_specified_key_locks(mapping)
|
71
|
+
# aa:aa:80:41:3b:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00
|
72
|
+
# aa:aa:80:82:3b:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:01:00:01:00:00:00:00:00
|
73
|
+
# aa:aa:80:c3:0a:00:01:00:00:01:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:01:00:01:00:00:00:00:00
|
74
|
+
bytes = {
|
75
|
+
true: "\x01",
|
76
|
+
false: "\x00"
|
77
|
+
}
|
78
|
+
m = lambda { |sym| bytes[mapping[sym]] || bytes[mapping[:default]] || false }
|
79
|
+
|
80
|
+
[
|
81
|
+
"\xaa\xaa\x80\x41\x3b\x00#{m[:grave]}#{m[:one]}#{m[:two]}#{m[:three]}#{m[:four]}#{m[:five]}#{m[:six]}#{m[:seven]}#{m[:eight]}#{m[:nine]}#{m[:zero]}#{m[:hyphen]}#{m[:equals]}\x00#{m[:backspace]}#{m[:tab]}#{m[:q]}#{m[:w]}#{m[:e]}#{m[:r]}#{m[:t]}#{m[:y]}#{m[:u]}#{m[:i]}#{m[:o]}#{m[:p]}#{m[:lbracket]}#{m[:rbracket]}#{m[:backslash]}#{m[:capslock]}#{m[:a]}#{m[:s]}#{m[:d]}#{m[:f]}#{m[:g]}#{m[:h]}#{m[:j]}#{m[:k]}#{m[:l]}#{m[:semicolon]}#{m[:apostrophe]}\x00#{m[:enter]}#{m[:lshift]}\x00#{m[:z]}#{m[:x]}#{m[:c]}#{m[:v]}#{m[:b]}#{m[:n]}#{m[:m]}#{m[:comma]}#{m[:period]}#{m[:slash]}\x00#{m[:rshift]}#{m[:lctrl]}".force_encoding(Encoding::BINARY).freeze,
|
82
|
+
"\xaa\xaa\x80\x82\x3b\x00#{m[:lalt]}#{m[:space]}#{m[:ralt]}\x00#{m[:rctrl]}\x00\x00\x00#{m[:lwin]}#{m[:rwin]}#{m[:fn]}#{m[:mute]}#{m[:voldown]}#{m[:volup]}#{m[:actuation]}#{m[:ins]}#{m[:del]}\x00\x00#{m[:left]}#{m[:home]}#{m[:end]}\x00#{m[:up]}#{m[:down]}#{m[:pgup]}#{m[:pgdn]}\x00\x00#{m[:right]}#{m[:numlk]}#{m[:np_seven]}#{m[:np_four]}#{m[:np_one]}\x00#{m[:np_div]}#{m[:np_eight]}#{m[:np_five]}#{m[:np_two]}#{m[:np_zero]}#{m[:np_mult]}#{m[:np_nine]}#{m[:np_six]}#{m[:np_three]}#{m[:np_dot]}#{m[:np_minus]}#{m[:np_plus]}\x00#{m[:np_enter]}\x00#{m[:esc]}\x00#{m[:f1]}#{m[:f2]}#{m[:f3]}#{m[:f4]}#{m[:f5]}#{m[:f6]}".force_encoding(Encoding::BINARY).freeze,
|
83
|
+
"\xaa\xaa\x80\xc3\x0a#{m[:f7]}#{m[:f8]}#{m[:f9]}#{m[:f10]}#{m[:f11]}#{m[:f12]}#{m[:prtsc]}#{m[:scrlk]}#{m[:pause]}\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00".force_encoding(Encoding::BINARY).freeze
|
49
84
|
]
|
50
85
|
end
|
51
86
|
|
data/lib/rf_rgb/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rf_rgb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.9.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- mpd
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-07-
|
11
|
+
date: 2017-07-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: libusb
|
@@ -84,8 +84,11 @@ files:
|
|
84
84
|
- Rakefile
|
85
85
|
- bin/console
|
86
86
|
- bin/setup
|
87
|
+
- examples/lock_keys_all.rb
|
88
|
+
- examples/mpd_keyboard.rb
|
87
89
|
- examples/readme_1.rb
|
88
90
|
- examples/readme_2.rb
|
91
|
+
- examples/set_actuation_heights_all.rb
|
89
92
|
- examples/set_colors_all.rb
|
90
93
|
- examples/set_colors_circus.rb
|
91
94
|
- examples/set_colors_complex.rb
|