ucm: added listcards command

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
This commit is contained in:
Jaroslav Kysela 2010-10-13 11:47:23 +02:00
parent a9af4348df
commit 47563fb2eb
3 changed files with 46 additions and 13 deletions

View file

@ -7,3 +7,7 @@ INCLUDES = \
-Wall -I$(top_srcdir)/include -Wall -I$(top_srcdir)/include
alsaucm_LDADD = -lasound alsaucm_LDADD = -lasound
# local build
INCLUDES += -I$(top_srcdir)/../alsa-lib/include
alsaucm_LDADD += -L$(top_srcdir)/../alsa-lib/src/.libs

7
alsaucm/go.sh Executable file
View file

@ -0,0 +1,7 @@
#!/bin/bash
#GDB="gdb --args"
ALSA_CONFIG_UCM="$HOME/alsa/alsa-lib/test/ucm" \
LD_PRELOAD="$HOME/alsa/alsa-lib/src/.libs/libasound.so" \
$GDB ./alsaucm "$@"

View file

@ -60,6 +60,7 @@ enum uc_cmd {
OM_OPEN, OM_OPEN,
OM_RESET, OM_RESET,
OM_RELOAD, OM_RELOAD,
OM_LISTCARDS,
OM_LIST, OM_LIST,
/* set/get */ /* set/get */
@ -75,21 +76,24 @@ enum uc_cmd {
struct cmd { struct cmd {
int code; int code;
int args; int args;
unsigned int opencard:1;
const char *id; const char *id;
}; };
static struct cmd cmds[] = { static struct cmd cmds[] = {
{ OM_OPEN, 1, "open" }, { OM_OPEN, 1, 0, "open" },
{ OM_RESET, 0, "reset" }, { OM_RESET, 0, 1, "reset" },
{ OM_RELOAD, 0, "reload" }, { OM_RELOAD, 0, 1, "reload" },
{ OM_LIST, 0, "list" }, { OM_LISTCARDS, 0, 0, "listcards" },
{ OM_SET, 2, "set" }, { OM_LIST, 0, 1, "list" },
{ OM_GET, 1, "get" }, { OM_SET, 2, 1, "set" },
{ OM_GETI, 1, "geti" }, { OM_GET, 1, 1, "get" },
{ OM_HELP, 0, "help" }, { OM_GETI, 1, 1, "geti" },
{ OM_QUIT, 0, "quit" }, { OM_HELP, 0, 0, "help" },
{ OM_HELP, 0, "h" }, { OM_QUIT, 0, 0, "quit" },
{ OM_UNKNOWN, 0, NULL } { OM_HELP, 0, 0, "h" },
{ OM_QUIT, 0, 0, "q" },
{ OM_UNKNOWN, 0, 0, NULL }
}; };
static void dump_help(struct context *context) static void dump_help(struct context *context)
@ -106,6 +110,7 @@ static void dump_help(struct context *context)
" open NAME open card NAME\n" " open NAME open card NAME\n"
" reset reset sound card to default state\n" " reset reset sound card to default state\n"
" reload reload configuration\n" " reload reload configuration\n"
" listcards list available cards\n"
" list IDENTIFIER list command\n" " list IDENTIFIER list command\n"
" get IDENTIFIER get string value\n" " get IDENTIFIER get string value\n"
" geti IDENTIFIER get integer value\n" " geti IDENTIFIER get integer value\n"
@ -155,8 +160,7 @@ static int do_one(struct context *context, struct cmd *cmd, char **argv)
long lval; long lval;
int err, i; int err, i;
if (cmd->code != OM_OPEN && cmd->code != OM_HELP && if (cmd->opencard && context->uc_mgr == NULL) {
cmd->code != OM_QUIT && context->uc_mgr == NULL) {
fprintf(stderr, "%s: command '%s' requires an open card\n", fprintf(stderr, "%s: command '%s' requires an open card\n",
context->command, cmd->id); context->command, cmd->id);
return 0; return 0;
@ -197,6 +201,24 @@ static int do_one(struct context *context, struct cmd *cmd, char **argv)
return err; return err;
} }
break; break;
case OM_LISTCARDS:
err = snd_use_case_card_list(&list);
if (err < 0) {
fprintf(stderr,
"%s: error failed to get card list: %s\n",
context->command,
snd_strerror(err));
return err;
}
if (err == 0)
printf(" list is empty\n");
for (i = 0; i < err / 2; i++) {
printf(" %i: %s\n", i, list[i*2]);
if (list[i*2+1])
printf(" %s\n", list[i*2+1]);
}
snd_use_case_free_list(list, err);
break;
case OM_LIST: case OM_LIST:
err = snd_use_case_get_list(context->uc_mgr, err = snd_use_case_get_list(context->uc_mgr,
argv[0], argv[0],