Skip to content
  • Takashi Sakamoto's avatar
    585d7cba
    ALSA: firewire-lib: add helper functions for asynchronous transactions to transfer MIDI messages · 585d7cba
    Takashi Sakamoto authored
    
    
    Some models receive MIDI messages via IEEE 1394 asynchronous transactions.
    In this case, MIDI messages are transferred in fixed-length payload. It's
    nice that firewire-lib module has common helper functions.
    
    This commit implements this idea. Each driver adds
    'struct snd_fw_async_midi_port' in its instance structure. In probing,
    it should call snd_fw_async_midi_port_init() to initialize the
    structure with some parameters such as target address, the length
    of payload in a transaction and a pointer for callback function
    to fill the payload buffer. At 'struct snd_rawmidi_ops.trigger()'
    callback, it should call 'snd_fw_async_midi_port_run()' to start
    transactions. Each driver should ensure that the lifetime of MIDI
    substream continues till calling 'snd_fw_async_midi_port_finish()'.
    
    The helper functions support retries to transferring MIDI messages when
    transmission errors occur. When transactions are successful, the helper
    functions call 'snd_rawmidi_transmit_ack()' internally to consume MIDI
    bytes in the buffer. Therefore, Each driver is expected to use
    'snd_rawmidi_transmit_peek()' to tell the number of bytes to transfer to
    return value of 'fill' callback.
    
    Signed-off-by: default avatarTakashi Sakamoto <o-takashi@sakamocchi.jp>
    Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
    585d7cba
    ALSA: firewire-lib: add helper functions for asynchronous transactions to transfer MIDI messages
    Takashi Sakamoto authored
    
    
    Some models receive MIDI messages via IEEE 1394 asynchronous transactions.
    In this case, MIDI messages are transferred in fixed-length payload. It's
    nice that firewire-lib module has common helper functions.
    
    This commit implements this idea. Each driver adds
    'struct snd_fw_async_midi_port' in its instance structure. In probing,
    it should call snd_fw_async_midi_port_init() to initialize the
    structure with some parameters such as target address, the length
    of payload in a transaction and a pointer for callback function
    to fill the payload buffer. At 'struct snd_rawmidi_ops.trigger()'
    callback, it should call 'snd_fw_async_midi_port_run()' to start
    transactions. Each driver should ensure that the lifetime of MIDI
    substream continues till calling 'snd_fw_async_midi_port_finish()'.
    
    The helper functions support retries to transferring MIDI messages when
    transmission errors occur. When transactions are successful, the helper
    functions call 'snd_rawmidi_transmit_ack()' internally to consume MIDI
    bytes in the buffer. Therefore, Each driver is expected to use
    'snd_rawmidi_transmit_peek()' to tell the number of bytes to transfer to
    return value of 'fill' callback.
    
    Signed-off-by: default avatarTakashi Sakamoto <o-takashi@sakamocchi.jp>
    Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
Loading