2008-12-12 09:43:24 -05:00
|
|
|
#ifndef ardour_wiimote_control_protocol_h
|
|
|
|
#define ardour_wiimote_control_protocol_h
|
|
|
|
|
2009-10-29 20:21:40 -04:00
|
|
|
#include "ardour/types.h"
|
|
|
|
#include "control_protocol/control_protocol.h"
|
2008-12-12 09:43:24 -05:00
|
|
|
|
2012-07-25 13:48:55 -04:00
|
|
|
#include <glibmm/threads.h>
|
2008-12-12 09:43:24 -05:00
|
|
|
|
2009-10-29 20:21:40 -04:00
|
|
|
#include "pbd/abstract_ui.h"
|
2008-12-12 09:43:24 -05:00
|
|
|
|
|
|
|
#include <cwiid.h>
|
|
|
|
|
|
|
|
|
|
|
|
namespace ARDOUR {
|
|
|
|
class Session;
|
|
|
|
}
|
|
|
|
|
|
|
|
#define ENSURE_WIIMOTE_THREAD(slot) \
|
2012-07-25 13:48:55 -04:00
|
|
|
if (Glib::Threads::Thread::self() != main_thread) { \
|
2008-12-12 09:43:24 -05:00
|
|
|
slot_mutex.lock();\
|
|
|
|
slot_list.push_back(slot);\
|
|
|
|
slot_cond.signal();\
|
|
|
|
slot_mutex.unlock();\
|
|
|
|
return;\
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
class WiimoteControlProtocol : public ARDOUR::ControlProtocol {
|
2012-07-25 13:48:55 -04:00
|
|
|
public:
|
|
|
|
WiimoteControlProtocol (ARDOUR::Session &);
|
|
|
|
virtual ~WiimoteControlProtocol ();
|
|
|
|
|
|
|
|
static bool probe();
|
|
|
|
|
|
|
|
int set_active (bool yn);
|
|
|
|
XMLNode& get_state();
|
|
|
|
int set_state(const XMLNode&);
|
|
|
|
|
|
|
|
void wiimote_callback(cwiid_wiimote_t *, int, union cwiid_mesg [],
|
|
|
|
struct timespec *);
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
|
|
|
void wiimote_main();
|
|
|
|
volatile bool main_thread_quit;
|
|
|
|
volatile bool restart_discovery;
|
|
|
|
|
|
|
|
Glib::Threads::Thread *main_thread;
|
|
|
|
|
|
|
|
void update_led_state();
|
|
|
|
|
|
|
|
bool callback_thread_registered_for_ardour;
|
|
|
|
|
|
|
|
static uint16_t button_state;
|
|
|
|
|
|
|
|
cwiid_wiimote_t *wiimote_handle;
|
|
|
|
|
|
|
|
Glib::Threads::Cond slot_cond;
|
|
|
|
Glib::Threads::Mutex slot_mutex;
|
|
|
|
|
|
|
|
std::list< sigc::slot<void> > slot_list;
|
|
|
|
|
|
|
|
sigc::connection transport_state_conn;
|
|
|
|
sigc::connection record_state_conn;
|
2008-12-12 09:43:24 -05:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
#endif /* ardour_wiimote_control_protocol_h */
|
|
|
|
|