From: Stefan R. <st...@s5...> - 2010-09-05 11:15:42
|
David Henningsson wrote: > currently udev assigns the AV/C devices to the "video" > group, and changing that to the "audio" group would bring some more > consistency, but isn't absolutely necessary. (It would reduce the number > of confused users adding themselves to the "video" group because the > want a random other sound card to start working...) Is this covered by > your approach to this problem? What I suggested is more targeted towards having only a minimum number of rules to add and maintain. I find the need to be in the video group acceptable. But I agree that an assignment to audio whenever possible would be better. If the ffado rules come after the generic firewire rules (in particular, after the specifier/version == 1394ta/avc rule), then they overwrite a prior video group assignment to AV/C devices. So, if you add rules not only for non-AV/C audio devices but also for all devices that would be covered by the AV/C rule, then they will be assigned to audio instead of video. Of course all AV/C audio device for which there is no explicit rule will still be left as video device --- which is better than nothing. Let's have a look what happens if we simply match all vendor IDs that are currently listed in libffado/configuration: $ { for x in $(grep vendorid ../ffado/trunk/libffado/configuration | cut -dx -f2 | cut -d';' -f1); do x=$(printf "%06X" "0x$x"); grep $x /usr/share/misc/oui.db || echo "unknown: $x"; done } | sort -u 00000A OMRON TATEISI ELECTRONICS CO. 00000F NEXT, INC. 000166 TC GROUP A/S 0001F2 Mark of the Unicorn, Inc. 0003DB Apogee Electronics Corp. 000595 Alesis Corporation 0007F5 Bridgeco Co AG 000A35 Xilinx 000A92 Presonus Corporation 000AAC TerraTec Electronic GmbH 000D6C M-Audio 000F1B Ego Systems Inc. 000FF2 Loud Technologies Inc. 001260 Stanton Magnetics,inc. 00130E Focusrite Audio Engineering Limited 001486 Echo Digital Audio Corporation 001564 BEHRINGER Spezielle Studiotechnik GmbH 001C2D FlexRadio Systems 001C6A Weiss Engineering Ltd. 0040AB ROLAND DG CORPORATION These are 20 IDs. Quite many, but manageable. But wait, as I already mentioned in the other post, RME (mis?)uses Xilinx' OUI for their firmwares. Hence we should not match vendor but, for example, vendor_name or vendor_name/model_name. Model ID may not be suitable due to firmware version churn. The FFADO developer who implements RME device support should comment on that. (Jonathan?) But this is not all. CME alias Central Music Co. uses the OUI of OMRON Co. which is probably not correct either. I could not find a connection between both companies on their web sites. Perhaps there we should match vendor/model and specifier/version to prevent false positives. Mackie (currently a brand owned by LOUD Technologies) misuses the OUI of Next Inc. for the model "Onyx Firewire". There we should match vendor/model and specifier/version too. It is unlikely that anybody will encounter a FireWire device or PC that was produced by Next, Inc --- but if Mackie borrowed Next's OUI, then other FireWire firmware authors possibly did so too. All other vendor IDs look good. What's more, all of these vendors are unlikely to ever market FireWire storage devices or other non-audio FireWire devices. So, my suggestion is: Check for vendor ID only --- except in the three special cases of Xilinx^wRME, Omron^wCME, and Next^wMackie. These three special cases are alas unavoidable due to firmware authors using bogus IDs. If you want to create the rules file with a python script with libffado/configuration as input, you can simply hardwire these three known special cases. I.e. blacklist vendor ID 0x00000a, 0x00000f, 0x000a35, and add perhaps the following: SUBSYSTEM=="firewire", ATTR{vendor}="0x00000a", ATTR{model}="0x030000", \ ATTR{units}=="*0x00a02d:0x010001*", GROUP="audio", ENV{ID_FFADO}="1" \ # CME, Matrix K FW SUBSYSTEM=="firewire", ATTR{vendor}="0x00000f", ATTR{model}="0x01006?", \ ATTR{units}=="*0x00a02d:0x010001*", GROUP="audio", ENV{ID_FFADO}="1" \ # Mackie, Onyx Firewire SUBSYSTEM=="firewire", ATTR{vendor_name}="RME", \ ATTR{model_name}="FireFace?00", GROUP="audio", ENV{ID_FFADO}="1" (Don't use backslash--linebreak, put everything on a single line. Somebody with acces to RME FireFaces needs to check the RME rule against real contents of the root directory of their Configuration ROM, or alternatively against firewire-core's actual attributes in /sys/bus/firewire/devices/fw?/.) PS: I created the oui.db file that I used in above command line this way: wget -O - http://standards.ieee.org/regauth/oui/oui.txt | grep -E '(base 16).*\w+.*$' | sed -e 's/\s*(base 16)\s*/ /' > oui.db OUIs can also be checked online at http://standards.ieee.org/regauth/oui/. -- Stefan Richter -=====-==-=- =--= --=-= http://arcgraph.de/sr/ |