1 #ifndef ardour_generic_midi_control_protocol_h
2 #define ardour_generic_midi_control_protocol_h
5 #include <glibmm/thread.h>
6 #include <ardour/types.h>
8 #include <control_protocol/control_protocol.h>
22 class MIDIControllable;
24 class GenericMidiControlProtocol : public ARDOUR::ControlProtocol {
26 GenericMidiControlProtocol (ARDOUR::Session&);
27 virtual ~GenericMidiControlProtocol();
29 int set_active (bool yn);
30 static bool probe() { return true; }
32 MIDI::Port* port () const { return _port; }
33 void set_feedback_interval (ARDOUR::microseconds_t);
35 int set_feedback (bool yn);
36 bool get_feedback () const;
38 XMLNode& get_state ();
39 int set_state (const XMLNode&, int version);
43 ARDOUR::microseconds_t _feedback_interval;
44 ARDOUR::microseconds_t last_feedback_time;
48 void _send_feedback ();
49 void send_feedback ();
51 typedef std::set<MIDIControllable*> MIDIControllables;
52 MIDIControllables controllables;
54 typedef std::list<std::pair<MIDIControllable*,sigc::connection> > MIDIPendingControllables;
55 MIDIPendingControllables pending_controllables;
56 Glib::Mutex controllables_lock;
57 Glib::Mutex pending_lock;
59 bool start_learning (PBD::Controllable*);
60 void stop_learning (PBD::Controllable*);
62 void learning_stopped (MIDIControllable*);
64 void create_binding (PBD::Controllable*, int, int);
65 void delete_binding (PBD::Controllable*);
67 void auto_binding_on();
68 void auto_binding_off();
72 #endif /* ardour_generic_midi_control_protocol_h */