> > It's probably worthwhile pointing out at this juncture that (at least
> > theoretically) all the mixer and device setting controls are made available
> > via DBus by ffado-dbus-server.
> Where in the stack does that sit? Stanton's HSS1394 library handles
> device enumeration and encapsulating the MIDI messages into the HSS1394
> protocol on the Firewire network, so Mixxx only needs to ask it for a
> list of HSS1394 nodes and their attributes, open and close nodes,
> receive MIDI messages from them via a callback thread that the library
> creates and manages, and send MIDI data to them. (You can take a look at
> Mixxx's hss1394enumerator and hss1394controller here:
Ok, I think I'll need to read up on a few more details as to what this
Stanton device actually does and how it fits into mixxx (I'm totally
unfamilar with both).
FFADO's structure completely separates the streaming system from device
control (a distinction which makes sense given that the two use different
packet types on the wire). This means that on-board mixer controls, phantom
power switches and the like are handled by ffado-dbus-server/ffado-mixer,
while the task of getting audio and MIDI data to/from the device uses the
API defined in ffado.h (this is the API which JACK uses).
> From the looks of test-scs, it seems scs.h/cpp in FFADO does something
> similar, so unless you can tell me otherwise, I'm afraid we'll need
> access to that at least.
Again, I'm not all that familiar with the Stanton devices or test-scs.cpp
specifically, so what follows may be completely bogus. However, since we're
dealing with MIDI data it's not clear to me why you can't use the jack-MIDI
device provided by jackd, or (if you don't wish to be dependent on jack) the
MIDI-related components of the libffado API.
> (Are there user-oriented docs for ffado-dbus-mixer that explains what it
> offers and how to use it?)
Sadly no, not that I'm aware of. Note that "ffado-dbus-server" interfaces
with the device and provides the dbus controls for mixer components.
"ffado-mixer" is the GUI which uses those dbus controls to manipulate the
device. The ffado-mixer source code is probably the best reference for the
use of the dbus interface, although it's not much good if you don't know
Of course one could also just run ffado-mixer and see what controls it
provides. In the case of the stanton, I have no idea as to how complete the
> Incidentally, libffado as currently shipped with Debian Stable is only
> at v2.0.1, and testing is 2.0.99, so we will likely need to bundle ffado
> trunk with Mixxx anyway for the near future at least in order to get the
> SCS support.
That Debian Stable is at 2.0.1 would be due to that being the last release
made by FFADO. We are currently preparing to do a 2.1 some time soon, but
there are a few tickets we need to resolve first. I don't have an ETA on a
2.1 release yet.
In an attempt to clarify what FFADO provides I thought I'd explicitly
outline the different components of FFADO and what they're used for.
* ffado.h API: the API for streaming audio/MIDI data to/from the interface.
Currently the only known user of this API is the firewire driver in JACK.
The usual way to make use of this is use libffado via jackd
("jackd -d firewire ...") , making FFADO-supported devices immediately
accessible to JACK-enabled applications.
* ffado-dbus-server: this daemon creates a series of dbus controls
corresponding to configuration settings on the device. This encompasses
things like routing switches, onboard mixer faders, phantom power
switches and so on.
* ffado-mixer: this is a GUI interface to the dbus controls provided by
ffado-dbus-server. If ffado-dbus-server is not running when ffado-mixer
is started, it will be automatically started.
Both ffado-dbus-server and the code behind ffado.h communicate directly with
the device. However, they are manipulating distinct parts of the device so
there's no concurrency complications.