Problem
The Fireface 400's JACK/ALSA channel order under snd_fireface is not stable. The ADAT (and S/PDIF) block sometimes comes before the analog AN1–AN8 block and sometimes after it. The operator reports this as expected behaviour at this point.
scripts/ff400.sh hardcodes one of the two orders, ADAT first (comment from line 42 onward, "confirmed empirically"; CHNAME at lines 46 and 125). It then writes that onto the ports with jack_alias (lines 130–131). On a boot where the order is the other one, every analog port is labelled ADAT and vice versa. Because the aliases look like driver output, jack_lsp -A is then read as evidence of physical routing.
That happened 2026-09-14 on pupu (192.168.9.27: snd_fireface, kernel 7.2.4-rt3, JACK via ALSA). The order that boot was analog first, measured two ways:
- A silent 18-channel
jack_rec: capture_1..8 carry an analog floor (−107…−112 dBFS, plus room noise on the mic input), and capture_9..18 read exact digital zero.
- A −60 dBFS 1 kHz tone on
playback_1 and on playback_2: the FF400's meter:stream-input and meter:analog-output rise on the same index, and the tone arrives on the analog input wired to that output.
The script's aliases were wrong for that boot, and the first probe drove an ADAT port. Any fixed table, in either direction, is wrong on some boots.
A second, separate problem with its rig copy (ff400-card1.sh): the init path forces mic phantom power off (numid=90 off,off), and pupu's measurement mic on IN1 needs it on.
Places to check
- What moves the order: boot, driver load, FireWire bus reset, JACK restart. Knowing when it can change decides when it must be re-checked.
- Silent detection that worked on pupu: with nothing connected to ADAT/S/PDIF, those captures read exact digital zero, and the analog inputs never do (a −107 dBFS floor is ~37 LSB at 24-bit). This breaks as soon as something is connected to an ADAT or S/PDIF input.
- The playback order has so far matched the capture order when both were checked; that is an observation, not a guarantee.
What must be true
What makes the check fail
On a boot with each order, run the script, then drive playback_1 at a low level. The check must go red if the alias shown for system:playback_1 names anything other than the port that carried the tone. Testing only on a boot with the script's hardcoded order cannot go red.
Problem
The Fireface 400's JACK/ALSA channel order under
snd_firefaceis not stable. The ADAT (and S/PDIF) block sometimes comes before the analog AN1–AN8 block and sometimes after it. The operator reports this as expected behaviour at this point.scripts/ff400.shhardcodes one of the two orders, ADAT first (comment from line 42 onward, "confirmed empirically";CHNAMEat lines 46 and 125). It then writes that onto the ports withjack_alias(lines 130–131). On a boot where the order is the other one, every analog port is labelled ADAT and vice versa. Because the aliases look like driver output,jack_lsp -Ais then read as evidence of physical routing.That happened 2026-09-14 on pupu (192.168.9.27:
snd_fireface, kernel 7.2.4-rt3, JACK via ALSA). The order that boot was analog first, measured two ways:jack_rec:capture_1..8carry an analog floor (−107…−112 dBFS, plus room noise on the mic input), andcapture_9..18read exact digital zero.playback_1and onplayback_2: the FF400'smeter:stream-inputandmeter:analog-outputrise on the same index, and the tone arrives on the analog input wired to that output.The script's aliases were wrong for that boot, and the first probe drove an ADAT port. Any fixed table, in either direction, is wrong on some boots.
A second, separate problem with its rig copy (
ff400-card1.sh): the init path forces mic phantom power off (numid=90 off,off), and pupu's measurement mic on IN1 needs it on.Places to check
What must be true
docs/rigs/<rig>.md,scripts/rig/hosts/<rig>.envin PR docs(rig): one runbook and scripts for testing binaries on a rig #441). PR docs(rig): one runbook and scripts for testing binaries on a rig #441's scripts check the analog block's position silently and refuse to emit when it is not where the profile expects.What makes the check fail
On a boot with each order, run the script, then drive
playback_1at a low level. The check must go red if the alias shown forsystem:playback_1names anything other than the port that carried the tone. Testing only on a boot with the script's hardcoded order cannot go red.