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