summaryrefslogtreecommitdiff
path: root/alsaucm
diff options
context:
space:
mode:
authorJaroslav Kysela <perex@perex.cz>2010-10-13 11:47:23 +0200
committerJaroslav Kysela <perex@perex.cz>2010-10-13 11:47:23 +0200
commit47563fb2eb22e641bc2fc1fc02528fbd3bdd4c5f (patch)
tree09632adfbaec452132a94ea21c8c2706ca6f6a09 /alsaucm
parenta9af4348dfd046313437d1c4cddd7dc0b71b1387 (diff)
downloadalsa-utils-47563fb2eb22e641bc2fc1fc02528fbd3bdd4c5f.tar.gz
ucm: added listcards command
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
Diffstat (limited to 'alsaucm')
-rw-r--r--alsaucm/Makefile.am4
-rwxr-xr-xalsaucm/go.sh7
-rw-r--r--alsaucm/usecase.c48
3 files changed, 46 insertions, 13 deletions
diff --git a/alsaucm/Makefile.am b/alsaucm/Makefile.am
index 50e1f5b..4eba677 100644
--- a/alsaucm/Makefile.am
+++ b/alsaucm/Makefile.am
@@ -7,3 +7,7 @@ INCLUDES = \
-Wall -I$(top_srcdir)/include
alsaucm_LDADD = -lasound
+
+# local build
+INCLUDES += -I$(top_srcdir)/../alsa-lib/include
+alsaucm_LDADD += -L$(top_srcdir)/../alsa-lib/src/.libs
diff --git a/alsaucm/go.sh b/alsaucm/go.sh
new file mode 100755
index 0000000..2aadd1c
--- /dev/null
+++ b/alsaucm/go.sh
@@ -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 "$@"
diff --git a/alsaucm/usecase.c b/alsaucm/usecase.c
index 2820eaa..58165f7 100644
--- a/alsaucm/usecase.c
+++ b/alsaucm/usecase.c
@@ -60,6 +60,7 @@ enum uc_cmd {
OM_OPEN,
OM_RESET,
OM_RELOAD,
+ OM_LISTCARDS,
OM_LIST,
/* set/get */
@@ -75,21 +76,24 @@ enum uc_cmd {
struct cmd {
int code;
int args;
+ unsigned int opencard:1;
const char *id;
};
static struct cmd cmds[] = {
- { OM_OPEN, 1, "open" },
- { OM_RESET, 0, "reset" },
- { OM_RELOAD, 0, "reload" },
- { OM_LIST, 0, "list" },
- { OM_SET, 2, "set" },
- { OM_GET, 1, "get" },
- { OM_GETI, 1, "geti" },
- { OM_HELP, 0, "help" },
- { OM_QUIT, 0, "quit" },
- { OM_HELP, 0, "h" },
- { OM_UNKNOWN, 0, NULL }
+ { OM_OPEN, 1, 0, "open" },
+ { OM_RESET, 0, 1, "reset" },
+ { OM_RELOAD, 0, 1, "reload" },
+ { OM_LISTCARDS, 0, 0, "listcards" },
+ { OM_LIST, 0, 1, "list" },
+ { OM_SET, 2, 1, "set" },
+ { OM_GET, 1, 1, "get" },
+ { OM_GETI, 1, 1, "geti" },
+ { OM_HELP, 0, 0, "help" },
+ { OM_QUIT, 0, 0, "quit" },
+ { OM_HELP, 0, 0, "h" },
+ { OM_QUIT, 0, 0, "q" },
+ { OM_UNKNOWN, 0, 0, NULL }
};
static void dump_help(struct context *context)
@@ -106,6 +110,7 @@ static void dump_help(struct context *context)
" open NAME open card NAME\n"
" reset reset sound card to default state\n"
" reload reload configuration\n"
+" listcards list available cards\n"
" list IDENTIFIER list command\n"
" get IDENTIFIER get string 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;
int err, i;
- if (cmd->code != OM_OPEN && cmd->code != OM_HELP &&
- cmd->code != OM_QUIT && context->uc_mgr == NULL) {
+ if (cmd->opencard && context->uc_mgr == NULL) {
fprintf(stderr, "%s: command '%s' requires an open card\n",
context->command, cmd->id);
return 0;
@@ -197,6 +201,24 @@ static int do_one(struct context *context, struct cmd *cmd, char **argv)
return err;
}
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:
err = snd_use_case_get_list(context->uc_mgr,
argv[0],