[LAD] [sound/usb/line6] Question on PODHD Edit features like implementation

Aurryon SCHWARTZ social at staraurryon.com
Wed Jul 15 14:27:01 CEST 2020

Hello Takashi,

First of all, thank you for the feedback. To be honest, your suggestion
to use the sequencer layer that is below the MIDI layer is very
appealing to me. I would be able to use the sound subsystem as a
transport layer without worrying of being compliant with the MIDI
protocol: The Line6 Edit protocol is proprietary.

Please find below my new questions. Be prepared, I am newbie with the
ALSA subsystem ^^.

- My understanding is that in [2], you are directly using the Linux
firewire subsystem with your service from the userspace to parse or
write events from/to the device before sending them to ALSA kernel
subsystem. If i try to implement the same kind of process with libusb,
within the userspace, I will be confronted to the fact that the device
is already claimed(locked) by the kernel module snd-usb-podhd. If I read
[3] it seems that such mechanism are not existing for firewire and
therefore it is not possible to do the same with usb. Am I correct?

- If I check /proc/asound/hwdep, I have "00-00: config". This seems to
be more generic to ALSA subsystem than the audio/device module. In your
architecture in [2], is the ALSA hwdep dedicated to your sound card or
is it global to the ALSA subsystem?

- Why using specifically a model "device<->firewire subsystem
subsystem(kernel)<->application(userspace)" instead of something like
"device<->firewire subsystem (kernel)<->service(userspace)<-pipe/unix
socks->application(userspace)"? What are the pros and cons?

Thanks in advance,


[3] https://www.kernel.org/doc/html/latest/driver-api/firewire.html

> Hi,
> I'm a maintainer of ALSA firewire stack.
> On Tue, Jul 14, 2020 at 11:10:43PM +0200, Nicolas SCHWARTZ Aurryon wrote:
>>    I am looking to re implement and publish with the help of Wireshark a
>>    software like Line6 PODHD 500x Edit for my POD HD500X (modification of
>>    guitar pedal effects). To do this I need to claim the usb interface
>>    that is already used by the snd-usb-podhd and redo the initialisation,
>>    also already done by snd-usb-podhd. Therefore, to have both the audio
>>    and the pedal management I would need to modify the module mentioned
>>    above. This would aim to create a bridge between kernel and the
>>    userspace, that redirects the usb urb bulk requests that are not used
>>    by the audio part, to an interface (only isochronous is used after the
>>    init).
>>    In the objective to be merged upstream in the future, how should I
>>    proceed:
>>      * Use midi interfaces and create a fake one, knowing that the
>>        proprietary but readable protocol is not midi compliant?
>>      * Create a char device for the podhd pedal boards? Within the same
>>        module?
>>      * Other suggestions?
> Firstly, I apologize to address an idea against the above objective.
> In my opinion, if the ALSA hwdep device named as 'config' is available
> to receive the notification of pedal event in userspace application, you
> have another option to implement service program in userspace.
> The service program convert the pedal event to ALSA Sequencer event (e.g.
> snd_seq_ev_ctl_t[1]) and emit it to port. Another ALSA Sequencer
> applications can receive the event via the port.
> Even if it's not available via the 'config' ALSA hedep device, it's
> possible to add another ALSA hwdep device for your purpose. In this
> case, you need knowledge about convention of ioctl command in Linux
> kernel.
> For your information, recently I publish service program for audio and
> music units on IEEE 1394 bus to implements the above idea[2]. If you
> are interested, please refer to some illustrations in README.rst.
> ("Listener model (with help of drivers in ALSA firewire stack)" is
> similar to your case but it depicts the case of ALSA control. Not
> depicted, I utilize ALSA sequencer in service program for TASCAM FireWire
> series as well.)
> It's my pleasure if the above message is helpful to your work.
> (I know users/developers are eager to put codes into kernel space. I have
> no objection to itself. In a view of users, it's preferable because
> all codes in the same place, but it requires some efforts for them;
> e.g. write code for kernel land following to kernel code style, and
> maintain vendor-specific codes following to development cycle of Linux
> kernel. This is not so suitable in the case that the communication
> protocol is got by reverse-engineering effort and the target devices
> have slight differences in the protocol since modified code is not
> so quickly published than the code in user space.)
>>    In the same way, I am looking for suggestion regarding the data
>>    transmitted within this interface. Would something like struct {int
>>    message_len, char * data} be sufficient to be transmitted at every urb
>>    bulk request?
>>    Thanks in advance,
>>    Nicolas SCHWARTZ
>>    PS: I can share with you my test code and my current analysis on the
>>    messages sent/received by the pod when clicking on buttons/sending
>>    message from the PC, if needed.
> [1] https://www.alsa-project.org/alsa-doc/alsa-lib/structsnd__seq__ev__ctrl__t.html
> [2] https://github.com/alsa-project/snd-firewire-ctl-services
> Cheers
> Takashi Sakamoto

More information about the Linux-audio-dev mailing list