class Usblamp::Controller
Controller
class
Constants
- INIT_PACKET1
- INIT_PACKET2
- PRODUCT_ID
- VENDOR_ID
Attributes
color[RW]
device[RW]
Public Class Methods
new()
click to toggle source
# File lib/usblamp/controller.rb, line 12 def initialize @device = nil @color = nil end
Public Instance Methods
blink(times, new_color)
click to toggle source
# File lib/usblamp/controller.rb, line 91 def blink(times, new_color) (1..times).each do send_color(new_color) sleep 0.5 switch_off sleep 0.5 end end
fade_in(delay, new_color)
click to toggle source
# File lib/usblamp/controller.rb, line 69 def fade_in(delay, new_color) delay = delay.to_i color = Color.new max_value = [new_color.red, new_color.green, new_color.blue].max (0..max_value).each do |i| sleep((delay.to_f * 1000.to_f / max_value.to_f + 1.to_f) / 1000.to_f) color.red = transition(i, @color.red, new_color.red, max_value) color.green = transition(i, @color.green, new_color.green, max_value) color.blue = transition(i, @color.blue, new_color.blue, max_value) send_color(color) end end
open()
click to toggle source
# File lib/usblamp/controller.rb, line 17 def open usb = LIBUSB::Context.new device = usb.devices(idVendor: VENDOR_ID, idProduct: PRODUCT_ID).first fail 'Could no find a supported device.' if device.nil? @device = device.open @device.detach_kernel_driver(0) if @device.kernel_driver_active?(0) @device.claim_interface(0) send(INIT_PACKET1) send(INIT_PACKET2) end
parse(args)
click to toggle source
# File lib/usblamp/controller.rb, line 63 def parse(args) color = Color.new(args[:c]) unless args[:c].nil? color = Color.new(args[:r], args[:g], args[:b]) if args[:c].nil? color end
send(data)
click to toggle source
# File lib/usblamp/controller.rb, line 29 def send(data) return true if @device .control_transfer( bmRequestType: LIBUSB::REQUEST_TYPE_CLASS | LIBUSB::RECIPIENT_INTERFACE, bRequest: LIBUSB::REQUEST_SET_CONFIGURATION, wValue: 0x81, wIndex: LIBUSB::ENDPOINT_OUT, dataOut: data.map(&:chr).reduce(:+), timeout: 10) == 8 false end
send_color(color)
click to toggle source
# File lib/usblamp/controller.rb, line 43 def send_color(color) fail TypeError, 'Parameter must be an instance of Color' unless color.is_a?(Color) @color = color data = [color.red, color.green, color.blue, 0x00, 0x00, 0x00, 0x00, 0x05] send(data) end
switch_off()
click to toggle source
# File lib/usblamp/controller.rb, line 59 def switch_off send_color(Color.new('black')) end
Private Instance Methods
transition(index, start_point, end_point, maximum)
click to toggle source
# File lib/usblamp/controller.rb, line 102 def transition(index, start_point, end_point, maximum) (((start_point.to_f + (end_point.to_f - start_point.to_f)) * (index.to_f + 1.to_f) ) / maximum.to_f ).to_i end