rf_rgb 0.8.0 → 0.8.5

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: 5159ee522b80b0230b43725004ea8f67ad0adbcc
4
- data.tar.gz: cb0e2ccab51300a5a69cb7ff004921c277f54fc9
3
+ metadata.gz: 022a90cca27c54f809efb688194bb1acea19ce8b
4
+ data.tar.gz: 117569fefbe5f2b6ca5d179912029c1a8321ad79
5
5
  SHA512:
6
- metadata.gz: 0bf1c0a4fe75adce0180ad4dc7a80906c97185499098563f713cb62574097219120831e4b8c71ee2ef924fc50b833dd22a3d08576225a634d5b8354920a8aebc
7
- data.tar.gz: 622e71c6041b93d56b351f1d66b2539a9c37a7f7ffb3dde64128b8ca72c068066e3f13e7fee2faabbcb39c539d0c135d8dc619bfc6da440ec4653f44a32f2bfc
6
+ metadata.gz: 7bb21fbaf33c2fe1a9f1ca81aa0e135020f4a23eec58ebb301c7b1b9cd4d63d69318777348de46e54e979bf771d8b98a0aee80dbe47507c3b2a0d775a900cef1
7
+ data.tar.gz: 03b28f38f84e443f8236cedf88c3b465c0162c3df49bd5c8cc0fac61bd1d397f3ae26fdee3ab5d335875f8bf51ce3807ea1b7e97a642602e5c6e932111137d9c
data/README.md CHANGED
@@ -31,6 +31,8 @@ Or install it yourself with:
31
31
  ## Usage
32
32
 
33
33
  ```ruby
34
+ require 'rf_rgb'
35
+
34
36
  keyboard = nil
35
37
  begin
36
38
  # .new without an arg will automatically find and initialize the first Realforce RGB keyboard it finds.
@@ -38,8 +40,8 @@ begin
38
40
  keyboard = RfRgb::Keyboard.new
39
41
 
40
42
  keyboard.effect_rainbow_wave
41
- # keyboard.effect_shooting_star("\xff\x00\xff", RfRgb::Protocol::INTERVAL_6)
42
- # keyboard.effect_pressed_key("\xaa\xee\xff")
43
+ # keyboard.effect_shooting_star("ff00ff", RfRgb::Protocol::INTERVAL_6)
44
+ # keyboard.effect_pressed_key("aaeeff")
43
45
  # keyboard.disable_effect
44
46
  keyboard.brightness = RfRgb::Protocol::BRIGHTNESS_LOW
45
47
  keyboard.actuation_height = RfRgb::Protocol::HEIGHT_22
@@ -53,6 +55,8 @@ end
53
55
  OR
54
56
 
55
57
  ```ruby
58
+ require 'rf_rgb'
59
+
56
60
  RfRgb::Keyboard.run_and_release do |keyboard|
57
61
  keyboard.effect_rainbow_wave
58
62
  keyboard.brightness = RfRgb::Protocol::BRIGHTNESS_LOW
@@ -62,6 +66,8 @@ RfRgb::Keyboard.run_and_release do |keyboard|
62
66
  end
