summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2015-10-02 21:54:40 -0400
committerPaul Davis <paul@linuxaudiosystems.com>2015-10-02 22:08:14 -0400
commitccf505c3a27f08dcfe74e32a66108f6d8eafb038 (patch)
treeb7208ccd39f20ebd47e96f476f854114f6e34706
parent04b9df1fd9de2d631bc76b02766ed93308c408b5 (diff)
implement backlight, fader touch sensitivity and recalibrate fader functions for MCP GUI
-rw-r--r--libs/surfaces/mackie/gui.cc26
-rw-r--r--libs/surfaces/mackie/gui.h3
-rw-r--r--libs/surfaces/mackie/mackie_control_protocol.cc33
-rw-r--r--libs/surfaces/mackie/mackie_control_protocol.h4
-rw-r--r--libs/surfaces/mackie/surface.cc72
-rw-r--r--libs/surfaces/mackie/surface.h7
6 files changed, 144 insertions, 1 deletions
diff --git a/libs/surfaces/mackie/gui.cc b/libs/surfaces/mackie/gui.cc
index 16f2d52bdd..99aeec14d8 100644
--- a/libs/surfaces/mackie/gui.cc
+++ b/libs/surfaces/mackie/gui.cc
@@ -111,6 +111,12 @@ MackieControlProtocolGUI::MackieControlProtocolGUI (MackieControlProtocol& p)
RadioButtonGroup rb_group = absolute_touch_mode_button.get_group();
touch_move_mode_button.set_group (rb_group);
+ recalibrate_fader_button.signal_clicked().connect (sigc::mem_fun (*this, &MackieControlProtocolGUI::recalibrate_faders));
+ backlight_button.signal_clicked().connect (sigc::mem_fun (*this, &MackieControlProtocolGUI::toggle_backlight));
+
+ touch_sensitivity_adjustment.signal_value_changed().connect (sigc::mem_fun (*this, &MackieControlProtocolGUI::touch_sensitive_change));
+ touch_sensitivity_scale.set_update_policy (Gtk::UPDATE_DISCONTINUOUS);
+
l = manage (new Gtk::Label (_("Button click")));
l->set_alignment (1.0, 0.5);
table->attach (*l, 0, 1, 1, 2, AttachOptions(FILL|EXPAND), AttachOptions (0));
@@ -154,7 +160,6 @@ MackieControlProtocolGUI::MackieControlProtocolGUI (MackieControlProtocol& p)
ipmidi_base_port_spinner.set_sensitive (_cp.device_info().uses_ipmidi());
ipmidi_base_port_adjustment.signal_value_changed().connect (sigc::mem_fun (*this, &MackieControlProtocolGUI::ipmidi_spinner_changed));
-
table->attach (discover_button, 1, 2, 8, 9, AttachOptions(FILL|EXPAND), AttachOptions (0));
discover_button.signal_clicked().connect (sigc::mem_fun (*this, &MackieControlProtocolGUI::discover_clicked));
@@ -562,3 +567,22 @@ MackieControlProtocolGUI::discover_clicked ()
/* this should help to get things started */
_cp.midi_connectivity_established ();
}
+
+void
+MackieControlProtocolGUI::recalibrate_faders ()
+{
+ _cp.recalibrate_faders ();
+}
+
+void
+MackieControlProtocolGUI::toggle_backlight ()
+{
+ _cp.toggle_backlight ();
+}
+
+void
+MackieControlProtocolGUI::touch_sensitive_change ()
+{
+ int sensitivity = (int) touch_sensitivity_adjustment.get_value ();
+ _cp.set_touch_sensitivity (sensitivity);
+}
diff --git a/libs/surfaces/mackie/gui.h b/libs/surfaces/mackie/gui.h
index 6fc0352b65..323c9e600d 100644
--- a/libs/surfaces/mackie/gui.h
+++ b/libs/surfaces/mackie/gui.h
@@ -109,6 +109,9 @@ class MackieControlProtocolGUI : public Gtk::Notebook
Gtk::Button discover_button;
void discover_clicked ();
+ void recalibrate_faders ();
+ void toggle_backlight ();
+ void touch_sensitive_change ();
};
}
diff --git a/libs/surfaces/mackie/mackie_control_protocol.cc b/libs/surfaces/mackie/mackie_control_protocol.cc
index 070283dc3a..e99cef8b86 100644
--- a/libs/surfaces/mackie/mackie_control_protocol.cc
+++ b/libs/surfaces/mackie/mackie_control_protocol.cc
@@ -1695,3 +1695,36 @@ MackieControlProtocol::clear_surfaces ()
Glib::Threads::Mutex::Lock lm (surfaces_lock);
surfaces.clear ();
}
+
+void
+MackieControlProtocol::set_touch_sensitivity (int sensitivity)
+{
+ sensitivity = min (9, sensitivity);
+ sensitivity = max (0, sensitivity);
+
+ Glib::Threads::Mutex::Lock lm (surfaces_lock);
+
+ for (Surfaces::const_iterator s = surfaces.begin(); s != surfaces.end(); ++s) {
+ (*s)->set_touch_sensitivity (sensitivity);
+ }
+}
+
+void
+MackieControlProtocol::recalibrate_faders ()
+{
+ Glib::Threads::Mutex::Lock lm (surfaces_lock);
+
+ for (Surfaces::const_iterator s = surfaces.begin(); s != surfaces.end(); ++s) {
+ (*s)->recalibrate_faders ();
+ }
+}
+
+void
+MackieControlProtocol::toggle_backlight ()
+{
+ Glib::Threads::Mutex::Lock lm (surfaces_lock);
+
+ for (Surfaces::const_iterator s = surfaces.begin(); s != surfaces.end(); ++s) {
+ (*s)->toggle_backlight ();
+ }
+}
diff --git a/libs/surfaces/mackie/mackie_control_protocol.h b/libs/surfaces/mackie/mackie_control_protocol.h
index b972dbad90..140fdd8996 100644
--- a/libs/surfaces/mackie/mackie_control_protocol.h
+++ b/libs/surfaces/mackie/mackie_control_protocol.h
@@ -171,6 +171,10 @@ class MackieControlProtocol
void notify_route_added (ARDOUR::RouteList &);
void notify_remote_id_changed();
+ void recalibrate_faders ();
+ void toggle_backlight ();
+ void set_touch_sensitivity (int);
+
/// rebuild the current bank. Called on route added/removed and
/// remote id changed.
void refresh_current_bank();
diff --git a/libs/surfaces/mackie/surface.cc b/libs/surfaces/mackie/surface.cc
index 3b57c33579..26526a57b1 100644
--- a/libs/surfaces/mackie/surface.cc
+++ b/libs/surfaces/mackie/surface.cc
@@ -995,3 +995,75 @@ Surface::notify_metering_state_changed()
(*s)->notify_metering_state_changed ();
}
}
+
+void
+Surface::reset ()
+{
+ if (_port) {
+ /* reset msg for Mackie Control */
+ MidiByteArray msg (8, MIDI::sysex, 0x00, 0x00, 0x66, 0x14, 0x08, 0x00, MIDI::eox);
+ _port->write (msg);
+ msg[4] = 0x15; /* reset Mackie XT */
+ _port->write (msg);
+ msg[4] = 0x10; /* reset Logic Control */
+ _port->write (msg);
+ msg[4] = 0x11; /* reset Logic Control XT */
+ _port->write (msg);
+ }
+}
+
+void
+Surface::toggle_backlight ()
+{
+ if (_port) {
+ int onoff = random() %2;
+ MidiByteArray msg (8, MIDI::sysex, 0x00, 0x00, 0x66, 0x14, 0x0a, onoff, MIDI::eox);
+ _port->write (msg);
+ msg[4] = 0x15; /* reset Mackie XT */
+ _port->write (msg);
+ msg[4] = 0x10; /* reset Logic Control */
+ _port->write (msg);
+ msg[4] = 0x11; /* reset Logic Control XT */
+ _port->write (msg);
+ }
+}
+
+void
+Surface::recalibrate_faders ()
+{
+ if (_port) {
+ MidiByteArray msg (8, MIDI::sysex, 0x00, 0x00, 0x66, 0x14, 0x09, 0x00, MIDI::eox);
+ _port->write (msg);
+ msg[4] = 0x15; /* reset Mackie XT */
+ _port->write (msg);
+ msg[4] = 0x10; /* reset Logic Control */
+ _port->write (msg);
+ msg[4] = 0x11; /* reset Logic Control XT */
+ _port->write (msg);
+ }
+}
+
+void
+Surface::set_touch_sensitivity (int sensitivity)
+{
+ /* NOTE: assumed called from GUI code, hence sleep() */
+
+ /* sensitivity already clamped by caller */
+
+ if (_port) {
+ MidiByteArray msg (9, MIDI::sysex, 0x00, 0x00, 0x66, 0x14, 0x0e, 0xff, sensitivity, MIDI::eox);
+
+ for (int fader = 0; fader < 9; ++fader) {
+ msg[6] = fader;
+
+ _port->write (msg);
+ msg[4] = 0x15; /* reset Mackie XT */
+ _port->write (msg);
+ msg[4] = 0x10; /* reset Logic Control */
+ _port->write (msg);
+ msg[4] = 0x11; /* reset Logic Control XT */
+
+ g_usleep (1000); /* milliseconds */
+ }
+ }
+}
diff --git a/libs/surfaces/mackie/surface.h b/libs/surfaces/mackie/surface.h
index eab58e6a9f..2473930528 100644
--- a/libs/surfaces/mackie/surface.h
+++ b/libs/surfaces/mackie/surface.h
@@ -115,6 +115,13 @@ public:
void display_timecode (const std::string & /*timecode*/, const std::string & /*timecode_last*/);
+ /// sends MCP "reset" message to surface
+ void reset ();
+
+ void recalibrate_faders ();
+ void toggle_backlight ();
+ void set_touch_sensitivity (int);
+
/**
This is used to calculate the clicks per second that define
a transport speed of 1.0 for the jog wheel. 100.0 is 10 clicks