X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fsurfaces%2Fmackie%2Fsurface.h;h=ecaa4171f705f72edeb41d6ce82bad138474e28e;hb=e466ce40ad1ba591543020cb7c0aa15dbebef81e;hp=310eb00c249b021b6bbef4135bab1cc2a999501b;hpb=62620122a96af73c9714c4de492c43382c5f0297;p=ardour.git diff --git a/libs/surfaces/mackie/surface.h b/libs/surfaces/mackie/surface.h index 310eb00c24..ecaa4171f7 100644 --- a/libs/surfaces/mackie/surface.h +++ b/libs/surfaces/mackie/surface.h @@ -9,7 +9,7 @@ #include "controls.h" #include "types.h" -#include "mackie_jog_wheel.h" +#include "jog_wheel.h" namespace MIDI { class Parser; @@ -38,13 +38,14 @@ class Led; class Surface : public PBD::ScopedConnectionList { public: - Surface (MackieControlProtocol&, jack_client_t* jack, const std::string& device_name, uint32_t number, surface_type_t stype); + Surface (MackieControlProtocol&, const std::string& name, uint32_t number, surface_type_t stype); virtual ~Surface(); surface_type_t type() const { return _stype; } uint32_t number() const { return _number; } + const std::string& name() { return _name; } - MackieControlProtocol& mcp() const { return _mcp; } + void say_hello (); bool active() const { return _active; } void drop_routes (); @@ -54,24 +55,23 @@ public: std::map faders; std::map pots; - std::map buttons; + std::map buttons; // index is device-DEPENDENT std::map leds; std::map meters; - - /// no strip controls in here because they usually - /// have the same names. - std::map controls_by_name; + std::map controls_by_device_independent_id; Mackie::JogWheel* jog_wheel() const { return _jog_wheel; } + Fader* master_fader() const { return _master_fader; } - /// The collection of all numbered strips. No master - /// strip in here. + /// The collection of all numbered strips. typedef std::vector Strips; Strips strips; - uint32_t n_strips () const; + uint32_t n_strips (bool with_locked_strips = true) const; Strip* nth_strip (uint32_t n) const; + bool route_is_locked_to_strip (boost::shared_ptr) const; + /// This collection owns the groups typedef std::map Groups; Groups groups; @@ -82,7 +82,7 @@ public: const MidiByteArray& sysex_hdr() const; - void periodic (); + void periodic (uint64_t now_usecs); void handle_midi_pitchbend_message (MIDI::Parser&, MIDI::pitchbend_t, uint32_t channel_id); void handle_midi_controller_message (MIDI::Parser&, MIDI::EventTwoBytes*); @@ -106,12 +106,12 @@ public: /// called from MackieControlProtocol::zero_all to turn things off void zero_all (); + void zero_controls (); /// turn off leds around the jog wheel. This is for surfaces that use a pot /// pretending to be a jog wheel. void blank_jog_ring (); - bool has_timecode_display() const; void display_timecode (const std::string & /*timecode*/, const std::string & /*timecode_last*/); /** @@ -133,35 +133,44 @@ public: // display the first 2 chars of the msg in the 2 char display // . is appended to the previous character, so A.B. would // be two characters - MidiByteArray two_char_display (const std::string & msg, const std::string & dots = " "); - MidiByteArray two_char_display (unsigned int value, const std::string & dots = " "); + void show_two_char_display (const std::string & msg, const std::string & dots = " "); + void show_two_char_display (unsigned int value, const std::string & dots = " "); - /** - Timecode display. Only the difference between timecode and last_timecode will - be encoded, to save midi bandwidth. If they're the same, an empty array will - be returned - */ - MidiByteArray timecode_display (const std::string & timecode, const std::string & last_timecode = ""); - void update_view_mode_display (); void update_flip_mode_display (); - void gui_selection_changed (ARDOUR::RouteNotificationListPtr); + void gui_selection_changed (const ARDOUR::StrongRouteNotificationList&); - protected: - void init_controls(); - void init_strips (); + MackieControlProtocol& mcp() const { return _mcp; } + + void next_jog_mode (); + void set_jog_mode (Mackie::JogWheel::Mode); + + void notify_metering_state_changed(); + void turn_it_on (); + protected: + private: MackieControlProtocol& _mcp; - SurfacePort* _port; - surface_type_t _stype; - uint32_t _number; - bool _active; - bool _connected; - Mackie::JogWheel* _jog_wheel; - - void jog_wheel_state_display (Mackie::JogWheel::State state); + SurfacePort* _port; + surface_type_t _stype; + uint32_t _number; + std::string _name; + bool _active; + bool _connected; + Mackie::JogWheel* _jog_wheel; + Fader* _master_fader; + float _last_master_gain_written; + + void handle_midi_sysex (MIDI::Parser&, MIDI::byte *, size_t count); + MidiByteArray host_connection_query (MidiByteArray& bytes); + MidiByteArray host_connection_confirmation (const MidiByteArray& bytes); + + void init_controls (); + void init_strips (uint32_t n); + void setup_master (); + void master_gain_changed (); }; }