From 8c73a62ee0800673cd28e5e0946d65212e163d3b Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Mon, 21 May 2012 19:02:44 +0000 Subject: split apart mackie meter messages when we have to send two, one to turn on/off the overload indicator and one to set the level. this avoids MIDI bridge issues with non-canonical MIDI messages git-svn-id: svn://localhost/ardour2/branches/3.0@12367 d708f5d6-7413-0410-9779-e7cbd77b26cf --- libs/surfaces/mackie/meter.cc | 18 +++++++++++------- libs/surfaces/mackie/meter.h | 4 ++-- libs/surfaces/mackie/strip.cc | 2 +- 3 files changed, 14 insertions(+), 10 deletions(-) (limited to 'libs/surfaces/mackie') diff --git a/libs/surfaces/mackie/meter.cc b/libs/surfaces/mackie/meter.cc index a4824d3612..82aef2bef8 100644 --- a/libs/surfaces/mackie/meter.cc +++ b/libs/surfaces/mackie/meter.cc @@ -40,8 +40,8 @@ Meter::factory (Surface& surface, int id, const char* name, Group& group) return m; } -MidiByteArray -Meter::update_message (float dB) +void +Meter::send_update (Surface& surface, float dB) { float def = 0.0f; /* Meter deflection %age */ @@ -75,12 +75,13 @@ Meter::update_message (float dB) if (def > 100.0f) { if (!overload_on) { overload_on = true; - msg << MidiByteArray (2, 0xd0, (id() << 4) | 0xe); + surface.write (MidiByteArray (2, 0xd0, (id() << 4) | 0xe)); + } } else { if (overload_on) { overload_on = false; - msg << MidiByteArray (2, 0xd0, (id() << 4) | 0xf); + surface.write (MidiByteArray (2, 0xd0, (id() << 4) | 0xf)); } } @@ -90,9 +91,12 @@ Meter::update_message (float dB) if (last_segment_value_sent != segment) { last_segment_value_sent = segment; - msg << MidiByteArray (2, 0xD0, (id()<<4) | segment); + surface.write (MidiByteArray (2, 0xD0, (id()<<4) | segment)); } - - return msg; } +MidiByteArray +Meter::zero () +{ + return MidiByteArray (2, 0xD0, (id()<<4 | 0)); +} diff --git a/libs/surfaces/mackie/meter.h b/libs/surfaces/mackie/meter.h index 1898bf8199..b94c7ac98a 100644 --- a/libs/surfaces/mackie/meter.h +++ b/libs/surfaces/mackie/meter.h @@ -35,9 +35,9 @@ public: , last_segment_value_sent (-1) , overload_on (false) {} - MidiByteArray update_message (float dB); + void send_update (Surface&, float dB); - MidiByteArray zero() { return update_message (-99999999.0); } + MidiByteArray zero(); static Control* factory (Surface&, int id, const char*, Group&); diff --git a/libs/surfaces/mackie/strip.cc b/libs/surfaces/mackie/strip.cc index 9e4c72eab4..132d93ed75 100644 --- a/libs/surfaces/mackie/strip.cc +++ b/libs/surfaces/mackie/strip.cc @@ -687,7 +687,7 @@ Strip::update_meter () { if (_meter) { float dB = const_cast (_route->peak_meter()).peak_power (0); - _surface->write (_meter->update_message (dB)); + _meter->send_update (*_surface, dB); } } -- cgit v1.2.3