From: Rob B. <rb...@xs...> - 2012-04-28 08:39:26
|
all changes are within this function, except declarations unsigned char m_sysex_buffer[MIDI_TRANSMIT_BUFFER_SIZE]; int sysex_buffer_count; if you like i can send the full code as attachment bool sendAlsaSeqEvent(snd_seq_event_t *ev) { int bytes_to_send = 0; // decode it to the work buffer if((bytes_to_send = snd_midi_event_decode ( m_out_parser, m_work_buffer, MIDI_TRANSMIT_BUFFER_SIZE, ev)) < 0) { // failed to decode debugError(" Error decoding event for port %d(errcode=%d)", ev->dest.port, bytes_to_send); return false; } else { if (bytes_to_send == 1 && arguments.sysexbuf==1) { switch(m_work_buffer[0]) { case 0xF0: sysex_buffer_count=1; m_sysex_buffer[sysex_buffer_count-1]=m_work_buffer[0]; debugOutput(DEBUG_LEVEL_VERBOSE, "Sysexstart-Buffering\n"); break; case 0xf7: sysex_buffer_count++; m_sysex_buffer[sysex_buffer_count-1]=m_work_buffer[0]; debugOutput(DEBUG_LEVEL_VERBOSE,"SysexEnd-SendBuffer...length:%d\n",sysex_buffer_count); if(!m_device.writeHSS1394Message(GenericAVC::Stanton::ScsDevice::eMT_UserData,m_sysex_buffer, sysex_buffer_count+1)) { debugError("Failed to send message\n"); return false; } sysex_buffer_count=0; break; case 0xF9: case 0xFA: case 0xFB: case 0xFC: case 0xFD: case 0xFE: case 0xFF: debugOutput(DEBUG_LEVEL_VERBOSE,"Clock or other 1byte message received, send without buffering\n"); if(!m_device.writeHSS1394Message(GenericAVC::Stanton::ScsDevice::eMT_UserData,m_work_buffer,bytes_to_send )) { debugError("Failed to send message\n"); return false; } break; default: if (sysex_buffer_count > 0) { //yes we are buffering sysex_buffer_count++; m_sysex_buffer[sysex_buffer_count-1]=m_work_buffer[0]; } } } else { if(!m_device.writeHSS1394Message(GenericAVC::Stanton::ScsDevice::eMT_UserData,m_work_buffer,bytes_to_send )) { debugError("Failed to send message\n"); return false; } } } return true; }; |