mirror of
https://github.com/alsa-project/alsa-lib.git
synced 2025-11-03 09:01:52 -05:00
ucm: implement CardNumberByName substitution
The syntax is ${CardNumberByName:CARDNAME[#INDEX]}.
The CARDNAME is the ALSA's soundcard name (short form).
The INDEX is the instance (0 = first, 1 = second etc.).
Example: ${CardNumberByName:HDA Intel PCH}
(which is identical to ${CardNumberByName:HDA Intel PCH#0})
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
This commit is contained in:
parent
f0276cc0bd
commit
68d3cbfbc3
1 changed files with 33 additions and 13 deletions
|
|
@ -71,20 +71,23 @@ static char *rval_conf_name(snd_use_case_mgr_t *uc_mgr)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static char *rval_card_number(snd_use_case_mgr_t *uc_mgr)
|
static char *get_card_number(struct ctl_list *ctl_list)
|
||||||
{
|
{
|
||||||
struct ctl_list *ctl_list;
|
|
||||||
char num[16];
|
char num[16];
|
||||||
|
|
||||||
if (uc_mgr->conf_format < 3)
|
|
||||||
return NULL;
|
|
||||||
ctl_list = uc_mgr_get_master_ctl(uc_mgr);
|
|
||||||
if (ctl_list == NULL)
|
if (ctl_list == NULL)
|
||||||
return strdup("");
|
return strdup("");
|
||||||
snprintf(num, sizeof(num), "%i", snd_ctl_card_info_get_card(ctl_list->ctl_info));
|
snprintf(num, sizeof(num), "%i", snd_ctl_card_info_get_card(ctl_list->ctl_info));
|
||||||
return strdup(num);
|
return strdup(num);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static char *rval_card_number(snd_use_case_mgr_t *uc_mgr)
|
||||||
|
{
|
||||||
|
if (uc_mgr->conf_format < 3)
|
||||||
|
return NULL;
|
||||||
|
return get_card_number(uc_mgr_get_master_ctl(uc_mgr));
|
||||||
|
}
|
||||||
|
|
||||||
static char *rval_card_id(snd_use_case_mgr_t *uc_mgr)
|
static char *rval_card_id(snd_use_case_mgr_t *uc_mgr)
|
||||||
{
|
{
|
||||||
struct ctl_list *ctl_list;
|
struct ctl_list *ctl_list;
|
||||||
|
|
@ -135,17 +138,11 @@ static char *rval_card_components(snd_use_case_mgr_t *uc_mgr)
|
||||||
return strdup(snd_ctl_card_info_get_components(ctl_list->ctl_info));
|
return strdup(snd_ctl_card_info_get_components(ctl_list->ctl_info));
|
||||||
}
|
}
|
||||||
|
|
||||||
static char *rval_card_id_by_name(snd_use_case_mgr_t *uc_mgr, const char *id)
|
static struct ctl_list *get_ctl_list_by_name(snd_use_case_mgr_t *uc_mgr, const char *id)
|
||||||
{
|
{
|
||||||
struct ctl_list *ctl_list;
|
|
||||||
char *name, *index;
|
char *name, *index;
|
||||||
long idx = 0;
|
long idx = 0;
|
||||||
|
|
||||||
if (uc_mgr->conf_format < 3) {
|
|
||||||
uc_error("CardIdByName substitution is supported in v3+ syntax");
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
name = alloca(strlen(id) + 1);
|
name = alloca(strlen(id) + 1);
|
||||||
strcpy(name, id);
|
strcpy(name, id);
|
||||||
index = strchr(name, '#');
|
index = strchr(name, '#');
|
||||||
|
|
@ -154,7 +151,29 @@ static char *rval_card_id_by_name(snd_use_case_mgr_t *uc_mgr, const char *id)
|
||||||
if (safe_strtol(index + 1, &idx))
|
if (safe_strtol(index + 1, &idx))
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
ctl_list = uc_mgr_get_ctl_by_name(uc_mgr, name, idx);
|
return uc_mgr_get_ctl_by_name(uc_mgr, name, idx);
|
||||||
|
}
|
||||||
|
|
||||||
|
static char *rval_card_number_by_name(snd_use_case_mgr_t *uc_mgr, const char *id)
|
||||||
|
{
|
||||||
|
if (uc_mgr->conf_format < 3) {
|
||||||
|
uc_error("CardNumberByName substitution is supported in v3+ syntax");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return get_card_number(get_ctl_list_by_name(uc_mgr, id));
|
||||||
|
}
|
||||||
|
|
||||||
|
static char *rval_card_id_by_name(snd_use_case_mgr_t *uc_mgr, const char *id)
|
||||||
|
{
|
||||||
|
struct ctl_list *ctl_list;
|
||||||
|
|
||||||
|
if (uc_mgr->conf_format < 3) {
|
||||||
|
uc_error("CardIdByName substitution is supported in v3+ syntax");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
ctl_list = get_ctl_list_by_name(uc_mgr, id);
|
||||||
if (ctl_list == NULL)
|
if (ctl_list == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
return strdup(snd_ctl_card_info_get_id(ctl_list->ctl_info));
|
return strdup(snd_ctl_card_info_get_id(ctl_list->ctl_info));
|
||||||
|
|
@ -298,6 +317,7 @@ __std:
|
||||||
MATCH_VARIABLE2(value, "${env:", rval_env);
|
MATCH_VARIABLE2(value, "${env:", rval_env);
|
||||||
MATCH_VARIABLE2(value, "${sys:", rval_sysfs);
|
MATCH_VARIABLE2(value, "${sys:", rval_sysfs);
|
||||||
MATCH_VARIABLE2(value, "${var:", rval_var);
|
MATCH_VARIABLE2(value, "${var:", rval_var);
|
||||||
|
MATCH_VARIABLE2(value, "${CardNumberByName:", rval_card_number_by_name);
|
||||||
MATCH_VARIABLE2(value, "${CardIdByName:", rval_card_id_by_name);
|
MATCH_VARIABLE2(value, "${CardIdByName:", rval_card_id_by_name);
|
||||||
__merr:
|
__merr:
|
||||||
err = -EINVAL;
|
err = -EINVAL;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue