On Dec 08 2015 20:29, Clemens Ladisch wrote: > Takashi Sakamoto wrote: >> On Dec 08 2015 19:22, Clemens Ladisch wrote: >>> Takashi Sakamoto wrote: >>>> + /* Calculate consume bytes. */ >>>> + consume = calculate_message_bytes(status); >>>> + if (consume <= 0) >>>> + return; >>> >>> As far as I can see, sending one of the "undefined" bytes can stop the >>> stream permanently. Invalid bytes need to be acked to ignore/remove >>> them. >> >> Exactly. We should find better way to handle such messages. Do you have >> any good ideas? > > Call snd_rawmidi_transmit_ack(, 1) and continue. $ git diff diff --git a/sound/firewire/fireface/fireface-transaction.c b/sound/firewire/fireface/fireface-transaction.c index 07a2b9c..6b8c7a8 100644 --- a/sound/firewire/fireface/fireface-transaction.c +++ b/sound/firewire/fireface/fireface-transaction.c @@ -148,8 +148,10 @@ static void transmit_midi_msg(struct snd_ff *ff, unsigned int port) /* Calculate consume bytes. */ consume = calculate_message_bytes(status); - if (consume <= 0) + if (consume <= 0) { + snd_rawmidi_transmit_ack(substream, 1); return; + } /* On running-status. */ if ((*buf & 0x80) != 0x80) { Hm. This looks simple and works better, while I suspect that this is appropriate to device driver, because this idea drops the message from userspace. This is against a principle that device drivers just pass data from a side to another side without censoring and modification. I think it better to transfer the message to the device, even if it's invalid in MIDI spec. It's what the userspace wants. Thanks Takashi Sakamoto _______________________________________________ Alsa-devel mailing list Alsa-devel@xxxxxxxxxxxxxxxx http://mailman.alsa-project.org/mailman/listinfo/alsa-devel