put all of the Mackie control surface code into the ArdourSurface namespace
[ardour.git] / libs / surfaces / mackie / fader.cc
index bcb8f73ca6c9a776bae4a7f9d4c0280782a951e1..cc43bf3387e3062cda1690215f1e220d8a7dca47 100644 (file)
        Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
+#include <cmath>
+
 #include "fader.h"
 #include "surface.h"
 #include "control_group.h"
+#include "mackie_control_protocol.h"
 
+using namespace ArdourSurface;
 using namespace Mackie;
 
 Control*
@@ -44,6 +48,12 @@ Fader::set_position (float normalized)
 MidiByteArray
 Fader::update_message ()
 {
-       int posi = int (0x3fff * position);
-       return MidiByteArray  (3, 0xe0 | id(), posi & 0x7f, posi >> 7);
+       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 = lrintf (0x3fff * position);
+       return MidiByteArray  (3, 0xe0 + id(), posi & 0x7f, posi >> 7);
 }