mirror of
https://github.com/alsa-project/alsa-lib.git
synced 2026-03-22 05:33:43 -04:00
ucm: handle 'set _defaults' command
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
This commit is contained in:
parent
a570634a22
commit
0c3776a354
2 changed files with 39 additions and 9 deletions
|
|
@ -414,6 +414,7 @@ int snd_use_case_geti(snd_use_case_mgr_t *uc_mgr,
|
||||||
*
|
*
|
||||||
* Known identifiers:
|
* Known identifiers:
|
||||||
* - _once - execute the once sequence (value = NULL)
|
* - _once - execute the once sequence (value = NULL)
|
||||||
|
* - _defaults - execute the 'defaults' sequence (value = NULL)
|
||||||
* - _verb - set current verb = value
|
* - _verb - set current verb = value
|
||||||
* - _enadev - enable given device = value
|
* - _enadev - enable given device = value
|
||||||
* - _disdev - disable given device = value
|
* - _disdev - disable given device = value
|
||||||
|
|
|
||||||
|
|
@ -530,6 +530,27 @@ static int add_auto_values(snd_use_case_mgr_t *uc_mgr)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief execute default commands
|
||||||
|
* \param uc_mgr Use case manager
|
||||||
|
* \return zero on success, otherwise a negative error code
|
||||||
|
*/
|
||||||
|
static int set_defaults(snd_use_case_mgr_t *uc_mgr)
|
||||||
|
{
|
||||||
|
int err;
|
||||||
|
|
||||||
|
if (uc_mgr->default_list_executed)
|
||||||
|
return 0;
|
||||||
|
err = execute_sequence(uc_mgr, &uc_mgr->default_list,
|
||||||
|
&uc_mgr->value_list, NULL, NULL);
|
||||||
|
if (err < 0) {
|
||||||
|
uc_error("Unable to execute default sequence");
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
uc_mgr->default_list_executed = 1;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief Import master config and execute the default sequence
|
* \brief Import master config and execute the default sequence
|
||||||
* \param uc_mgr Use case manager
|
* \param uc_mgr Use case manager
|
||||||
|
|
@ -838,15 +859,9 @@ static int set_verb(snd_use_case_mgr_t *uc_mgr,
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
if (enable) {
|
if (enable) {
|
||||||
if (!uc_mgr->default_list_executed) {
|
err = set_defaults(uc_mgr);
|
||||||
err = execute_sequence(uc_mgr, &uc_mgr->default_list,
|
if (err < 0)
|
||||||
&uc_mgr->value_list, NULL, NULL);
|
return err;
|
||||||
if (err < 0) {
|
|
||||||
uc_error("Unable to execute default sequence");
|
|
||||||
return err;
|
|
||||||
}
|
|
||||||
uc_mgr->default_list_executed = 1;
|
|
||||||
}
|
|
||||||
seq = &verb->enable_list;
|
seq = &verb->enable_list;
|
||||||
} else {
|
} else {
|
||||||
seq = &verb->disable_list;
|
seq = &verb->disable_list;
|
||||||
|
|
@ -1848,6 +1863,18 @@ static int set_once_user(snd_use_case_mgr_t *uc_mgr,
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int set_defaults_user(snd_use_case_mgr_t *uc_mgr,
|
||||||
|
const char *value)
|
||||||
|
{
|
||||||
|
int err;
|
||||||
|
|
||||||
|
if (value != NULL && *value) {
|
||||||
|
uc_error("error: wrong value for _defaults (%s)", value);
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
return set_defaults(uc_mgr);
|
||||||
|
}
|
||||||
|
|
||||||
static int handle_transition_verb(snd_use_case_mgr_t *uc_mgr,
|
static int handle_transition_verb(snd_use_case_mgr_t *uc_mgr,
|
||||||
struct use_case_verb *new_verb)
|
struct use_case_verb *new_verb)
|
||||||
{
|
{
|
||||||
|
|
@ -2061,6 +2088,8 @@ int snd_use_case_set(snd_use_case_mgr_t *uc_mgr,
|
||||||
pthread_mutex_lock(&uc_mgr->mutex);
|
pthread_mutex_lock(&uc_mgr->mutex);
|
||||||
if (strcmp(identifier, "_once") == 0)
|
if (strcmp(identifier, "_once") == 0)
|
||||||
err = set_once_user(uc_mgr, value);
|
err = set_once_user(uc_mgr, value);
|
||||||
|
else if (strcmp(identifier, "_defaults") == 0)
|
||||||
|
err = set_defaults_user(uc_mgr, value);
|
||||||
else if (strcmp(identifier, "_verb") == 0)
|
else if (strcmp(identifier, "_verb") == 0)
|
||||||
err = set_verb_user(uc_mgr, value);
|
err = set_verb_user(uc_mgr, value);
|
||||||
else if (strcmp(identifier, "_enadev") == 0)
|
else if (strcmp(identifier, "_enadev") == 0)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue