private void ProcessSysexMessage() { switch (_inputMessage[0]) { case (byte)CommandCode.REPORT_VERSION: SendVersionAsSysEx(); break; case (byte)CommandCode.REPORT_FIRMWARE: var key = ComputeCommandKey((byte)CommandCode.START_SYSEX, (byte)CommandCode.REPORT_FIRMWARE); CompleteTask(key, _inputMessage, 0, _cbInputMessage); break; case (byte)CommandCode.STRING_DATA: int bufferLength = (_cbInputMessage - 1) / 2; int i = 1; int j = 0; while (j < bufferLength) { // The string length will only be at most half the size of the // stored input buffer so we can decode the string within the buffer. _inputMessage[j] = _inputMessage[i]; i++; _inputMessage[j] += (byte)(_inputMessage[i] << 7); i++; j++; } var str = ConvertToString(_inputMessage, j); //.ProcessStringMessage(str); break; default: _dm.ProcessExtendedMessage(_inputMessage, _cbInputMessage); break; } }