lib/artoo/drivers/joystick.rb in artoo-joystick-0.3.0 vs lib/artoo/drivers/joystick.rb in artoo-joystick-0.4.0

- old
+ new

@@ -2,14 +2,28 @@ module Artoo module Drivers # The sdl-joystick driver behaviors class Joystick < Driver + include Artoo::Utility + + COMMANDS = [:currently_pressed?].freeze + attr_reader :button_values # Start driver and any required connections def start_driver + puts os + case os + when :linux + require 'artoo/drivers/linux_binding_map' + when :macosx + require 'artoo/drivers/macosx_binding_map' + else + # raise error ? + end + @button_values = {} begin every(interval) do handle_message_events @@ -21,10 +35,14 @@ Logger.error e.message Logger.error e.backtrace.inspect end end + def currently_pressed?(b) + button_values[b] + end + def handle_message_events connection.poll handle_joystick # TODO: handle_trackball # TODO: handle_hats @@ -34,32 +52,30 @@ def handle_joystick number_sticks = connection.num_axes / 2 number_sticks.times {|s| x = connection.axis(s * 2) y = connection.axis(s * 2 + 1) - + publish_joystick(s, x, y) } end def handle_trackball if connection.num_balls == 1 x, y = connection.ball(0) - + publish(event_topic_name("update"), "trackball", {:x => x, :y => y}) publish(event_topic_name("trackball"), {:x => x, :y => y}) end end def handle_buttons connection.num_buttons.times {|b| currently_pressed = connection.button(b) if button_values[b] != currently_pressed button_values[b] = currently_pressed - if currently_pressed == 1 - publish_button(b) - end + publish_button(b) end } end def publish_joystick(s, x, y) @@ -67,12 +83,14 @@ publish(event_topic_name("joystick"), {:x => x, :y => y, :s => s}) publish(event_topic_name("joystick_#{s}"), {:x => x, :y => y}) end def publish_button(b) - publish(event_topic_name("update"), "button", b) - publish(event_topic_name("button"), b) - publish(event_topic_name("button_#{b}")) + if button_values[b] == 1 + publish(event_topic_name("update"), "button", b) + publish(event_topic_name("button"), b) + publish(event_topic_name("button_#{b}")) + end end end end end