X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fsurfaces%2Fgeneric_midi%2Fmidicontrollable.h;h=bf377b66511eb48c791d03ac06ad2549ceebd964;hb=4bfdcc18bd5284879d02a4ed9f44905ba84058d4;hp=a635eaea10fb235b3d39200f88c0b612eca5f636;hpb=74933f58659051f6d4ef52d1103b2b7ba4643883;p=ardour.git diff --git a/libs/surfaces/generic_midi/midicontrollable.h b/libs/surfaces/generic_midi/midicontrollable.h index a635eaea10..bf377b6651 100644 --- a/libs/surfaces/generic_midi/midicontrollable.h +++ b/libs/surfaces/generic_midi/midicontrollable.h @@ -30,19 +30,23 @@ #include "ardour/types.h" -namespace MIDI { - -class Channel; -class Port; -class Parser; +namespace PBD { + class ControllableDescriptor; +} +namespace MIDI { + class Channel; + class Port; + class Parser; } +class GenericMidiControlProtocol; + class MIDIControllable : public PBD::Stateful { public: - MIDIControllable (MIDI::Port&, PBD::Controllable&, bool bistate = false); - MIDIControllable (MIDI::Port&, bool bistate = false); + MIDIControllable (GenericMidiControlProtocol *, MIDI::Port&, PBD::Controllable&, bool momentary); + MIDIControllable (GenericMidiControlProtocol *, MIDI::Port&, bool momentary = false); virtual ~MIDIControllable (); int init (const std::string&); @@ -52,7 +56,6 @@ class MIDIControllable : public PBD::Stateful uint32_t rid() const { return _rid; } std::string what() const { return _what; } - void send_feedback (); MIDI::byte* write_feedback (MIDI::byte* buf, int32_t& bufsize, bool force = false); void midi_rebind (MIDI::channel_t channel=-1); @@ -64,8 +67,8 @@ class MIDIControllable : public PBD::Stateful bool get_midi_feedback () { return feedback; } void set_midi_feedback (bool val) { feedback = val; } - float control_to_midi(float val); - float midi_to_control(float val); + int control_to_midi(float val); + float midi_to_control(int val); bool learned() const { return _learned; } @@ -74,6 +77,8 @@ class MIDIControllable : public PBD::Stateful void set_controllable (PBD::Controllable*); const std::string& current_uri() const { return _current_uri; } + PBD::ControllableDescriptor& descriptor() const { return *_descriptor; } + std::string control_description() const { return _control_description; } XMLNode& get_state (void); @@ -85,17 +90,24 @@ class MIDIControllable : public PBD::Stateful MIDI::byte get_control_additional () { return control_additional; } private: + + int max_value_for_type () const; + + GenericMidiControlProtocol* _surface; PBD::Controllable* controllable; + PBD::ControllableDescriptor* _descriptor; std::string _current_uri; MIDI::Port& _port; bool setting; - MIDI::byte last_value; - bool bistate; + int last_value; + float last_controllable_value; + bool _momentary; bool _is_gain_controller; bool _learned; int midi_msg_id; /* controller ID or note number */ PBD::ScopedConnection midi_sense_connection[2]; PBD::ScopedConnection midi_learn_connection; + /** the type of MIDI message that is used for this control */ MIDI::eventType control_type; MIDI::byte control_additional; MIDI::channel_t control_channel;