[LAD] RFT: implementation for MOTU FireWire series including CueMix DSP and CueMix FX

Takashi Sakamoto o-takashi at sakamocchi.jp
Sun Oct 31 04:20:39 CET 2021

RFT: implementation of MOTU FireWire series CueMix DSP and CueMix FX

Hi all,

After investigation for protocols of MOTU FireWire series including
features of CueMix DSP and CueMix FX, I've written implementation
corresponding to the features in snd-firewire-ctl-services project[1].
If you are enough interested in it, would you please test the

The first aim of this test request is to check whether the protocol
implementation works as well out of my development environment.

# Disclaimer

 * The aim of the work is to reveal relevant protocols so adequately and
   write the implementation. It is out of my scope to produce user-friendly
   applications such as GUI with cool user-delighted look and feel. (This
   is also the reason that the message is so long for general users.)

# Acknowledgment

When I made investigation plan for the protocols and evaluated the result
of investigation, documents included in ffado source code[13] is helpful.
The documentation includes a part of the result, while some parts are
newly revealed in this time. I appreciate for document writers.

# Current status

 * Below models are supported and I tested
  * 828
  * 896
  * 828mk2
  * 896hd
  * 8 pre
  * Ultralite
  * 4 pre
  * Audio Express
  * 828mk3 (FireWire only/Hybrid)
  * Ultralite mk3 (FireWire only/Hybrid)
 * The most of control functions are available via ALSA control interface
 * Hardware metering support
 * Interaction support between on-board control component such as knob,
   utilizing notification mechanism of ALSA control interface

# Requirements

For the test, you need to solve long list of requirements since the
protocol implementation is new and lays down user space as well as kernel
space. I'm sorry for testers to discourage your motivation, but they are

 * Linux kernel v5.13 or later
  * a commit 66c6d1ef86ff ('ALSA: control: Add memory consumption limit to
    user controls')[2] is required since many user-defined control element
    sets are used.
 * Installation of backport codes for ALSA firewire stack
  * They comes from Linux kernel v5.16 prepatch (not released yet).
  * Please follow to instructions in my remote repository[3]
 * Installation of alsa-gobject v0.2.1 or later.
  * alsa-gobject project[4] provides libraries which perform as glue for
    several kind of language bindings to use UAPI of Linux sound subsystem.
    For detail, please refer to release announcement[5].
 * Installation of libhinawa topic branch
  * libhinawa project[6] also provides library as glue for UAPI of ALSA
    firewire stack.
  * The topic branch (topic/motu-mixer-ioctl)[7] includes new APIs to use
    functions added in the kernel v5.16 prepatch.
 * Rust v1.51 or later
  * I use Rust programming language for the protocol implementation in user
    space side.
 * Build topic branch of snd-firewire-ctl-services
  * snd-firewire-ctl-services project[8] includes the series of
    implementation for protocols specific to ASICs/Vendors/Models.
    Additionally, as reference of service programs, it includes runtime
    implementation based on ALSA control interface and ALSA Sequencer
  * The topic branch ('topic/motu-mixer-ioctl') includes implementation
    for the test.

# Test procedure

When the above requirements are satisfied, the service program can be build
by below command line. It takes a bit long than compiling with C language
since Rust compiler does more work than C (mainly due to type inference and
lifetime check for safe runtime).

 $ cargo build -p snd-firewire-ctl-services

The service program for MOTU FireWire series runs by below command line:

 $ cargo run --bin snd-firewire-motu-ctl-service CARD_ID

The CARD_ID is the numeric ID of sound card corresponding to your device.
You need to load ALSA firewire-motu driver in advance:

 $ sudo modprobe snd-firewire-motu
 $ cat /proc/asound/cards
     2 [UltraLiteMk3   ]: FW-MOTU - UltraLiteMk3
                          MOTU UltraLiteMk3 (version:100800), GUID ...

In the above example, CARD_ID should be 2.

When the service program runs, you can see control elements via ALSA
control interface. You can operate them by usual tools of ALSA control
application, but I prefer 'qashctl' in 'qastools' project[11].

Due to specification of protocols defined by MOTU, notifications from the
device for some controls are firstly available when isochronous packets
are transmitted by the device. Please run any of ALSA PCM applications
when testing.

The aim of the request is whether the service program can be built and run
out of my development environment. So I don't expect you so much. However,
If you are interested, please check the other parts about which I concern:

 * The range of value for each control is valid or not.
 * Inverse evaluation of each control with boolean value.
 * The lack of control which should be produced by the service program.

# Filing issues

 * Please use issue service in github.com[10].
 * Preferable issues
  * The service program aborts when I operate control A.
  * The service program doesn't interact with on-board operation B.
  * The service program looks to be frozen when I operate C.
  * The behaviour of control element D is odd.
 * Unexpected issues
  * Why device A is not supported
    * It's preferable for you to take your time to cooperate with me if you
      wish. It might take a long time since the implementation lays down
      user space and kernel space.
    * If so, please file the issue to my remote repository for kernel
  * Why we have no GUI with cool look and feel
    * It's your work. The GUI application might be an ALSA control
      application which interacts with the service program.
  * I can not get which control value corresponds to actual ports
    * It is restriction under current design of ALSA control interface.
      We need to work for any extension to the design.
  * The name of control B is not user-friendly.
    * The name of controls are not fixed yet since we have few name
      convention for controls in studio-use equipments. It might
      corresponds to discussion in ALSA upstream. In my opinion,
      Linux audio developers have been enough lazy to the issue for
      recent decade.

[1] https://github.com/alsa-project/snd-firewire-ctl-services/
[2] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=66c6d1ef86ff
[3] https://github.com/takaswie/snd-firewire-improve
[4] https://github.com/alsa-project/alsa-gobject/
[5] https://lore.kernel.org/alsa-devel/20200623093239.GA68404@workstation/
[6[ https://github.com/alsa-project/libhinawa
[7] https://github.com/alsa-project/libhinawa/tree/topic/motu-mixer-ioctl
[8] https://github.com/alsa-project/snd-firewire-ctl-services/
[9] https://github.com/alsa-project/snd-firewire-ctl-services/tree/topic/motu-mixer-ioctl
[10] https://github.com/alsa-project/snd-firewire-ctl-services/issues
[11] https://gitlab.com/sebholt/qastools
[12] https://github.com/takaswie/snd-firewire-improve/issues
[13] https://web.archive.org/web/20110704073441/http://subversion.ffado.org/browser/trunk/libffado/doc


Takashi Sakamoto

More information about the Linux-audio-dev mailing list