On Fri, May 16, 2014 at 3:26 AM, Clemens Ladisch clemens@ladisch.de wrote:
Adam Goode wrote:
Clemens Ladisch wrote:
- Add the manufacturer name to snd_ctl_card_info. For USB devices, this is almost always known, but most other drivers do not know the name of the card manufacturer (as opposed to the chip manufacturer). In those cases, the most informative name that a driver could
provide
would be based on a registered ID like "USB:0x1234", "PCI:0x5678",
or
"IEEE:0x9abcde".
One question I have for step 2 above: snd_ctl_card_info is full. I don't see a way of adding to it without introducing a new ioctl (SNDRV_CTL_IOCTL_CARD_INFO2 + struct snd_ctl_card_info2?)
If you really want to avoid adding a new ioctl: The numerical IDs are just numbers, for which there is enough space in snd_ctl_card_info. For USB devices, the manufacturer name is part of the longname, so you'd just need offset/length values.
And I'm not sure if it would be a good idea to expose the manufacturer ID as a string. Is that value supposed to be shown to the user, or just some unique ID?
For Web MIDI, we don't actually need the USB ids, but it is good to have these available. snd_ctl_card_info already has these encoded via the components field:
$ ./alsa-lib/test/control
Soundcard #1: card - 0 id - 'UX16' driver - 'USB-Audio' name - 'UX16' longname - 'Yamaha UX16 at usb-0000:00:14.0-10, full speed' mixername - '' components - 'USB0499:1009' RAWMIDI info, device #0: device - 0 subdevice - 0 stream - 0 card - 0 flags - 0x7 id - 'USB MIDI' name - 'UX16' subname - 'UX16 MIDI 1' subdevices count - 1 subdevices avail - 0 ...
For getting manufacturer, it is an interesting idea to encode the offset and length for extraction from longname. I have no problem with creating a new ioctl though, which seems cleaner, if that is acceptable.
The manufacturer string is just a string, to be presented to the user. It is not a unique/opaque id.
Adam