X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=libs%2Fsurfaces%2Fmackie%2Fmackie_control_protocol.h;h=fc965d868b2d6f83f2591c6e5655693d0303d290;hb=29b3c299a1bb037bdc2870d642bb6a23bdedabee;hp=18919954c427f6274b1edb45127abe160f5a7d30;hpb=8f7fa7d93b47665c14e452b06e0fb017d0dd653d;p=ardour.git diff --git a/libs/surfaces/mackie/mackie_control_protocol.h b/libs/surfaces/mackie/mackie_control_protocol.h index 18919954c4..fc965d868b 100644 --- a/libs/surfaces/mackie/mackie_control_protocol.h +++ b/libs/surfaces/mackie/mackie_control_protocol.h @@ -22,13 +22,12 @@ #include #include #include +#include #include #include #include -#include - #include "pbd/abstract_ui.h" #include "midi++/types.h" #include "ardour/types.h" @@ -37,9 +36,10 @@ #include "types.h" #include "midi_byte_array.h" #include "controls.h" -#include "mackie_jog_wheel.h" +#include "jog_wheel.h" #include "timer.h" #include "device_info.h" +#include "device_profile.h" namespace ARDOUR { class AutomationControl; @@ -117,21 +117,28 @@ class MackieControlProtocol static MackieControlProtocol* instance() { return _instance; } const Mackie::DeviceInfo& device_info() const { return _device_info; } + Mackie::DeviceProfile& device_profile() { return _device_profile; } + + void device_ready (); int set_active (bool yn); - void set_device (const std::string&); + int set_device (const std::string&); + void set_profile (const std::string&); - bool flip_mode () const { return _flip_mode; } + FlipMode flip_mode () const { return _flip_mode; } ViewMode view_mode () const { return _view_mode; } + bool zoom_mode () const { return _zoom_mode; } + bool metering_active () const { return _metering_active; } void set_view_mode (ViewMode); - void set_flip_mode (bool); + void set_flip_mode (FlipMode); XMLNode& get_state (); int set_state (const XMLNode&, int version); static bool probe(); + Glib::Threads::Mutex surfaces_lock; typedef std::list > Surfaces; Surfaces surfaces; @@ -140,7 +147,7 @@ class MackieControlProtocol void set_master_on_surface_strip (uint32_t surface, uint32_t strip); void set_monitor_on_surface_strip (uint32_t surface, uint32_t strip); - uint32_t n_strips () const; + uint32_t n_strips (bool with_locked_strips = true) const; bool has_editor () const { return true; } void* get_gui () const; @@ -159,6 +166,7 @@ class MackieControlProtocol void notify_record_state_changed(); void notify_transport_state_changed(); void notify_loop_state_changed(); + void notify_metering_state_changed(); // mainly to pick up punch-in and punch-out void notify_parameter_changed(std::string const &); void notify_solo_active_changed(bool); @@ -166,18 +174,16 @@ class MackieControlProtocol /// Turn timecode on and beats off, or vice versa, depending /// on state of _timecode_type void update_timecode_beats_led(); - + /// this is called to generate the midi to send in response to a button press. void update_led(Mackie::Surface&, Mackie::Button & button, Mackie::LedState); - void update_global_button(const std::string & name, Mackie::LedState); - void update_global_led(const std::string & name, Mackie::LedState); + void update_global_button (int id, Mackie::LedState); + void update_global_led (int id, Mackie::LedState); ARDOUR::Session & get_session() { return *session; } framepos_t transport_frame() const; - void add_in_use_timeout (Mackie::Surface& surface, Mackie::Control& in_use_control, boost::weak_ptr touched); - int modifier_state() const { return _modifier_state; } typedef std::list > ControlList; @@ -189,6 +195,11 @@ class MackieControlProtocol void add_down_select_button (int surface, int strip); void remove_down_select_button (int surface, int strip); void select_range (); + + int16_t ipmidi_base() const { return _ipmidi_base; } + void set_ipmidi_base (int16_t); + + void midi_connectivity_established (); protected: // shut down the surface @@ -228,10 +239,7 @@ class MackieControlProtocol void thread_init (); - /* handling function key presses */ - - std::string f_action (uint32_t fn); - void f_press (uint32_t fn); + bool route_is_locked_to_strip (boost::shared_ptr) const; private: @@ -245,20 +253,19 @@ class MackieControlProtocol , release (r) {} }; - typedef std::map ButtonMap; + typedef std::map ButtonMap; typedef std::list PortSources; static MackieControlProtocol* _instance; Mackie::DeviceInfo _device_info; + Mackie::DeviceProfile _device_profile; sigc::connection periodic_connection; uint32_t _current_initial_bank; PBD::ScopedConnectionList audio_engine_connections; PBD::ScopedConnectionList session_connections; - PBD::ScopedConnectionList port_connections; PBD::ScopedConnectionList route_connections; PBD::ScopedConnectionList gui_connections; - bool _transport_previously_rolling; // timer for two quick marker left presses Mackie::Timer _frm_left_last; // last written timecode string @@ -272,30 +279,37 @@ class MackieControlProtocol void* _gui; bool _zoom_mode; bool _scrub_mode; - bool _flip_mode; + FlipMode _flip_mode; ViewMode _view_mode; int _current_selected_track; int _modifier_state; PortSources port_sources; - std::vector _f_actions; ButtonMap button_map; - - void create_surfaces (); - void port_connected_or_disconnected (std::string, std::string, bool); - bool control_in_use_timeout (Mackie::Surface*, Mackie::Control *, boost::weak_ptr); + int16_t _ipmidi_base; + bool needs_ipmidi_restart; + bool _metering_active; + bool _initialized; + ARDOUR::RouteNotificationList _last_selected_routes; + XMLNode* _surfaces_state; + int _surfaces_version; + + int create_surfaces (); bool periodic(); void build_gui (); bool midi_input_handler (Glib::IOCondition ioc, MIDI::Port* port); void clear_ports (); + void clear_surfaces (); void force_special_route_to_strip (boost::shared_ptr r, uint32_t surface, uint32_t strip_number); void build_button_map (); - - void gui_track_selection_changed (ARDOUR::RouteNotificationListPtr); - + void gui_track_selection_changed (ARDOUR::RouteNotificationListPtr, bool save_list); + void _gui_track_selection_changed (ARDOUR::RouteNotificationList*, bool save_list); + int ipmidi_restart (); + void initialize (); + int set_device_info (const std::string& device_name); /* BUTTON HANDLING */ - typedef std::list DownButtonList; + typedef std::set DownButtonList; typedef std::map DownButtonMap; DownButtonMap _down_buttons; DownButtonList _down_select_buttons; @@ -349,8 +363,6 @@ class MackieControlProtocol Mackie::LedState global_solo_release(Mackie::Button &); Mackie::LedState marker_press(Mackie::Button &); Mackie::LedState marker_release(Mackie::Button &); - Mackie::LedState drop_press(Mackie::Button &); - Mackie::LedState drop_release(Mackie::Button &); Mackie::LedState save_press(Mackie::Button &); Mackie::LedState save_release(Mackie::Button &); Mackie::LedState timecode_beats_press(Mackie::Button &); @@ -426,8 +438,6 @@ class MackieControlProtocol Mackie::LedState on_release (Mackie::Button &); Mackie::LedState rec_ready_press (Mackie::Button &); Mackie::LedState rec_ready_release (Mackie::Button &); - Mackie::LedState snapshot_press (Mackie::Button &); - Mackie::LedState snapshot_release (Mackie::Button &); Mackie::LedState touch_press (Mackie::Button &); Mackie::LedState touch_release (Mackie::Button &); Mackie::LedState enter_press (Mackie::Button &); @@ -442,8 +452,55 @@ class MackieControlProtocol Mackie::LedState user_b_release (Mackie::Button &); Mackie::LedState fader_touch_press (Mackie::Button &); Mackie::LedState fader_touch_release (Mackie::Button &); + Mackie::LedState master_fader_touch_press (Mackie::Button &); + Mackie::LedState master_fader_touch_release (Mackie::Button &); + + Mackie::LedState snapshot_press (Mackie::Button&); + Mackie::LedState snapshot_release (Mackie::Button&); + Mackie::LedState read_press (Mackie::Button&); + Mackie::LedState read_release (Mackie::Button&); + Mackie::LedState write_press (Mackie::Button&); + Mackie::LedState write_release (Mackie::Button&); + Mackie::LedState fdrgroup_press (Mackie::Button&); + Mackie::LedState fdrgroup_release (Mackie::Button&); + Mackie::LedState clearsolo_press (Mackie::Button&); + Mackie::LedState clearsolo_release (Mackie::Button&); + Mackie::LedState track_press (Mackie::Button&); + Mackie::LedState track_release (Mackie::Button&); + Mackie::LedState send_press (Mackie::Button&); + Mackie::LedState send_release (Mackie::Button&); + Mackie::LedState miditracks_press (Mackie::Button&); + Mackie::LedState miditracks_release (Mackie::Button&); + Mackie::LedState inputs_press (Mackie::Button&); + Mackie::LedState inputs_release (Mackie::Button&); + Mackie::LedState audiotracks_press (Mackie::Button&); + Mackie::LedState audiotracks_release (Mackie::Button&); + Mackie::LedState audioinstruments_press (Mackie::Button&); + Mackie::LedState audioinstruments_release (Mackie::Button&); + Mackie::LedState aux_press (Mackie::Button&); + Mackie::LedState aux_release (Mackie::Button&); + Mackie::LedState busses_press (Mackie::Button&); + Mackie::LedState busses_release (Mackie::Button&); + Mackie::LedState outputs_press (Mackie::Button&); + Mackie::LedState outputs_release (Mackie::Button&); + Mackie::LedState user_press (Mackie::Button&); + Mackie::LedState user_release (Mackie::Button&); + Mackie::LedState trim_press (Mackie::Button&); + Mackie::LedState trim_release (Mackie::Button&); + Mackie::LedState latch_press (Mackie::Button&); + Mackie::LedState latch_release (Mackie::Button&); + Mackie::LedState grp_press (Mackie::Button&); + Mackie::LedState grp_release (Mackie::Button&); + Mackie::LedState nudge_press (Mackie::Button&); + Mackie::LedState nudge_release (Mackie::Button&); + Mackie::LedState drop_press (Mackie::Button&); + Mackie::LedState drop_release (Mackie::Button&); + Mackie::LedState replace_press (Mackie::Button&); + Mackie::LedState replace_release (Mackie::Button&); + Mackie::LedState click_press (Mackie::Button&); + Mackie::LedState click_release (Mackie::Button&); + Mackie::LedState view_press (Mackie::Button&); + Mackie::LedState view_release (Mackie::Button&); }; - - #endif // ardour_mackie_control_protocol_h