Alesis (io14) support
First of all, Alesis refuses to provide any information. So everything we have is a device and a rough idea how things might be.
Current status
| Device | Capture | Playback | MIDI |
| io14 | working | working | in:OK, out:OK, though not verified |
| io26 | very likely, not tested | same as io14 | not tested |
| everything else | dunno | dunno | dunno |
Playback ISO streaming works, but outputs are muted. What do we know? It's a DICE-II device, so there's a crossbar switch (router) and an ARM processor. The playback channels (in DICE-II terminology AVS?) are routed to the ARM, mixed by a DSP algorithm and then routed back via the crossbar to the external outputs.
Alesis probably uses the TCAT firmware sources, so we might be able to retrieve the right CSR from the DICE-II reference code. Or not. They customize the firmware, so we somehow have to get the magic values...
Contact us if you think you can provide some input or if you have more Alesis hardware to check.
Mixer support
Mixer support seems feasible. The attached bus dumps contain the relevant information.
| CSR | Value | Function |
| ffc0 ffff e020 0458 | 0 | unmute all inputs on bus1 |
| ffc0 ffff e020 0458 | 00 00 00 01 | mute analog1 on bus1 |
| ffc0 ffff e020 045c | 0 | unmute all inputs on bus2 |
| 1 | mute analog1 on bus2 | |
| 2 | mute analog2 on bus2 | |
| 4 | mute analog3 on bus2 | |
| 8 | mute analog4 on bus2 | |
| c | mute analog5 on bus2 | |
| ffc0 ffff e020 056c | 00 00 00 01 | set SPDIF-out to analog3+4 |
| ffc0 ffff e020 056c | 00 00 00 00 | set SPDIF-out to analog1+2 |
| 00 00 00 02 | set SPDIF-out to analog5+6 | |
| ffc0 ffff e020 0468 | 00 00 00 03 | master-mute bus1 |
| ffc0 ffff e020 0468 | 00 00 00 00 | master-unmute bus1 (all busses) |
| ffc0 ffff e020 0468 | 00 00 00 0c | master-mute bus2 |
| ffc0 ffff e020 0564 | 00 00 00 fe | set bus1-out to -10dB |
| ffc0 ffff e020 0564 | 00 00 00 ff | set bus1-out to +4dB |
| ffc0 ffff e020 0564 | 00 00 00 fd | set bus2-out to -10dB |
| ffc0 ffff e020 0570 | 00 00 00 01 | headphones to analog3+4 |
| ffc0 ffff e020 0570 | 00 00 00 00 | headphones to analog1+2 |
| ffc0 ffff e020 0568 | 00 00 00 01 | select ADAT-In for In23+24 |
| ffc0 ffff e020 0568 | 00 00 00 00 | select SPDIF-In for In23+24 |
| ffc0 ffff e020 046c | 00 00 00 01 | solo analog1 (mute everything else) |
| ffc0 ffff e020 0458 | 00 ff ff fe | see above |
| ffc0 ffff e020 046c | 00 00 00 00 | no more solo (see above) |
| ffc0 ffff e020 0458 | 00 00 00 00 | (unmute) |
Device initialization
Currently, there's no playback. That's probably not related to the mixer, but to the use of the wrong ARX. We currently special case io14 to set the number of RXs to 1, but the device claims to have two.
It probably has two RXs, but RX0 has only six audio channels (dunno what this should be?). They are named Bus1L, Bus1R...Bus4R. Eight channels. The RX1 has eight channels but no channel names. This probably means we should use RX1 with the names from RX0? The win32 driver uses ISO channels 0,1,2, so with two TXs and two RXs, there's probably one RX or TX deactivated. I guess it's RX0, since TX0 (analog in) and TX1 (adat in) seem to be fine.
As shown below, the win32 driver uses RX0 with ISO channel 0, TX0 (analog in) with ISO channel 1 and TX1 (ADAT in) with ISO channel 2.
The win32 driver initializes as follows (from bus-sniff-device-init.txt)
| CSR | Value | Function |
| ffc1 ffff e000 0078 | 00 00 00 00 | Global-Enable set to false |
| ffc1 ffff e000 0074 | 00 00 02 0c | Clock selection |
| ff c0 00 03 00 00 00 00 | ||
| ff ff 00 00 00 00 00 00 | ||
| ffc1 ffff e000 03d0 | 00 00 00 00 | RX_ISOC_BASE ARX0 (set ARX0 ISO CHANNEL to 0) |
| ffc1 ffff e000 03d4 | 00 00 00 00 | RX_NB_AUDIO_BASE (set ARX0 to 0 channels) |
| ffc1 ffff e000 0198 | 00 00 00 01 | TX_ISOC_BASE ATX0 (set ATX0 ISO CHANNEL to 1) |
| ffc1 ffff e000 01a4 | 00 00 00 02 | TX_SPEED_BASE ATX0 (set ATX0 ISO SPEED to 2) |
| ffc1 ffff e000 02b0 | 00 00 00 02 | TX_ISOC_BASE ATX1 (set ATX1 ISO CHANNEL to 2) |
| ffc1 ffff e000 02bc | 00 00 00 02 | TX_SPEED_BASE ATX1 (set ATX1 ISO SPEED to 2) |
| ffc1 ffff e000 0078 | 00 00 00 01 | Global-Enable true |
| ffc1 ffff e000 0078 | 00 00 00 00 | Global-Enable false |
| ffc1 ffff e000 0074 | 00 00 02 0c | Clock selection |
Playback issue
Until now, there's no playback, neither MIDI nor audio. The whole device is a little bit mysterious. Firstly, it announces two ARXs, ARX0 with six channels but eight names, and ARX1 with no channels and no names.
01728759138: Debug (dice_avdevice.cpp)[ 618] showDevice: RX param space: 01728759146: Debug (dice_avdevice.cpp)[ 619] showDevice: Nb of recv : 2 01728759154: Debug (dice_avdevice.cpp)[ 621] showDevice: Receiver 0: 01728765524: Debug (dice_avdevice.cpp)[ 624] showDevice: ISO channel : 1 01728771024: Debug (dice_avdevice.cpp)[ 626] showDevice: Sequence start : 2 01728775653: Debug (dice_avdevice.cpp)[ 629] showDevice: Nb audio channels : 6 01728781070: Debug (dice_avdevice.cpp)[ 631] showDevice: Nb midi channels : 1 01728788206: Debug (dice_avdevice.cpp)[ 634] showDevice: AC3 caps : 0x00000000 01728794263: Debug (dice_avdevice.cpp)[ 636] showDevice: AC3 enable : 0x00000000 01728803386: Debug (dice_avdevice.cpp)[ 639] showDevice: Channel names : 01728803416: Debug (dice_avdevice.cpp)[ 644] showDevice: Bus1 L 01728803445: Debug (dice_avdevice.cpp)[ 644] showDevice: Bus1 R 01728803454: Debug (dice_avdevice.cpp)[ 644] showDevice: Bus2 L 01728803462: Debug (dice_avdevice.cpp)[ 644] showDevice: Bus2 R 01728803472: Debug (dice_avdevice.cpp)[ 644] showDevice: Bus3 L 01728803480: Debug (dice_avdevice.cpp)[ 644] showDevice: Bus3 R 01728803489: Debug (dice_avdevice.cpp)[ 644] showDevice: Bus4 L 01728803497: Debug (dice_avdevice.cpp)[ 644] showDevice: Bus4 R 01728803508: Debug (dice_avdevice.cpp)[ 621] showDevice: Receiver 1: 01728809710: Debug (dice_avdevice.cpp)[ 624] showDevice: ISO channel : 2 01728814130: Debug (dice_avdevice.cpp)[ 626] showDevice: Sequence start : 2 01728820114: Debug (dice_avdevice.cpp)[ 629] showDevice: Nb audio channels : 8 01728827167: Debug (dice_avdevice.cpp)[ 631] showDevice: Nb midi channels : 0 01728833217: Debug (dice_avdevice.cpp)[ 634] showDevice: AC3 caps : 0x00000000 01728838966: Debug (dice_avdevice.cpp)[ 636] showDevice: AC3 enable : 0x00000000 01728847538: Debug (dice_avdevice.cpp)[ 639] showDevice: Channel names :
The win32 mixer shows four stereo buses for individual mixes. These eight playback channels also show up in Cubase and it's possible to send data to every bus. So let's assume for a moment that the host transmits eight channels to the io14. If so, they need to be mixed/routed to only six output channels (or three buses, if you want to count stereo pairs). Why? Because the io14 doesn't have eight physical outputs, only six:
- Analog 1+2 (which is also headphones 1, phones 1 statically monitors analog 1+2, let's call this Bus1L+R)
- Headphones 2 (assignable to every bus)
- S/PDIF Out (assignable to every bus)
So whatever you do, you will end up with three stereo pairs or six output channels. If RX0 config space is right and contains only six audio channels, then the driver has to detect the unloaded (unassigned/unrouted) bus (could be bus2-4, since bus1 is always loaded with phones 1/analog1+2) and really sends no more than six channels at any time. I think that's not true. It's easier to constantly send eight channels and assign the buses in the io14. Since the corresponding commands for bus selection are shown above, it's very likely done in hardware.
My assumption so far: eight audio channels (+ MIDI-out) on RX0 , nothing else.
The only question: stream format. Is it AMDTP? It is.
ch Length Phase Data -- -------- ----- ------------------------ 1h 260 ISOC 4e 5a 51 94 a0 41 e8 00 2h 292 ISOC 4e 5a 51 94 a0 42 08 01 1h 260 ISOC 4f 5a 51 94 a0 41 08 00 2h 292 ISOC 4f 5a 51 94 a0 42 08 00 0h 1440 ISOC 40 0d 40 03 40 0e 72 45 1h 260 ISOC 50 5a 51 94 a0 41 e8 00 1h 260 ISOC 51 5a 51 94 a0 41 e8 00 2h 292 ISOC 50 5a 51 94 a0 42 08 01 2h 292 ISOC 51 5a 51 94 a0 42 08 01 1h 260 ISOC 52 5a 51 94 a0 41 e8 00 2h 292 ISOC 52 5a 51 94 a0 42 08 01 1h 260 ISOC 53 5a 51 94 a0 41 08 00 2h 292 ISOC 53 5a 51 94 a0 42 08 00 1h 260 ISOC 54 5a 51 94 a0 41 e8 00 2h 292 ISOC 54 5a 51 94 a0 42 08 01 1h 260 ISOC 55 5a 51 94 a0 41 e8 00 1h 260 ISOC 56 5a 51 94 a0 41 e8 00 0h 1152 ISOC 40 0d a1 5a 40 0d bb e5 1h 260 ISOC 57 5a 51 94 a0 41 08 00 2h 292 ISOC 55 5a 51 94 a0 42 08 01 2h 292 ISOC 56 5a 51 94 a0 42 08 01 2h 292 ISOC 57 5a 51 94 a0 42 08 00 2h 292 ISOC 58 5a 51 94 a0 42 08 01 2h 292 ISOC 59 5a 51 94 a0 42 08 01 1h 260 ISOC 58 5a 51 94 a0 41 e8 00 1h 260 ISOC 59 5a 51 94 a0 41 e8 00 1h 260 ISOC 5a 5a 51 94 a0 41 e8 00 2h 292 ISOC 5a 5a 51 94 a0 42 08 01 1h 260 ISOC 5b 5a 51 94 a0 41 08 00 2h 292 ISOC 5b 5a 51 94 a0 42 08 00 0h 1440 ISOC 40 0e 87 6c 40 0f f1 82 1h 260 ISOC 5c 5a 51 94 a0 41 e8 00
Attachments
- bus-sniff.txt (13.9 kB) -
ieee1394 sniffs of the alesis mixer on win32
, added by adi on 08/05/08 13:47:40. - bus-sniff2.txt (9.3 kB) -
bus-sniff for bus volume control
, added by adi on 08/05/08 16:25:00. - bus-sniff-device-init.txt (1.9 kB) -
bus-sniff for device initialization
, added by adi on 08/05/08 16:25:29.
