Commit graph

302 commits

Author SHA1 Message Date
Jaroslav Kysela
ef6463a209 ucm: fix Path condition - substitute Path and Mode fields
The Path and Mode fields should be also substituted for
the runtime evaluation. See Fixes.

Fixes: https://github.com/alsa-project/alsa-lib/issues/395
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2024-04-24 13:01:04 +02:00
Jaroslav Kysela
8883943995 ucm: main - remove cast to pointer from integer of different size warning
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2023-09-01 16:50:51 +02:00
Tony Wasserka
00da3feace ucm: mark internal functions static
From: Tony Wasserka /neobrain@github/
Fixes: https://github.com/alsa-project/alsa-lib/pull/335
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2023-09-01 16:40:56 +02:00
borine
cde0e819f7 doxygen: ucm: silence warnings
Removes duplicate documentation blocks and fixes 'not documented' warnings

From: borine@github
Link: https://github.com/alsa-project/alsa-lib/pull/340
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2023-09-01 16:12:10 +02:00
borine
e72c605179 doxygen: escape xml tags
From: borine@github
Link: https://github.com/alsa-project/alsa-lib/pull/340
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2023-09-01 16:11:09 +02:00
borine
9505cfdb46 doxygen: fix broken parameter name tags
From: borine@github
Link: https://github.com/alsa-project/alsa-lib/pull/340
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2023-09-01 16:10:55 +02:00
Maxython
b40fcda7fb compilation: fix ANDROID -> __ANDROID__ define detection
Fixes: https://github.com/alsa-project/alsa-lib/pull/301/
Signed-off-by: Maxython <mixython@gmail.com>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2023-05-02 14:52:27 +02:00
Jaroslav Kysela
496c4e031b ucm: fix geti() macro - return zero on success
Fixes: c083417b ("ucm: simplify and fix the previous patch (geti)")
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2023-01-15 18:57:56 +01:00
Jaroslav Kysela
c083417b72 ucm: simplify and fix the previous patch (geti)
Use macro to maintain only one code. The status may be 0 or 1 - handle
both values correctly.

Also, fix the possible memory leak in snd_use_case_geti() - string
str should be freed even when the error is returned.

Fixes: 436cd5b6 ("ucm: add existence checks to geti calls")
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2023-01-15 18:37:40 +01:00
Curtis Malainey
436cd5b6d0 ucm: add existence checks to geti calls
Right now in snd_use_case_geti you cannot tell if the item being queried
exists or not when being checked. This also means the only way to check
for the existence of something in the client of the library is to
iterate over the list of mods/devs even if we know exactly the name we
are looking for. We have functions that do exactly this internally so
lets return this information in a logical fashion through geti.

Also clean up some trailing white space nearby.

Signed-off-by: Curtis Malainey <cujomalainey@chromium.org>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2023-01-15 17:57:13 +01:00
Jaroslav Kysela
d25ddafaa7 ucm: fix possible memory leak in execute_sysw()
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2023-01-05 15:42:31 +01:00
Jaroslav Kysela
e29413a220 ucm: execute_sysw - fix possible use-after-free
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2022-12-07 14:51:32 +01:00
Jaroslav Kysela
9649b64c6f ucm: handle empty string also for ${env:} substitution
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2022-11-22 09:59:04 +01:00
Jaroslav Kysela
8b64f22459 ucm: clarify set_defaults calls
- do full reset in snd_use_case_mgr_reload

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2022-11-15 17:28:39 +01:00
Jaroslav Kysela
1b436862ed ucm: fix enhanced ID parsing in snd_use_case_parse_ctl_elem_id()
Reported-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2022-11-02 15:01:58 +01:00
Jaroslav Kysela
3bb9c44375 ucm: do not handle multiple Syntax field updates
It is useful to include a toplevel configuration file from another
toplevel configuration file. Ignore the further Syntax updates
(assuming the that the parent knows what to do).

Also, parse the Syntax field in own function.

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2022-10-20 19:56:50 +02:00
SASANO Takayoshi
60c1430b43 add DragonFlyBSD build support (except test/)
due to undefined reference to 'environ' error, ucm_exec.c uses workaround.

Fixes: https://github.com/alsa-project/alsa-lib/pull/250
Signed-off-by: SASANO Takayoshi <uaa@uaa.org.uk>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2022-10-17 13:11:47 +02:00
SASANO Takayoshi
f89245ee66 add FreeBSD build support (except test/)
Note: NetBSD and OpenBSD has both <endian.h> and <sys/endian.h>

