1 #ifndef ardour_wiimote_control_protocol_h
2 #define ardour_wiimote_control_protocol_h
4 #include <ardour/types.h>
5 #include <control_protocol/control_protocol.h>
7 #include <glibmm/thread.h>
9 #include <pbd/abstract_ui.h>
18 #define ENSURE_WIIMOTE_THREAD(slot) \
19 if (Glib::Thread::self() != main_thread) {\
21 slot_list.push_back(slot);\
28 class WiimoteControlProtocol : public ARDOUR::ControlProtocol {
30 WiimoteControlProtocol (ARDOUR::Session &);
31 virtual ~WiimoteControlProtocol ();
35 int set_active (bool yn);
37 int set_state(const XMLNode&);
39 void wiimote_callback(cwiid_wiimote_t *, int, union cwiid_mesg [],
45 volatile bool main_thread_quit;
46 volatile bool restart_discovery;
48 Glib::Thread *main_thread;
50 void update_led_state();
52 bool callback_thread_registered_for_ardour;
54 static uint16_t button_state;
56 cwiid_wiimote_t *wiimote_handle;
59 Glib::Mutex slot_mutex;
61 std::list< sigc::slot<void> > slot_list;
63 sigc::connection transport_state_conn;
64 sigc::connection record_state_conn;
68 #endif /* ardour_wiimote_control_protocol_h */