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.

If you want to give it a whirl, get the latest trunk from svn and compile with ENABLE_DICE=1 (DICE is on by default since r1498). You can find a more or less detailed HOWTO here: InstallingFfadoFromSource.

Please note that this page is mostly intended for developers, so feel free to look, but don't worry if you don't understand the details ;)

Current status

Device Capture Playback MIDI
io14 working working in:OK, out:OK
io26 reported to work reported to work not tested
Multimix16 working working N/A (device has no MIDI ports)
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. (bug in the dice code. The reminder of this subsection is obsolete, it's been solved)

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

Alesis Multimix Firewire

Chris Garrett successfully uses his Multimix16. He reports good results with 4x64 on his desktop machine and 4x256 on his laptop. Things we had to change for this device (vendor specific hacks to dice_avdevice.cpp): (was a generic bug in the dice code, solved)

  • Device-ID is 0x00000000
  • RX0 nb_audio_size is wrong, needs to be 2
  • Number of RXs in the config space is wrong, m_nb_rx needs to be 1

JFTR:

  • TX0: 16 channels: Mic1..Mic8, Line9..Line16
  • TX1: 2 channels: Main-In L+R, the stereo sum
  • RX0: 2 channels: Main-Out L+R

Alesis io26

The io26 announces itself with the same model and vendor ID as the io14, also the text fields are identical. I think the two devices are based on the same board and only differ in the amount of attached IO components. Content of the ATX registers might be different.

Attachments