remove cruft
[ardour.git] / libs / surfaces / mackie / meter.cc
index d4842aa5caef36d4af22cda42f99a38f615b634d..c9eea4b28f745656ad2d9a26f8313018e6b70e44 100644 (file)
 #include "pbd/compose.h"
 #include "ardour/debug.h"
 
-#include "mackie_control_protocol.h"
 #include "meter.h"
 #include "surface.h"
 #include "surface_port.h"
 #include "control_group.h"
+#include "mackie_control_protocol.h"
 
-using namespace Mackie;
 using namespace PBD;
+using namespace ArdourSurface;
+using namespace Mackie;
 
 Control*
 Meter::factory (Surface& surface, int id, const char* name, Group& group)
@@ -41,55 +42,28 @@ Meter::factory (Surface& surface, int id, const char* name, Group& group)
        return m;
 }
 
-void 
-Meter::update_transport_rolling(Surface& surface)
+void
+Meter::notify_metering_state_changed(Surface& surface, bool transport_is_rolling, bool metering_active)
 {
-       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;
-               
-               // sysex header
-               disable_msg << surface.sysex_hdr();
-               
-               // code for Channel Meter Enable Message
-               disable_msg << 0x20;
-               
-               // Channel identification
-               disable_msg << id();
-               
-               // Disabling level meter on LCD, peak hold display on horizontal meter and signal LED
-               disable_msg << 0x00;
-               
-               // sysex trailer
-               disable_msg << MIDI::eox;
-               
-               surface.write (disable_msg);            
-       }
-       _transport_is_rolling = transport_is_rolling;
+       MidiByteArray msg;
+
+       // sysex header
+       msg << surface.sysex_hdr();
+
+       // code for Channel Meter Enable Message
+       msg << 0x20;
+
+       // Channel identification
+       msg << id();
+
+       // Enable (0x07) / Disable (0x00) level meter on LCD, peak hold display on horizontal meter and signal LED
+       _enabled = ((surface.mcp().device_info().has_separate_meters() || transport_is_rolling) && metering_active);
+       msg << (_enabled ? 0x07 : 0x00);
+
+       // sysex trailer
+       msg << MIDI::eox;
+
+       surface.write (msg);
 }
 
 void
@@ -98,11 +72,7 @@ Meter::send_update (Surface& surface, float dB)
        float def = 0.0f; /* Meter deflection %age */
 
        // 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) {
@@ -120,19 +90,19 @@ Meter::send_update (Surface& surface, float dB)
        } else {
                def = 115.0f;
        }
-       
+
        /* 115 is the deflection %age that would be
           when dB=6.0. this is an arbitrary
           endpoint for our scaling.
        */
 
        MidiByteArray msg;
-       
+
        if (def > 100.0f) {
                if (!overload_on) {
                        overload_on = true;
                        surface.write (MidiByteArray (2, 0xd0, (id() << 4) | 0xe));
-                       
+
                }
        } else {
                if (overload_on) {
@@ -140,11 +110,11 @@ Meter::send_update (Surface& surface, float dB)
                        surface.write (MidiByteArray (2, 0xd0, (id() << 4) | 0xf));
                }
        }
-       
+
        /* we can use up to 13 segments */
 
        int segment = lrintf ((def/115.0) * 13.0);
-       
+
        surface.write (MidiByteArray (2, 0xd0, (id()<<4) | segment));
 }