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 */