63
67
  ```
64
68
 
69
+ Additional examples can be found in the `examples` directory.
70
+
65
71
  See `lib/rf_rgb/keyboard.rb` for effects and arguments, and
66
72
  `lib/rf_rgb/protocol.rb` for any needed constants.
67
73
 
@@ -84,7 +90,7 @@ be read from IN endpoint #3, but this module ignores these responses completely
84
90
  time of writing.
85
91
 
86
92
  Some effects have a User 1-3 setting in the Windows UI. It's not clear what these
87
- are actually for, and are ignored in this module for now.
93
+ are actually for, and are mostly ignored in this module for now.
88
94
 
89
95
  ## Development
90
96
 
@@ -0,0 +1,19 @@
1
+ require 'rf_rgb'
2
+
3
+ keyboard = nil
4
+ begin
5
+ # .new without an arg will automatically find and initialize the first Realforce RGB keyboard it finds.
6
+ # Keyboard cannot be used at this point, as it's owned by this program until .release_to_os is called.
7
+ keyboard = RfRgb::Keyboard.new
8
+
9
+ keyboard.effect_rainbow_wave
10
+ # keyboard.effect_shooting_star("ff00ff", RfRgb::Protocol::INTERVAL_6)
11
+ # keyboard.effect_pressed_key("aaeeff")
12
+ # keyboard.disable_effect
13
+ keyboard.brightness = RfRgb::Protocol::BRIGHTNESS_LOW
14
+ keyboard.actuation_height = RfRgb::Protocol::HEIGHT_22
15
+ keyboard.swap_caps_ctrl
16
+ keyboard.save
17
+ ensure
18
+ keyboard&.release_to_os
19
+ end
@@ -0,0 +1,9 @@
1
+ require 'rf_rgb'
2
+
3
+ RfRgb::Keyboard.run_and_release do |keyboard|
4
+ keyboard.effect_rainbow_wave
5
+ keyboard.brightness = RfRgb::Protocol::BRIGHTNESS_LOW
6
+ keyboard.actuation_height = RfRgb::Protocol::HEIGHT_22
7
+ keyboard.swap_caps_ctrl
8
+ keyboard.save
9
+ end
@@ -0,0 +1,118 @@
1
+ require 'rf_rgb'
2
+
3
+ # full listing of keys for per-key color settings
4
+ colors = {
5
+ a: '000000',
6
+ actuation: '000000',
7
+ apostrophe: '000000',
8
+ b: '000000',
9
+ backslash: '000000',
10
+ backspace: '000000',
11
+ c: '000000',
12
+ capslock: '000000',
13
+ comma: '000000',
14
+ d: '000000',
15
+ del: '000000',
16
+ down: '000000',
17
+ e: '000000',
18
+ eight: '000000',
19
+ end: '000000',
20
+ enter: '000000',
21
+ equals: '000000',
22
+ esc: '000000',
23
+ f: '000000',
24
+ f1: '000000',
25
+ f10: '000000',
26
+ f11: '000000',
27
+ f12: '000000',
28
+ f2: '000000',
29
+ f3: '000000',
30
+ f4: '000000',
31
+ f5: '000000',
32
+ f6: '000000',
33
+ f7: '000000',
34
+ f8: '000000',
35
+ f9: '000000',
36
+ five: '000000',
37
+ fn: '000000',
38
+ four: '000000',
39
+ g: '000000',
40
+ grave: '000000',
41
+ h: '000000',
42
+ home: '000000',
43
+ hyphen: '000000',
44
+ i: '000000',
45
+ ins: '000000',
46
+ j: '000000',
47
+ k: '000000',
48
+ l: '000000',
49
+ lalt: '000000',
50
+ lbracket: '000000',
51
+ lctrl: '000000',
52
+ left: '000000',
53
+ lshift: '000000',
54
+ lwin: '000000',
55
+ m: '000000',
56
+ mute: '000000',
57
+ n: '000000',
58
+ nine: '000000',
59
+ np_div: '000000',
60
+ np_dot: '000000',
61
+ np_eight: '000000',
62
+ np_enter: '000000',
63
+ np_five: '000000',
64
+ np_four: '000000',
65
+ np_minus: '000000',
66
+ np_mult: '000000',
67
+ np_nine: '000000',
68
+ np_one: '000000',
69
+ np_plus: '000000',
70
+ np_seven: '000000',
71
+ np_six: '000000',
72
+ np_three: '000000',
73
+ np_two: '000000',
74
+ np_zero: '000000',
75
+ numlk: '000000',
76
+ o: '000000',
77
+ one: '000000',
78
+ p: '000000',
79
+ pause: '000000',
80
+ period: '000000',
81
+ pgdn: '000000',
82
+ pgup: '000000',
83
+ prtsc: '000000',
84
+ q: '000000',
85
+ r: '000000',
86
+ ralt: '000000',
87
+ rbracket: '000000',
88
+ rctrl: '000000',
89
+ right: '000000',
90
+ rshift: '000000',
91
+ rwin: '000000',
92
+ s: '000000',
93
+ scrlk: '000000',
94
+ semicolon: '000000',
95
+ seven: '000000',
96
+ six: '000000',
97
+ slash: '000000',
98
+ space: '000000',
99
+ t: '000000',
100
+ tab: '000000',
101
+ three: '000000',
102
+ two: '000000',
103
+ u: '000000',
104
+ up: '000000',
105
+ v: '000000',
106
+ voldown: '000000',
107
+ volup: '000000',
108
+ w: '000000',
109
+ x: '000000',
110
+ y: '000000',
111
+ z: '000000',
112
+ zero: '000000'
113
+ }
114
+
115
+ RfRgb::Keyboard.run_and_release do |keyboard|
116
+ keyboard.colors = colors
117
+ keyboard.save
118
+ end
@@ -0,0 +1,122 @@
1
+ require 'rf_rgb'
2
+
3
+ # set each key to a random color
4
+ names = [
5
+ :a,
6
+ :actuation,
7
+ :apostrophe,
8
+ :b,
9
+ :backslash,
10
+ :backspace,
11
+ :c,
12
+ :capslock,
13
+ :comma,
14
+ :d,
15
+ :del,
16
+ :down,
17
+ :e,
18
+ :eight,
19
+ :end,
20
+ :enter,
21
+ :equals,
22
+ :esc,
23
+ :f,
24
+ :f1,
25
+ :f10,
26
+ :f11,
27
+ :f12,
28
+ :f2,
29
+ :f3,
30
+ :f4,
31
+ :f5,
32
+ :f6,
33
+ :f7,
34
+ :f8,
35
+ :f9,
36
+ :five,
37
+ :fn,
38
+ :four,
39
+ :g,
40
+ :grave,
41
+ :h,
42
+ :home,
43
+ :hyphen,
44
+ :i,
45
+ :ins,
46
+ :j,
47
+ :k,
48
+ :l,
49
+ :lalt,
50
+ :lbracket,
51
+ :lctrl,
52
+ :left,
53
+ :lshift,
54
+ :lwin,
55
+ :m,
56
+ :mute,
57
+ :n,
58
+ :nine,
59
+ :np_div,
60
+ :np_dot,
61
+ :np_eight,
62
+ :np_enter,
63
+ :np_five,
64
+ :np_four,
65
+ :np_minus,
66
+ :np_mult,
67
+ :np_nine,
68
+ :np_one,
69
+ :np_plus,
70
+ :np_seven,
71
+ :np_six,
72
+ :np_three,
73
+ :np_two,
74
+ :np_zero,
75
+ :numlk,
76
+ :o,
77
+ :one,
78
+ :p,
79
+ :pause,
80
+ :period,
81
+ :pgdn,
82
+ :pgup,
83
+ :prtsc,
84
+ :q,
85
+ :r,
86
+ :ralt,
87
+ :rbracket,
88
+ :rctrl,
89
+ :right,
90
+ :rshift,
91
+ :rwin,
92
+ :s,
93
+ :scrlk,
94
+ :semicolon,
95
+ :seven,
96
+ :six,
97
+ :slash,
98
+ :space,
99
+ :t,
100
+ :tab,
101
+ :three,
102
+ :two,
103
+ :u,
104
+ :up,
105
+ :v,
106
+ :voldown,
107
+ :volup,
108
+ :w,
109
+ :x,
110
+ :y,
111
+ :z,
112
+ :zero
113
+ ]
114
+
115
+ colors = names.each_with_object({}) do |color, ob|
116
+ ob[color] = '%06x' % (rand * 0xffffff)
117
+ end
118
+
119
+ RfRgb::Keyboard.run_and_release do |keyboard|
120
+ keyboard.colors = colors
121
+ keyboard.save
122
+ end
@@ -0,0 +1,23 @@
1
+ require 'rf_rgb'
2
+
3
+ # Set all keys based on a passed-in mapping
4
+ colors = {
5
+ # Any key not specified will be set to the default value of the mapping.
6
+ # If no default is set in the mapping, will default to 000000 (i.e. not lit)
7
+ default: '11aa43',
8
+
9
+ a: 'ff00ff',
10
+ s: 'ff00ff',
11
+ d: 'ff00ff',
12
+ f: 'ff00ff',
13
+
14
+ j: '00ffff',
15
+ k: '00ffff',
16
+ l: '00ffff',
17
+ semicolon: '00ffff'
18
+ }
19
+
20
+ RfRgb::Keyboard.run_and_release do |keyboard|
21
+ keyboard.colors = colors
22
+ keyboard.save
23
+ end
@@ -0,0 +1,7 @@
1
+ require 'rf_rgb'
2
+
3
+ # Set all keys to a single color
4
+ RfRgb::Keyboard.run_and_release do |keyboard|
5
+ keyboard.colors = '11aa43'
6
+ keyboard.save
7
+ end
@@ -47,6 +47,18 @@ module RfRgb
47
47
  send_message RfRgb::Protocol.disable_effects
48
48
  end
49
49
 
50
+ def colors=(new_colors)
51
+ if new_colors.is_a? String
52
+ new_colors = {default: new_colors}
53
+ end
54
+
55
+ calls = RfRgb::Protocol.user_specified_colors(new_colors)
56
+ reset_effect
57
+ calls.each do |call|
58
+ send_message call
59
+ end
60
+ end
61
+
50
62
  def effect_rainbow_wave
51
63
  reset_effect
52
64
  send_message RfRgb::Protocol.rainbow_wave
@@ -35,14 +35,28 @@ module RfRgb
35
35
  "\xaa\xaa\x04".force_encoding(Encoding::BINARY).freeze
36
36
  end
37
37
 
38
+ def self.user_specified_colors(mapping, user = USER_1)
39
+ m = lambda { |sym| color_transform(mapping[sym]) || color_transform(mapping[:default]) || "\x00\x00\x00" }
40
+
41
+ [
42
+ "\xaa\xaa\x40\x41\x3a#{user}\x00\x00\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\x00\x00#{m[:backspace]}#{m[:tab]}#{m[:q]}#{m[:w]}\x00".force_encoding(Encoding::BINARY).freeze,
43
+ "\xaa\xaa\x40\x82\x3a#{user}#{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]}\x00".force_encoding(Encoding::BINARY).freeze,
44
+ "\xaa\xaa\x40\x83\x3a#{user}#{m[:k]}#{m[:l]}#{m[:semicolon]}#{m[:apostrophe]}\x00\x00\x00#{m[:enter]}#{m[:lshift]}\x00\x00\x00#{m[:z]}#{m[:x]}#{m[:c]}#{m[:v]}#{m[:b]}#{m[:n]}#{m[:m]}#{m[:comma]}#{m[:period]}#{m[:slash]}\x00\x00\x00\x00".force_encoding(Encoding::BINARY).freeze,
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
+ "\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
+ "\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
49
+ ]
50
+ end
51
+
38
52
  def self.pressed_key_lighting(rgb_hex, user = :user0)
39
53
  # byte number 6 (just before rgb) determines user. 0x00-0x03
40
- "\xaa\xaa\x62\x00\x04\x00#{rgb_hex}".force_encoding(Encoding::BINARY).freeze
54
+ "\xaa\xaa\x62\x00\x04\x00#{color_transform rgb_hex}".force_encoding(Encoding::BINARY).freeze
41
55
  end
42
56
 
43
57
  # Backlight color can't be changed AFAICT. Always white.
44
58
  def self.pressed_key_lighting_with_backlight(rgb_hex, user = :user0)
45
- "\xaa\xaa\x63\x00\x04\x00#{rgb_hex}".force_encoding(Encoding::BINARY).freeze
59
+ "\xaa\xaa\x63\x00\x04\x00#{color_transform rgb_hex}".force_encoding(Encoding::BINARY).freeze
46
60
  end
47
61
 
48
62
  def self.rainbow_wave
@@ -92,5 +106,11 @@ module RfRgb
92
106
  def self.unswap_caps_ctrl
93
107
  "\xaa\xaa\x84\x00\x01\x00".force_encoding(Encoding::BINARY).freeze
94
108
  end
109
+
110
+ def self.color_transform(color)
111
+ return nil unless color
112
+ return color unless color.length == 6 # rrggbb string
113
+ [color].pack('H*').force_encoding(Encoding::UTF_8)
114
+ end
95
115
  end
96
116
  end
@@ -1,3 +1,3 @@
1
1
  module RfRgb
2
- VERSION = '0.8.0'.freeze
2
+ VERSION = '0.8.5'.freeze
3
3
  end
@@ -14,6 +14,7 @@ Gem::Specification.new do |spec|
14
14
  spec.homepage = "https://github.com/xxx/rf_rgb"
15
15
  spec.license = "MIT"
16
16
 
17
+ spec.required_ruby_version = ">= 2.3"
17
18
  # Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
18
19
  # to allow pushing to a single host or delete this section to allow pushing to any host.
19
20
  if spec.respond_to?(:metadata)
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.0
4
+ version: 0.8.5
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-19 00:00:00.000000000 Z
11
+ date: 2017-07-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: libusb
@@ -84,6 +84,12 @@ files:
84
84
  - Rakefile
85
85
  - bin/console
86
86
  - bin/setup
87
+ - examples/readme_1.rb
88
+ - examples/readme_2.rb
89
+ - examples/set_colors_all.rb
90
+ - examples/set_colors_circus.rb
91
+ - examples/set_colors_complex.rb
92
+ - examples/set_colors_simple.rb
87
93
  - lib/rf_rgb.rb
88
94
  - lib/rf_rgb/keyboard.rb
89
95
  - lib/rf_rgb/protocol.rb
@@ -102,7 +108,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
102
108
  requirements:
103
109
  - - ">="
104
110
  - !ruby/object:Gem::Version
105
- version: '0'
111
+ version: '2.3'
106
112
  required_rubygems_version: !ruby/object:Gem::Requirement
107
113
  requirements:
108
114
  - - ">="