[alsa-devel] Audigy bay protocol
Good afternoon,
Having spent some time looking at the MIDI that the internal/external Audigy bays emit, I noticed that they report more then is currently used by the LIRC driver.
There is one thing missing in here, which is how to control the bay power LED (which is supposed to blink when the card is muted) and the CMSS LED. I am not sure whether this is controlled through MIDI SysEx sequences or through other means.
Due to an annoying hardware failure in my Audigy 4 Pro I can not continue this endeavour, but I want to share what I have.
Based on this, perhaps one can extend the EMU10K1/2 driver a bit with headphone muting and volume control through the bay. With thanks to the libdouze author, Arnaud de Bossoreille de Ribou.
Midi System Exclusive ( extended manufacturer id == 0x2021 ) Payload for 61 bay message: 61 00 01 00 XX YY
XX 00 = button push event 01 = volume knob event 02 = jack sense event
For XX=00 button push: Bit 1: CMSS Bit 2: Mute
For XX=01 volume knob: Bit 1: Always set Bit 7: Set for downward adjustment, unset for upward adjustment
For XX=02 jack sense: YY contains jacks Bit 1: headphone Bit 2: digital out (back of bay)
Response to initialization: Midi System Exclusive ( extended manufacturer id == 0x2021, payload == | 60 00 02 03 | ) <-- Unknown, bay version? Midi System Exclusive ( extended manufacturer id == 0x2021, payload == | 61 00 01 00 02 01 | ) <-- Jack sense update
I hope it is of use to someone.
Regards, Tony V.
At Thu, 26 Jun 2008 14:11:55 +0100, Tony "Chainsaw" Vroon wrote:
Good afternoon,
Having spent some time looking at the MIDI that the internal/external Audigy bays emit, I noticed that they report more then is currently used by the LIRC driver.
There is one thing missing in here, which is how to control the bay power LED (which is supposed to blink when the card is muted) and the CMSS LED. I am not sure whether this is controlled through MIDI SysEx sequences or through other means.
Due to an annoying hardware failure in my Audigy 4 Pro I can not continue this endeavour, but I want to share what I have.
Thanks. It's a useful information.
Based on this, perhaps one can extend the EMU10K1/2 driver a bit with headphone muting and volume control through the bay. With thanks to the libdouze author, Arnaud de Bossoreille de Ribou.
Midi System Exclusive ( extended manufacturer id == 0x2021 ) Payload for 61 bay message: 61 00 01 00 XX YY
XX 00 = button push event 01 = volume knob event 02 = jack sense event
For XX=00 button push: Bit 1: CMSS Bit 2: Mute
For XX=01 volume knob: Bit 1: Always set Bit 7: Set for downward adjustment, unset for upward adjustment
For XX=02 jack sense: YY contains jacks Bit 1: headphone Bit 2: digital out (back of bay)
Response to initialization: Midi System Exclusive ( extended manufacturer id == 0x2021, payload == | 60 00 02 03 | ) <-- Unknown, bay version? Midi System Exclusive ( extended manufacturer id == 0x2021, payload == | 61 00 01 00 02 01 | ) <-- Jack sense update
I hope it is of use to someone.
Do you mean that after sending the last two SYSEX, the device returns the SYSEX messages above appropriately? In which timing?
So far, the driver doesn't care about the contents of in/out MIDI bytes but just receives/sends as is. Supporting this in the kernel driver would need a bit more work than normal jack / volume knob sensing in other drivers.
thanks,
Takashi
On Tue, 2008-07-01 at 12:09 +0200, Takashi Iwai wrote:
Do you mean that after sending the last two SYSEX, the device returns the SYSEX messages above appropriately? In which timing?
Those two SysEx messages are the (immediate) response to the initialisation string. The first seems some generic "yes, bay attached, speaking protocol 2.3" reply, while the second is your initial jack status. You could time out on not receiving the "bay attached" message and then not enable your SysEx listener at all. The actual message will arrive within a single second, but 5 seconds should be a safe bet.
Once this sequence completes, you will then get jack/button/volume updates as the event occurs on the bay.
To confirm, the initialisation string is: echo -en "\xf0\x00\x20\x21\x61\x00\x00\x00\x7f\x00\xf7"
/dev/snd/midiC0D1
thanks, Takashi
Regards, Tony V.
participants (2)
-
Takashi Iwai
-
Tony "Chainsaw" Vroon