[alsa-devel] UCM modifier names

Stephen Warren swarren at nvidia.com
Thu Jun 2 21:56:37 CEST 2011


UCM syntax is e.g.:

SectionModifier."Capture Voice".0 {

This maps to a modifier->name of "Capture Voice.0".

However, when find_modifier searches for modifiers, it strips off the
index (".0") from modifier->name, and just compares base name. As such,
the index doesn't seem useful.

I propose:

a) In parse_modifier, fail if index!=0.

b) In parse_modifier, store just the name in modifier->name.

c) In find_modifier, remove all the special handling of "." in the name,
   and just strcmp(modifier->name, modifier_name).

Perhaps the index should be completely removed from the file syntax too?
If an index was actually useful in any case, the author of the file could
simply add it within the name string, i.e.:

typical: SectionModifier."Capture Voice" {

unusual: SectionModifier."Capture Voice 0" {

Of course, that wouldn't be backwards-compatible file syntax. Perhaps we
could make the index optional, but always validate it was 0 if present,
as I said above.

I actually wonder if the index on the SectionDevice makes any sense
either; functions like is_modifier_supported would be a lot simpler if
devices simply never had an index, such that is_modifier_supported was
a simple strcmp too. The worst fallout from that change might be a
requirement to list more entries in SupportedDevice/ConflictingDevice.

Second, when find_modifier is called from get_value, it'll fail with a
valid modifier name that happens not to be supported on any currently
active devices. Is that intended? I'd expect to be able to retrieve
values from any/all devices and modifiers irrespective of whether those
devices or modifiers could actually be activated given the currently
active configuration.

I propose: Adding a parameter to find_modifier to indicate whether to
call is_modifier_supported or not, this new parameter being false for
get_value and true in other cases.

This issue will also be relevant to find_device when I modify that to
call new function is_device_supported.

For find_device, we may also have to add a parameter for a device name
that gets ignore when checking SupportedDevice/ConflictingDevice, which
can be passed when switching devices.

Thanks for your thoughts.


More information about the Alsa-devel mailing list