leave a ToDo note for the mackie surface
[ardour.git] / libs / surfaces / mackie / fader.cc
index 80928d85ebc6c2b1625868e6813e82a6d72e75a5..33e1e4c29faf34d8df107f56b57073c6c0d4da79 100644 (file)
        Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
+#include <cmath>
+
+#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)
@@ -34,3 +43,30 @@ Fader::factory (Surface& surface, int id, const char* name, Group& group)
        return f;
 }
 
+MidiByteArray
+Fader::set_position (float normalized)
+{
+       position = normalized;
+       return update_message ();
+}
+
+MidiByteArray
+Fader::update_message ()
+{
+       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 (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);
+}