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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 022a90cca27c54f809efb688194bb1acea19ce8b
4
- data.tar.gz: 117569fefbe5f2b6ca5d179912029c1a8321ad79
3
+ metadata.gz: 5de3bca0c1dcc7586fdd67e8b54377fed9fb8c63
4
+ data.tar.gz: c72977403f7fd253030b96f570b094c6dbd6042a
5
5
  SHA512:
6
- metadata.gz: 7bb21fbaf33c2fe1a9f1ca81aa0e135020f4a23eec58ebb301c7b1b9cd4d63d69318777348de46e54e979bf771d8b98a0aee80dbe47507c3b2a0d775a900cef1
7
- data.tar.gz: 03b28f38f84e443f8236cedf88c3b465c0162c3df49bd5c8cc0fac61bd1d397f3ae26fdee3ab5d335875f8bf51ce3807ea1b7e97a642602e5c6e932111137d9c
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,8 @@
1
+ require 'rf_rgb'
2
+
3
+ # MY keyboard setup
4
+ RfRgb::Keyboard.run_and_release do |keyboard|
5
+ keyboard.effect_pressed_key '00ffff'
6
+ keyboard.actuation_height = RfRgb::Protocol::HEIGHT_15
7
+ keyboard.save
8
+ 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
@@ -4,6 +4,8 @@ require 'rf_rgb/protocol'
4
4
  require 'rf_rgb/version'
5
5
 
6
6
  module RfRgb
7
+ class VerificationError < StandardError; end
8
+
7
9
  # 0 is silent, 4 is spewy.
8
10
  LIBUSB_DEBUG = ENV['LIBUSB_DEBUG'] || 3
9
11
  end
@@ -2,7 +2,8 @@ module RfRgb
2
2
  class Keyboard
3
3
  VENDOR_ID = 0x0853
4
4
  PRODUCT_ID = 0x013a
5
- ENDPOINT = 0x04
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
- send_message RfRgb::Protocol.save_changes
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
- send_message RfRgb::Protocol.disable_effects
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
- send_message call
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
- send_message RfRgb::Protocol.rainbow_wave
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
- send_message RfRgb::Protocol.pressed_key_lighting(rgb_hex)
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
- send_message RfRgb::Protocol.pressed_key_lighting_with_backlight(rgb_hex)
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
- send_message RfRgb::Protocol.shooting_star(rgb_hex, interval)
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
- send_message RfRgb::Protocol.demo_mode
86
+ send_and_verify RfRgb::Protocol.demo_mode
85
87
  end
86
88
 
87
89
  def effect_random_lights
88
90
  reset_effect
89
- send_message RfRgb::Protocol.random_lights
91
+ send_and_verify RfRgb::Protocol.random_lights
90
92
  end
91
93
 
92
94
  def effect_color_bar
93
95
  reset_effect
94
- send_message RfRgb::Protocol.color_bar
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
- send_message RfRgb::Protocol.key_lock
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
- send_message RfRgb::Protocol.key_unlock
113
+ send_and_verify RfRgb::Protocol.key_unlock
105
114
  end
106
115
 
107
116
  def brightness=(new_brightness)
108
- send_message RfRgb::Protocol.change_brightness(new_brightness)
117
+ send_and_verify RfRgb::Protocol.change_brightness(new_brightness)
109
118
  end
110
119
 
111
120
  def actuation_height=(new_height)
112
- send_message RfRgb::Protocol.change_actuation_height_all(new_height)
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
- send_message RfRgb::Protocol.swap_caps_ctrl
134
+ send_and_verify RfRgb::Protocol.swap_caps_ctrl
117
135
  end
118
136
 
119
137
  def unswap_caps_ctrl
120
- send_message RfRgb::Protocol.unswap_caps_ctrl
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
- send_message RfRgb::Protocol.reset_effect
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: 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
@@ -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
 
@@ -1,3 +1,3 @@
1
1
  module RfRgb
2
- VERSION = '0.8.5'.freeze
2
+ VERSION = '0.9.0'.freeze
3
3
  end
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.8.5
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-20 00:00:00.000000000 Z
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