class Dozen
Public Class Methods
VERSION()
click to toggle source
# File lib/dozen.rb, line 59 def self.VERSION '1.1.0' end
new()
click to toggle source
# File lib/dozen.rb, line 5 def initialize @usb = LIBUSB::Context.new @devices = query_usb_for_sixaxis_devices if @devices.length == 0 puts "No Sixaxis controllers connected via USB." end end
parse_bluetooth_address(raw_address)
click to toggle source
# File lib/dozen.rb, line 43 def self.parse_bluetooth_address(raw_address) begin preparedAddress = raw_address.split(':').map{ |x| Integer("0x" + x)} rescue return false end return false if preparedAddress.length != 6 return false if preparedAddress.any? {|x| x < 0 || x > 0xFF} preparedAddress end
show_header()
click to toggle source
# File lib/dozen.rb, line 54 def self.show_header puts "Dozen v#{Dozen.VERSION}" puts end
Public Instance Methods
assign_address_to_all(address)
click to toggle source
# File lib/dozen.rb, line 34 def assign_address_to_all(address) @devices.each_with_index do |device, index| device.open do |handle| puts "Assigning address #{formatAddress(address)} to controller ##{index}" assign_master_to_handle(address, handle) end end end
assign_address_to_controller(address, controller_index)
click to toggle source
# File lib/dozen.rb, line 22 def assign_address_to_controller(address, controller_index) if @devices[controller_index].nil? puts "No device available at index #{controller_index}" return end @devices[controller_index].open do |handle| puts "Assigning address #{formatAddress(address)} to controller ##{controller_index}" assign_master_to_handle(address, handle) end end
list_controllers()
click to toggle source
# File lib/dozen.rb, line 13 def list_controllers @devices.each_with_index do |device, index| device.open do |handle| master = get_device_master_from_handle(handle) puts "Controller ##{index} is paired with #{master.each_byte.map { |b| b.to_s(16) }.join(':')}" end end end
Private Instance Methods
assign_master_to_handle(address, handle)
click to toggle source
# File lib/dozen.rb, line 83 def assign_master_to_handle(address, handle) msg = ([0x01, 0x00] + address).pack('c*') handle.control_transfer( :bmRequestType => LIBUSB::REQUEST_TYPE_CLASS | LIBUSB::ENDPOINT_OUT | LIBUSB::RECIPIENT_INTERFACE, :bRequest => 0x09, :wValue => 0x03f5, :wIndex => 0x0000, :dataOut => msg, :timeout => 5000) end
formatAddress(address)
click to toggle source
# File lib/dozen.rb, line 65 def formatAddress(address) address.map{|x| x.to_s(16)}.join(':') end
get_device_master_from_handle(handle)
click to toggle source
# File lib/dozen.rb, line 73 def get_device_master_from_handle(handle) handle.control_transfer( :bmRequestType => LIBUSB::REQUEST_TYPE_CLASS | LIBUSB::ENDPOINT_IN | LIBUSB::RECIPIENT_INTERFACE, :bRequest => 0x01, :wValue => 0x03f5, :wIndex => 0x0000, :dataIn => 8, :timeout => 5000)[2,6] end
query_usb_for_sixaxis_devices()
click to toggle source
# File lib/dozen.rb, line 69 def query_usb_for_sixaxis_devices @usb.devices(:idVendor => 0x054c, :idProduct => 0x0268) end