summaryrefslogtreecommitdiff
path: root/libs/surfaces/mackie/meter.cc
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2012-06-01 12:56:20 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2012-06-01 12:56:20 +0000
commitba5e71b50f53c97c1ce806d9582c4c32970bdcf6 (patch)
tree62e95853f436d4bb5dc1514425fb2164f7adba49 /libs/surfaces/mackie/meter.cc
parentbc3aea6f93edf23c19dc672dd5b1f44bca71f571 (diff)
MCP: Patch from Rodrigo that:
* implements Metering on/off through Button::Read as per Seablade's suggestion. I choose this button as it's the "Show meters" button in Traktion; * removes redundant code from Meter::update_transport_rolling(); * renames Meter::update_transport_rolling() to Meter::notify_metering_state_changed(); * renamed Surface::notify_transport_state_changed() to Surface::notify_metering_state_changed(); * renamed Strip::notify_transport_state_changed() to Strip::notify_metering_state_changed(); * created MackieControlProtocol::notify_metering_state_changed() and made MackieControlProtocol::notify_transport_state_changed() use it; * implemented turning off of timecode display and two char display in Surface::zero_all (); * implemented master fader zeroing in Surface::zero_all (); * calling Surfaces->zero_all() at MackieControlProtocol destructor; * implemented restore of 2nd LCD line content after metering being active. git-svn-id: svn://localhost/ardour2/branches/3.0@12520 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/surfaces/mackie/meter.cc')
-rw-r--r--libs/surfaces/mackie/meter.cc61
1 files changed, 14 insertions, 47 deletions
diff --git a/libs/surfaces/mackie/meter.cc b/libs/surfaces/mackie/meter.cc
index d4842aa5ca..fe11357d3a 100644
--- a/libs/surfaces/mackie/meter.cc
+++ b/libs/surfaces/mackie/meter.cc
@@ -22,7 +22,6 @@
#include "pbd/compose.h"
#include "ardour/debug.h"
-#include "mackie_control_protocol.h"
#include "meter.h"
#include "surface.h"
#include "surface_port.h"
@@ -42,54 +41,26 @@ Meter::factory (Surface& surface, int id, const char* name, Group& group)
}
void
-Meter::update_transport_rolling(Surface& surface)
-{
- bool transport_is_rolling = (surface.mcp().get_transport_speed () != 0.0f);
-
- if (_transport_is_rolling == transport_is_rolling) {
- return;
- }
- if (transport_is_rolling) {
- MidiByteArray enable_msg;
-
- // sysex header
- enable_msg << surface.sysex_hdr();
-
- // code for Channel Meter Enable Message
- enable_msg << 0x20;
-
- // Channel identification
- enable_msg << id();
-
- // Enabling level meter on LCD, peak hold display on horizontal meter and signal LED
- enable_msg << 0x07;
-
- // sysex trailer
- enable_msg << MIDI::eox;
-
- surface.write (enable_msg);
-
- } else {
- MidiByteArray disable_msg;
+Meter::notify_metering_state_changed(Surface& surface, bool transport_is_rolling, bool metering_active)
+{
+ MidiByteArray msg;
- // sysex header
- disable_msg << surface.sysex_hdr();
+ // sysex header
+ msg << surface.sysex_hdr();
- // code for Channel Meter Enable Message
- disable_msg << 0x20;
+ // code for Channel Meter Enable Message
+ msg << 0x20;
- // Channel identification
- disable_msg << id();
+ // Channel identification
+ msg << id();
- // Disabling level meter on LCD, peak hold display on horizontal meter and signal LED
- disable_msg << 0x00;
+ // Enable (0x07) / Disable (0x00) level meter on LCD, peak hold display on horizontal meter and signal LED
+ msg << ((transport_is_rolling && metering_active) ? 0x07 : 0x00);
- // sysex trailer
- disable_msg << MIDI::eox;
+ // sysex trailer
+ msg << MIDI::eox;
- surface.write (disable_msg);
- }
- _transport_is_rolling = transport_is_rolling;
+ surface.write (msg);
}
void
@@ -99,10 +70,6 @@ Meter::send_update (Surface& surface, float dB)
// DEBUG_TRACE (DEBUG::MackieControl, string_compose ("Meter ID %1 dB %2\n", id(), dB));
- if (!_transport_is_rolling) {
- return;
- }
-
if (dB < -70.0f) {
def = 0.0f;
} else if (dB < -60.0f) {