Fixes: https://github.com/alsa-project/alsa-lib/pull/250
Signed-off-by: SASANO Takayoshi <uaa@uaa.org.uk>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2022-10-17 13:11:34 +02:00
SASANO Takayoshi
b33ef3f73d add NetBSD/OpenBSD build support (except test/)
Fixes: https://github.com/alsa-project/alsa-lib/pull/250
Signed-off-by: SASANO Takayoshi <uaa@uaa.org.uk>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2022-10-17 13:11:29 +02:00
Jaroslav Kysela
e288ca7c29 doc: ucm - more volume notes
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2022-10-17 13:08:11 +02:00
Jaroslav Kysela
595115758b doc: ucm - add sequence graphs
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2022-09-16 19:02:16 +02:00
Jaroslav Kysela
d80616c0c1 ucm: add NULL check for card_name in open
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2022-07-08 22:00:34 +02:00
Jaroslav Kysela
fc86eafa08 ucm: fix few memory-leaks in the error paths
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2022-07-08 21:56:57 +02:00
Stephan Gerhold
cfd3da47fa ucm: fix st_mode check for symbolic links
The file type in the st_mode field is not encoded as unique bits but as
an enumerator. Checking if some bits of S_IFLNK are set does not work
correctly because it happens to evaluate to true for regular files as
well.

The POSIX man page suggests using the following approach to check
the file type:

    if ((sb.st_mode & S_IFMT) == S_IFLNK)

Alternatively, there is a S_ISLNK() macro to check this more easily.

Make use of the latter so that readlink() is only called on actual
symbolic links and not regular files. This makes audio work again
with slightly older alsa-ucm-conf versions or alternative top-level
ucm.conf configurations that do not make use of symlinks.

