Fixed generic MIDI program change event size to two bytes (fixes #6426)
authorLen Ovens <len@ovenwerks.net>
Fri, 10 Jul 2015 01:23:14 +0000 (18:23 -0700)
committerPaul Davis <paul@linuxaudiosystems.com>
Fri, 10 Jul 2015 20:52:43 +0000 (16:52 -0400)
libs/surfaces/generic_midi/midicontrollable.cc

index b427bef03bcfadb3f79dd1e429c5a573bd2c972f..89df2cbdeaf2f61016f681b0c1a7dc169f3ad381 100644 (file)
@@ -470,12 +470,16 @@ MIDIControllable::write_feedback (MIDI::byte* buf, int32_t& bufsize, bool /*forc
         DEBUG_TRACE (DEBUG::GenericMidi, string_compose ("Feedback: %1 %2\n", control_description(), current_uri()));
 
        *buf++ = (0xF0 & control_type) | (0xF & control_channel);
-       
+       int ev_size = 3;
        switch (control_type) {
        case MIDI::pitchbend:
                *buf++ = int (gm) & 127;
                *buf++ = (int (gm) >> 7) & 127;
                break;
+       case MIDI::program:
+               *buf++ = control_additional; /* program number */
+               ev_size = 2;
+               break;
        default:
                *buf++ = control_additional; /* controller number */
                *buf++ = gm;
@@ -484,7 +488,7 @@ MIDIControllable::write_feedback (MIDI::byte* buf, int32_t& bufsize, bool /*forc
        DEBUG_TRACE (DEBUG::GenericMidi, string_compose ("MIDI out: Type %1 Channel %2 Bytes %3 %4\n", (int) control_type, (int) control_channel , (int) *(buf - 2), (int) *(buf - 1)));
 
        last_value = gm;
-       bufsize -= 3;
+       bufsize -= ev_size;
 
        return buf;
 }