summaryrefslogtreecommitdiff
path: root/libs/surfaces/generic_midi/generic_midi_control_protocol.h
diff options
context:
space:
mode:
Diffstat (limited to 'libs/surfaces/generic_midi/generic_midi_control_protocol.h')
-rw-r--r--libs/surfaces/generic_midi/generic_midi_control_protocol.h41
1 files changed, 31 insertions, 10 deletions
diff --git a/libs/surfaces/generic_midi/generic_midi_control_protocol.h b/libs/surfaces/generic_midi/generic_midi_control_protocol.h
index 70cbd181c8..f86f5f6434 100644
--- a/libs/surfaces/generic_midi/generic_midi_control_protocol.h
+++ b/libs/surfaces/generic_midi/generic_midi_control_protocol.h
@@ -1,34 +1,55 @@
#ifndef ardour_generic_midi_control_protocol_h
#define ardour_generic_midi_control_protocol_h
+#include <vector>
+#include <glibmm/thread.h>
+#include <ardour/types.h>
+
#include <control_protocol/control_protocol.h>
namespace MIDI {
class Port;
}
+namespace PBD {
+ class Controllable;
+}
+
namespace ARDOUR {
+ class Session;
+}
-class GenericMidiControlProtocol : public ControlProtocol {
+class MIDIControllable;
+
+class GenericMidiControlProtocol : public ARDOUR::ControlProtocol {
public:
- GenericMidiControlProtocol (Session&);
+ GenericMidiControlProtocol (ARDOUR::Session&);
virtual ~GenericMidiControlProtocol();
int set_active (bool yn);
static bool probe() { return true; }
- void set_port (MIDI::Port*);
MIDI::Port* port () const { return _port; }
+ void set_feedback_interval (ARDOUR::microseconds_t);
- void send_route_feedback (std::list<Route*>&);
-
private:
- void route_feedback (ARDOUR::Route&, bool);
MIDI::Port* _port;
+ ARDOUR::microseconds_t _feedback_interval;
+ ARDOUR::microseconds_t last_feedback_time;
- void port_change ();
-};
+ void _send_feedback ();
+ void send_feedback ();
-}
+ typedef std::vector<MIDIControllable*> MIDIControllables;
+ MIDIControllables controllables;
+ MIDIControllables pending_controllables;
+ Glib::Mutex controllables_lock;
+ Glib::Mutex pending_lock;
+
+ bool start_learning (PBD::Controllable*);
+ void stop_learning (PBD::Controllable*);
+
+ void learning_stopped (MIDIControllable*);
+};
-#endif // ardour_generic_midi_control_protocol_h
+#endif /* ardour_generic_midi_control_protocol_h */