class RfRgb::Keyboard
Constants
- ENDPOINT_IN
- ENDPOINT_OUT
- INTERFACE
- PRODUCT_ID
- VENDOR_ID
Attributes
device[R]
handle[R]
Public Class Methods
all()
click to toggle source
# File lib/rf_rgb/keyboard.rb, line 11 def self.all context = LIBUSB::Context.new context.debug = LIBUSB_DEBUG context.devices(idVendor: VENDOR_ID, idProduct: PRODUCT_ID) end
first()
click to toggle source
# File lib/rf_rgb/keyboard.rb, line 17 def self.first all.first end
new(device = RfRgb::Keyboard.first)
click to toggle source
# File lib/rf_rgb/keyboard.rb, line 31 def initialize(device = RfRgb::Keyboard.first) @device = device @handle = initialize_device(device) end
run_and_release(device = RfRgb::Keyboard.first) { |keyboard| ... }
click to toggle source
# File lib/rf_rgb/keyboard.rb, line 21 def self.run_and_release(device = RfRgb::Keyboard.first, &block) keyboard = nil begin keyboard = new(device) yield keyboard ensure keyboard&.release_to_os end end
Public Instance Methods
actuation_height=(new_height)
click to toggle source
# File lib/rf_rgb/keyboard.rb, line 120 def actuation_height=(new_height) if new_height.is_a? String send_and_verify RfRgb::Protocol.change_actuation_height_all(new_height) else calls = RfRgb::Protocol.user_specified_actuation_heights(new_height) reset_effect calls.each do |call| send_and_verify call end end end
Also aliased as: actuation_heights=
brightness=(new_brightness)
click to toggle source
# File lib/rf_rgb/keyboard.rb, line 116 def brightness=(new_brightness) send_and_verify RfRgb::Protocol.change_brightness(new_brightness) end
colors=(new_colors)
click to toggle source
# File lib/rf_rgb/keyboard.rb, line 51 def colors=(new_colors) if new_colors.is_a? String new_colors = {default: new_colors} end calls = RfRgb::Protocol.user_specified_colors(new_colors) reset_effect calls.each do |call| send_and_verify call end end
Also aliased as: color=
disable_effect()
click to toggle source
# File lib/rf_rgb/keyboard.rb, line 46 def disable_effect reset_effect send_and_verify RfRgb::Protocol.disable_effects end
effect_color_bar()
click to toggle source
# File lib/rf_rgb/keyboard.rb, line 94 def effect_color_bar reset_effect send_and_verify RfRgb::Protocol.color_bar end
effect_demo_mode()
click to toggle source
# File lib/rf_rgb/keyboard.rb, line 84 def effect_demo_mode reset_effect send_and_verify RfRgb::Protocol.demo_mode end
effect_pressed_key(rgb_hex)
click to toggle source
# File lib/rf_rgb/keyboard.rb, line 69 def effect_pressed_key(rgb_hex) reset_effect send_and_verify RfRgb::Protocol.pressed_key_lighting(rgb_hex) end
effect_pressed_key_with_backlight(rgb_hex)
click to toggle source
# File lib/rf_rgb/keyboard.rb, line 74 def effect_pressed_key_with_backlight(rgb_hex) reset_effect send_and_verify RfRgb::Protocol.pressed_key_lighting_with_backlight(rgb_hex) end
effect_rainbow_wave()
click to toggle source
# File lib/rf_rgb/keyboard.rb, line 64 def effect_rainbow_wave reset_effect send_and_verify RfRgb::Protocol.rainbow_wave end
effect_random_lights()
click to toggle source
# File lib/rf_rgb/keyboard.rb, line 89 def effect_random_lights reset_effect send_and_verify RfRgb::Protocol.random_lights end
effect_shooting_star(rgb_hex, interval)
click to toggle source
# File lib/rf_rgb/keyboard.rb, line 79 def effect_shooting_star(rgb_hex, interval) reset_effect send_and_verify RfRgb::Protocol.shooting_star(rgb_hex, interval) end
lock_keys()
click to toggle source
There's more to key locking than just this, but the way it's done is odd and is among the lowest of priorities on this project.
# File lib/rf_rgb/keyboard.rb, line 101 def lock_keys send_and_verify RfRgb::Protocol.key_lock end
locked_keys=(keys)
click to toggle source
# File lib/rf_rgb/keyboard.rb, line 105 def locked_keys=(keys) calls = RfRgb::Protocol.user_specified_key_locks(keys) calls.each do |call| send_and_verify call end end
release_to_os()
click to toggle source
# File lib/rf_rgb/keyboard.rb, line 40 def release_to_os return unless @handle @handle.release_interface(INTERFACE) @handle.close end
save()
click to toggle source
# File lib/rf_rgb/keyboard.rb, line 36 def save send_and_verify RfRgb::Protocol.save_changes end
swap_caps_ctrl()
click to toggle source
# File lib/rf_rgb/keyboard.rb, line 133 def swap_caps_ctrl send_and_verify RfRgb::Protocol.swap_caps_ctrl end
unlock_keys()
click to toggle source
# File lib/rf_rgb/keyboard.rb, line 112 def unlock_keys send_and_verify RfRgb::Protocol.key_unlock end
unswap_caps_ctrl()
click to toggle source
# File lib/rf_rgb/keyboard.rb, line 137 def unswap_caps_ctrl send_and_verify RfRgb::Protocol.unswap_caps_ctrl end
Private Instance Methods
initialize_device(device)
click to toggle source
# File lib/rf_rgb/keyboard.rb, line 149 def initialize_device(device) handle = device.open handle.auto_detach_kernel_driver = true handle.set_configuration(1) rescue nil handle.claim_interface(INTERFACE) # handle.clear_halt endpoint0 handle end
receive_message()
click to toggle source
# File lib/rf_rgb/keyboard.rb, line 166 def receive_message @handle.interrupt_transfer( endpoint: ENDPOINT_IN, dataIn: 64, timeout: 10_000 ) end
reset_effect()
click to toggle source
I don't know what this actually does, but the Windows software sends this message before any effect change.
# File lib/rf_rgb/keyboard.rb, line 145 def reset_effect send_and_verify RfRgb::Protocol.reset_effect end
send_and_verify(data, retries = 2)
click to toggle source
# File lib/rf_rgb/keyboard.rb, line 174 def send_and_verify(data, retries = 2) retry_count = 0 begin send_message data ack = receive_message verify_message!(data, ack) rescue RfRgb::VerificationError retry_count += 1 retry if retry_count <= retries end end
send_message(data)
click to toggle source
# File lib/rf_rgb/keyboard.rb, line 158 def send_message(data) @handle.interrupt_transfer( endpoint: ENDPOINT_OUT, dataOut: data, timeout: 10_000 ) end
verify_message(data, ack)
click to toggle source
The keyboard acknowledges each packet sent with a response of x55x55x<third byte of sent packet>
# File lib/rf_rgb/keyboard.rb, line 187 def verify_message(data, ack) ack.bytes[0..2] == "\x55\x55#{data[2]}".bytes end
verify_message!(data, ack)
click to toggle source
# File lib/rf_rgb/keyboard.rb, line 191 def verify_message!(data, ack) unless verify_message(data, ack) raise RfRgb::VerificationError, "Ack[#{ack.bytes}] did not match data[#{data.bytes}]!" end end