[alsa-devel] [PATCH] ascenario: Add dump and configure utils for ascneario.

Stefan Schmidt stefan at datenfreihafen.org
Fri Oct 9 17:53:32 CEST 2009


From: Stefan Schmidt <stefan at slimlogic.co.uk>

ascndump is used to dump the kcontrols in a syntax that can be used with ascnctl
later. To list and set scenarios you can use ascnctl. This patch depends on the
ascenario infrstructure to be merged in alsa-lib.

CC: Ian Molton <ian at mnementh.co.uk>
CC: Graeme Gregory <gg at slimlogic.co.uk>
Signed-off-by: Liam Girdwood <lrg at slimlogic.co.uk>
Signed-off-by: Stefan Schmidt <stefan at slimlogic.co.uk>
---
 Makefile.am           |    2 +-
 ascenario/Makefile.am |   14 ++++++++
 ascenario/alsa-scn.c  |   89 +++++++++++++++++++++++++++++++++++++++++++++++++
 ascenario/dump.c      |   34 +++++++++++++++++++
 configure.in          |    1 +
 5 files changed, 139 insertions(+), 1 deletions(-)
 create mode 100644 ascenario/Makefile.am
 create mode 100644 ascenario/alsa-scn.c
 create mode 100644 ascenario/dump.c

diff --git a/Makefile.am b/Makefile.am
index 5296977..34c542f 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1,6 +1,6 @@
 INCLUDES=-I$(top_srcdir)/include
 
-SUBDIRS = include alsactl utils m4 po
+SUBDIRS = include alsactl ascenario utils m4 po
 if ALSAMIXER
 SUBDIRS += alsamixer
 endif
diff --git a/ascenario/Makefile.am b/ascenario/Makefile.am
new file mode 100644
index 0000000..88f5a67
--- /dev/null
+++ b/ascenario/Makefile.am
@@ -0,0 +1,14 @@
+noinst_PROGRAMS = \
+        ascnctl \
+        ascndump
+
+ascndump_SOURCES = dump.c
+
+ascnctl_SOURCES = alsa-scn.c
+
+INCLUDES = \
+         -Wall -I$(top_srcdir)/include
+
+ascndump_LDADD = -lasound
+
+ascnctl_LDADD = -lasound
diff --git a/ascenario/alsa-scn.c b/ascenario/alsa-scn.c
new file mode 100644
index 0000000..1610936
--- /dev/null
+++ b/ascenario/alsa-scn.c
@@ -0,0 +1,89 @@
+/*
+ *  This library is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU Lesser General Public
+ *  License as published by the Free Software Foundation; either
+ *  version 2 of the License, or (at your option) any later version.
+ *
+ *  This library is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ *  Lesser General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ *  Copyright (C) 2008-2009 SlimLogic Ltd
+ *  Authors: Liam Girdwood <lrg at slimlogic.co.uk>
+ *           Stefan Schmidt <stefan at slimlogic.co.uk>
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <alsa/asoundlib.h>
+#include <alsa/ascenario.h>
+
+#define OP_LIST 1
+#define OP_SET  2
+
+void print_usage(char *name) {
+	printf("Usage: %s <cmd> [<scenario>]\n"
+	       " list  - list available scenarios\n"
+	       " set <name> - apply scenario <name>\n\n", name);
+}
+
+int main(int argc, char *argv[])
+{
+	struct snd_scenario *scn;
+	int num, i, op = 0, err, ret = 0;
+	const char **list;
+
+	if(argc > 2) {
+		if(!strcmp(argv[1], "set"))
+			op = OP_SET;
+	} else if(argc > 1) {
+		if(!strcmp(argv[1], "list"))
+			op = OP_LIST;
+	}
+
+	if(!op) {
+		print_usage(argv[0]);
+		exit(1);
+	}
+
+	/* open library */
+	scn = snd_scenario_open("default");
+	if (scn == NULL) {
+		printf("%s: failed to init\n", argv[0]);
+		return 0;
+	}
+
+	switch (op) {
+	case OP_LIST:
+		/* get list of scenarios */
+		num = snd_scenario_list(scn, &list);
+		if (num) {
+			for(i = 0 ; i < num ; i++)
+				printf("%s\n", list[i]);
+		} else {
+			printf("%s: no scenarios\n", argv[0]);
+			ret = 2;
+		}
+	break;
+	case OP_SET:
+		err = snd_scenario_set_scn(scn, argv[2]);
+                if (err < 0) {
+                        printf("failed to set scenario: %s\n", argv[2]);
+			ret = 3;
+		}
+	break;
+	default:
+		print_usage(argv[0]);
+	break;
+	}
+
+	snd_scenario_close(scn);
+	return ret;
+}
diff --git a/ascenario/dump.c b/ascenario/dump.c
new file mode 100644
index 0000000..420db5a
--- /dev/null
+++ b/ascenario/dump.c
@@ -0,0 +1,34 @@
+/*
+ *  This library is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU Lesser General Public
+ *  License as published by the Free Software Foundation; either
+ *  version 2 of the License, or (at your option) any later version.
+ *
+ *  This library is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ *  Lesser General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ *  Copyright (C) 2008-2009 SlimLogic Ltd
+ *  Authors: Liam Girdwood <lrg at slimlogic.co.uk>
+ *           Stefan Schmidt <stefan at slimlogic.co.uk>
+ */
+
+#include <stdio.h>
+#include <alsa/asoundlib.h>
+#include <alsa/ascenario.h>
+
+int main(int argc, char *argv[])
+{
+	if (argc != 2) {
+		printf("usage: %s card (hw: prefix needed"
+			" e.g. hw:CARD=0 or hw:Intel)\n", argv[0]);
+		return 0;
+	}
+
+	return snd_scenario_dump(NULL, argv[1]);
+}
diff --git a/configure.in b/configure.in
index 931d034..8fcf1d3 100644
--- a/configure.in
+++ b/configure.in
@@ -270,6 +270,7 @@ AC_OUTPUT(Makefile alsactl/Makefile alsactl/init/Makefile \
 	  m4/Makefile po/Makefile.in \
 	  alsaconf/alsaconf alsaconf/Makefile \
 	  alsaconf/po/Makefile \
+	  ascenario/Makefile \
 	  aplay/Makefile include/Makefile iecset/Makefile utils/Makefile \
 	  utils/alsa-utils.spec seq/Makefile seq/aconnect/Makefile \
 	  seq/aplaymidi/Makefile seq/aseqdump/Makefile seq/aseqnet/Makefile \
-- 
1.6.4.3



More information about the Alsa-devel mailing list