[alsa-devel] [PATCH 2/3] fireface: add transaction support
Clemens Ladisch
clemens at ladisch.de
Tue Dec 8 13:36:16 CET 2015
Takashi Sakamoto wrote:
> 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.
The code takes care to send entire MIDI messages.
Is that actually required by the FF? (Windows does not have a raw MIDI
interface, so this problem could not happen there.)
Regards,
Clemens
More information about the Alsa-devel
mailing list