MCP: fix assigment of outbound sysex messages, and don't drain port->selectable(...
authorPaul Davis <paul@linuxaudiosystems.com>
Tue, 29 May 2012 23:30:13 +0000 (23:30 +0000)
committerPaul Davis <paul@linuxaudiosystems.com>
Tue, 29 May 2012 23:30:13 +0000 (23:30 +0000)
git-svn-id: svn://localhost/ardour2/branches/3.0@12483 d708f5d6-7413-0410-9779-e7cbd77b26cf

libs/surfaces/mackie/mackie_control_protocol.cc
libs/surfaces/mackie/surface.cc

index 0fd9743a7d41fa79eb48a34ad758198f344983a4..61225b309a9b9fc9ca5b01c3eee36d5b3b7b68e3 100644 (file)
@@ -1133,7 +1133,17 @@ MackieControlProtocol::midi_input_handler (IOCondition ioc, MIDI::Port* port)
 
        if (ioc & IO_IN) {
 
-               CrossThreadChannel::drain (port->selectable());
+               /* Devices using regular JACK MIDI ports will need to have
+                  the x-thread FIFO drained to avoid burning endless CPU.
+
+                  Devices using ipMIDI have port->selectable() as the same
+                  file descriptor that data arrives on, so doing this
+                  for them will simply throw all incoming data away.
+               */
+
+               if (!_device_info.uses_ipmidi()) {
+                       CrossThreadChannel::drain (port->selectable());
+               }
 
                DEBUG_TRACE (DEBUG::MackieControl, string_compose ("data available on %1\n", port->name()));
                framepos_t now = session->engine().frame_time();
index 0cc0f02a77fb8ab18dba52181d5ba46056e7b9fc..0a5ea09e3eb56d908e4e7aab635db25de357599a 100644 (file)
@@ -409,9 +409,9 @@ Surface::handle_midi_sysex (MIDI::Parser &, MIDI::byte * raw_bytes, size_t count
         */
 
        if (_stype == mcu) {
-               mackie_sysex_hdr[3] = bytes[4];
+               mackie_sysex_hdr[4] = bytes[4];
        } else {
-               mackie_sysex_hdr_xt[3] = bytes[4];
+               mackie_sysex_hdr_xt[4] = bytes[4];
        }
 
        switch (bytes[5]) {