Fixes: d6adde0e ("ucm: top-level path - set directory from symlink")
Fixes: https://github.com/alsa-project/alsa-lib/pull/249
Signed-off-by: Stephan Gerhold <stephan@gerhold.net>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2022-07-08 17:31:58 +02:00
Jaroslav Kysela
2d56ff8ded ucm: list also hardware configs (hw:X) in uc_mgr_scan_master_configs() fcn
BugLink: https://github.com/alsa-project/alsa-ucm-conf/issues/168
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2022-06-16 18:03:03 +02:00
Jaroslav Kysela
0418fd32c7 ucm: fix the reload call (snd_use_case_mgr_reload)
Handle the local configuration and macros trees properly.

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2022-05-27 14:28:23 +02:00
Jaroslav Kysela
4119e33d28 ucm: implement disdevall sequence command
It is useful to run all disable sequences for all
UCM devices in a verb to ensure the valid, expected
initial state.

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2022-05-24 16:28:23 +02:00
Jaroslav Kysela
7474518a96 ucm: fix memory leak in the error path (Include)
The included configuration tree must be freed
in the error path, too.

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2022-05-23 13:29:39 +02:00
Jaroslav Kysela
edec439a0c ucm: Use LFS calls (stat, scandir)
Continue the work in commit ba86ac55 ("conf: Use LFS calls when reading
config files") and fix the UCM code, too.

Fixes: https://github.com/alsa-project/alsa-lib/pull/223
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2022-05-20 09:55:03 +02:00
Jaroslav Kysela
87034d6fc6 ucm: main - fix the compilation error (signess)
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2022-05-20 09:23:17 +02:00
Jaroslav Kysela
5f0479762b ucm: macro - make argument names shorter
It seems that the use the macro name as the variable prefix is too large.
Use just two underscores as prefix for the macro arguments to make
macro definitions more readable.

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2022-05-19 11:27:40 +02:00
Jaroslav Kysela
2389f04541 ucm: doc - describe variants, minor corrections
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2022-05-19 10:18:38 +02:00
Jaroslav Kysela
4b66e5fbce ucm: implement enadev2 and disdev2 sequence commands
It may be useful to call the sequences from devices from
the verb sequences or another device sequences.

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2022-05-19 10:08:50 +02:00
Jaroslav Kysela
c3a5d32ac3 ucm: add support for verb variants
The bellow configuration example creates two verbs ("HiFi" and "HiFi 7+1")
with different playback channels for the "Speaker" device.

	SectionUseCase."HiFi" {
	        File "HiFi.conf"
       		Variant."HiFi" {
			Comment "Default"
		}
		Variant."HiFi 7+1" {
			Comment "HiFi 7.1"
        	}
	}

	SectionDevice."Speaker" {
		Value {
			PlaybackChannels 2
		}
		Variant."HiFi 7+1".Value {
			PlaybackChannels 8
		}
	}

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2022-05-18 13:10:35 +02:00
Jaroslav Kysela
25e44bbeb9 ucm: set SYNTAX_VERSION_MAX to 6
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2022-05-18 08:53:34 +02:00
Jaroslav Kysela
b45fbeee34 ucm: move macros and evali substitution to Syntax 6
There should be printed an error when the new configuration
blocks are used with the older alsa-lib.

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2022-05-18 08:52:50 +02:00
Jaroslav Kysela
55340cf96a ucm: macro - add deep call protection (recursion)
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2022-05-17 19:25:28 +02:00
Jaroslav Kysela
80ac6f9866 ucm: macro call inplace evaluate inside macro
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2022-05-17 19:21:22 +02:00
Jaroslav Kysela
70e2ed50a3 ucm: macro - fix the error message, print id
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2022-05-17 18:19:44 +02:00
Jaroslav Kysela
b67257e6fd ucm: return empty string for undefined "open" variables (arguments)
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2022-05-17 14:37:41 +02:00
Jaroslav Kysela
5062565e82 ucm: allow '-' prefix to avoid errors when the variable is not defined
It may be useful to check if variable is not defined.

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2022-05-17 14:36:03 +02:00
Jaroslav Kysela
11ec9e497e ucm: allow passing variables through ucm open string
It is useful to pass information like application capabilities
to the UCM configuration parser. Those variables are prefixed
with '@' for the configuration files.

An example:

   "<<<v1='a b c',x=12>>>hw:1"

Variables can substituted in the configuration:

   "${var:@v1}" -> "a b c"
   "${var:@x}" -> 12

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2022-05-16 14:17:31 +02:00
Jaroslav Kysela
d7d5c724ed ucm: implement MacroDefine and Macro subtree evaluation
The arguments are set as temporary variables as /MACRO_NAME/_/ARGUMENT_NAME/.

Example:

  # define new macro MyMacro with arguments ctl_name and ctl_value
  DefineMacro.MyMacro {
    BootSequence [
      cset "name='${var:MyMacro_ctl_name}' ${var:MyMacro_ctl_value}"
    ]
  }

  # instantiate macro for Speaker control (short version)
  Macro.headphone.MyMacro "ctl_name='Speaker Switch',ctl_value=off"

  # instantiate macro for Mic control (second version)
  Macro.mic.MyMacro {
	ctl_name "Mic Switch"
	ctl_value "off"
  }

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2022-05-13 17:25:29 +02:00
Jaroslav Kysela
50140120c6 ucm: local_config may be NULL (error path)
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2022-05-13 16:10:56 +02:00
Jaroslav Kysela
d65b1c7b52 ucm: add ${evali:} substitution
Example:

  Define.var1 2

  LibraryConfig.test.SubstiConfig {
          a "${evali:$var1+1}"
  }

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2022-05-13 16:10:51 +02:00
Jaroslav Kysela
c41d710a69 ucm: fix the '${eval:EXPR}' substitution
There was already a variable substitution. Skip it for the eval: case.

Fixes: 7b6da9ee ("ucm: add ${eval:EXPR} substitution (Syntax 5)")
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2022-02-22 09:51:29 +01:00
Jaroslav Kysela
d6adde0e32 ucm: top-level path - set directory from symlink
It is useful to read the top-level symlink and set the configuration
directory according this symlink for the relative paths.

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2021-12-13 14:40:58 +01:00
Jaroslav Kysela
2623e4bb76 ucm: add initial doxygen documenation
This is an attempt to explain the UCM in a more verbose way.

BugLink: https://github.com/alsa-project/alsa-ucm-conf/issues/103
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2021-12-01 10:33:44 +01:00
Jaroslav Kysela
ebb8a6c7a1 conf: introduce snd_config_load_string()
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2021-12-01 10:18:58 +01:00
Jaroslav Kysela
7b6da9ee6d ucm: add ${eval:EXPR} substitution (Syntax 5)
It is useful to do simple integer math in UCM configurations, too.
Use snd_config_evaluate_string() string for this job.

Example:

    ${eval:1+1}
    ${eval:100*$var1}
    ${eval:$[$var2+1]/5}

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2021-11-30 14:22:39 +01:00