X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=libs%2Fsurfaces%2Fmackie%2Ffader.cc;h=33e1e4c29faf34d8df107f56b57073c6c0d4da79;hb=548989fc75ba08912efe2bc48d24af5eb95c790d;hp=a55c23c12968e8dd33e3be5852367d1c24dc8e8c;hpb=5097af6a13828adf9f1bb87bd8bd8557963c0d7e;p=ardour.git diff --git a/libs/surfaces/mackie/fader.cc b/libs/surfaces/mackie/fader.cc index a55c23c129..33e1e4c29f 100644 --- a/libs/surfaces/mackie/fader.cc +++ b/libs/surfaces/mackie/fader.cc @@ -17,12 +17,20 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ +#include + +#include "pbd/compose.h" + +#include "ardour/debug.h" + #include "fader.h" #include "surface.h" #include "control_group.h" #include "mackie_control_protocol.h" +using namespace ArdourSurface; using namespace Mackie; +using namespace PBD; Control* Fader::factory (Surface& surface, int id, const char* name, Group& group) @@ -45,11 +53,20 @@ Fader::set_position (float normalized) MidiByteArray Fader::update_message () { - if (MackieControlProtocol::instance()->flip_mode() == MackieControlProtocol::Zero) { + MackieControlProtocol* mcp = MackieControlProtocol::instance (); + if (mcp && mcp->flip_mode() == MackieControlProtocol::Zero) { /* do not send messages to move the faders when in this mode */ return MidiByteArray(); } - int posi = int (0x3fff * position); - return MidiByteArray (3, 0xe0 | id(), posi & 0x7f, posi >> 7); + int posi = lrintf (16384.0 * position); + + if (posi == last_update_position) { + return MidiByteArray(); + } + + last_update_position = posi; + + DEBUG_TRACE (DEBUG::MackieControl, string_compose ("generate fader message for position %1 (%2)\n", position, posi)); + return MidiByteArray (3, 0xe0 + id(), posi & 0x7f, posi >> 7); }