From 0c5b3434a8ac47d07af466253ded652d4ce578af Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Tue, 19 Jun 2001 11:52:50 +0000 Subject: [PATCH] Added snd_func_macro and added 'defaults.*' definitions to alsa.conf. Changed arguments CARD to string (to accept card IDs). Enhanced function card_strtype to accept card IDs. --- src/alsa.conf | 193 ++++++++++++++++++++++++++---------- src/cards/EMU10K1.conf | 13 ++- src/cards/ENS1370.conf | 6 +- src/cards/FM801.conf | 4 +- src/cards/INTEL8X0.conf | 8 +- src/cards/SI_7018.conf | 6 +- src/cards/TRID4DWAVENX.conf | 8 +- src/cards/YMFPCI.conf | 8 +- src/confmisc.c | 51 +++++++++- 9 files changed, 220 insertions(+), 77 deletions(-) diff --git a/src/alsa.conf b/src/alsa.conf index 49144a8d..1446280a 100644 --- a/src/alsa.conf +++ b/src/alsa.conf @@ -11,6 +11,18 @@ preload { ] } +# defaults + +defaults.ctl.card 0 +defaults.pcm.card 0 +defaults.pcm.device 0 +defaults.pcm.subdevice -1 +defaults.pcm.front.card defaults.pcm.card +defaults.pcm.front.device defaults.pcm.device +defaults.rawmidi.card 0 +defaults.rawmidi.device 0 +defaults.rawmidi.subdevice -1 + # # PCM interface # @@ -18,14 +30,17 @@ preload { pcm.hw { @args [ CARD DEV SUBDEV ] @args.CARD { - type integer + type string default { - @func igetenv + @func getenv vars [ ALSA_PCM_CARD ALSA_CARD ] - default 0 + default { + @func macro + name defaults.pcm.card + } } } @args.DEV { @@ -35,12 +50,18 @@ pcm.hw { vars [ ALSA_PCM_DEVICE ] - default 0 + default { + @func macro + name defaults.pcm.device + } } } @args.SUBDEV { type integer - default -1 + default { + @func macro + name defaults.pcm.subdevice + } } type hw card $CARD @@ -51,14 +72,17 @@ pcm.hw { pcm.plughw { @args [ CARD DEV SUBDEV ] @args.CARD { - type integer + type string default { - @func igetenv + @func getenv vars [ ALSA_PCM_CARD ALSA_CARD ] - default 0 + default { + @func macro + name defaults.pcm.card + } } } @args.DEV { @@ -68,12 +92,18 @@ pcm.plughw { vars [ ALSA_PCM_DEVICE ] - default 0 + default { + @func macro + name defaults.pcm.device + } } } @args.SUBDEV { type integer - default -1 + default { + @func macro + name defaults.pcm.subdevice + } } type plug slave.pcm { @@ -148,36 +178,48 @@ pcm.default { slave.pcm { type hw card { - @func igetenv + @func getenv vars [ ALSA_PCM_CARD ALSA_CARD ] - default 0 + default { + @func macro + name defaults.pcm.card + } } device { @func igetenv vars [ ALSA_PCM_DEVICE ] - default 0 + default { + @func macro + name defaults.pcm.device + } + } + subdevice { + @func macro + name defaults.pcm.subdevice } - subdevice -1 } } pcm.front { @args [ CARD DEV ] @args.CARD { - type integer + type string default { - @func igetenv + @func getenv vars [ ALSA_FRONT_CARD ALSA_PCM_CARD ALSA_CARD ] - default 0 + default { + @func macro + name defaults.pcm.front.card + } } } @args.DEV { @@ -187,7 +229,10 @@ pcm.front { vars [ ALSA_FRONT_DEVICE ] - default 0 + default { + @func macro + name defaults.pcm.front.device + } } } @func refer @@ -221,15 +266,18 @@ pcm.front { pcm.rear { @args [ CARD DEV ] @args.CARD { - type integer + type string default { - @func igetenv + @func getenv vars [ ALSA_REAR_CARD ALSA_PCM_CARD ALSA_CARD ] - default 0 + default { + @func macro + name defaults.pcm.rear.card + } } } @args.DEV { @@ -239,7 +287,10 @@ pcm.rear { vars [ ALSA_REAR_DEVICE ] - default 0 + default { + @func macro + name defaults.pcm.rear.device + } } } @func refer @@ -273,15 +324,18 @@ pcm.rear { pcm.center_lfe { @args [ CARD DEV ] @args.CARD { - type integer + type string default { - @func igetenv + @func getenv vars [ ALSA_CENTER_LFE_CARD ALSA_PCM_CARD ALSA_CARD ] - default 0 + default { + @func macro + name defaults.pcm.center_lfe.card + } } } @args.DEV { @@ -291,7 +345,10 @@ pcm.center_lfe { vars [ ALSA_CENTER_LFE_DEVICE ] - default 0 + default { + @func macro + name defaults.pcm.center_lfe.device + } } } @func refer @@ -325,15 +382,18 @@ pcm.center_lfe { pcm.surround40 { @args [ CARD DEV ] @args.CARD { - type integer + type string default { - @func igetenv + @func getenv vars [ ALSA_SURROUND40_CARD ALSA_PCM_CARD ALSA_CARD ] - default 0 + default { + @func macro + name defaults.pcm.surround40.card + } } } @args.DEV { @@ -343,7 +403,10 @@ pcm.surround40 { vars [ ALSA_SURROUND40_DEVICE ] - default 0 + default { + @func macro + name defaults.pcm.surround40.device + } } } @func refer @@ -377,15 +440,18 @@ pcm.surround40 { pcm.surround51 { @args [ CARD DEV ] @args.CARD { - type integer + type string default { - @func igetenv + @func getenv vars [ ALSA_SURROUND51_CARD ALSA_PCM_CARD ALSA_CARD ] - default 0 + default { + @func macro + name defaults.pcm.surround51.card + } } } @args.DEV { @@ -395,7 +461,10 @@ pcm.surround51 { vars [ ALSA_SURROUND51_DEVICE ] - default 0 + default { + @func macro + name defaults.pcm.surround51.device + } } } @func refer @@ -429,15 +498,18 @@ pcm.surround51 { pcm.iec958 { @args [ CARD DEV AES0 AES1 AES2 AES3 ] @args.CARD { - type integer + type string default { - @func igetenv + @func getenv vars [ ALSA_IEC958_CARD ALSA_PCM_CARD ALSA_CARD ] - default 0 + default { + @func macro + name defaults.pcm.iec958.card + } } } @args.DEV { @@ -447,7 +519,10 @@ pcm.iec958 { vars [ ALSA_IEC958_DEVICE ] - default 0 + default { + @func macro + name defaults.pcm.iec958.device + } } } @args.AES0 { @@ -512,14 +587,17 @@ pcm.spdif pcm.iec958 ctl.hw { @args[ CARD ] @args.CARD { - type integer + type string default { - @func igetenv + @func getenv vars [ ALSA_CTL_CARD ALSA_CARD ] - default 0 + default { + @func macro + name defaults.ctl.card + } } } type hw @@ -542,12 +620,15 @@ ctl.shm { ctl.default { type hw card { - @func igetenv + @func getenv vars [ ALSA_CTL_CARD ALSA_CARD ] - default 0 + default { + @func macro + name defaults.ctl.card + } } } @@ -558,14 +639,17 @@ ctl.default { rawmidi.hw { @args [ CARD DEV SUBDEV ] @args.CARD { - type integer + type string default { - @func igetenv + @func getenv vars [ ALSA_RAWMIDI_CARD ALSA_CARD ] - default 0 + default { + @func macro + name defaults.rawmidi.card + } } } @args.DEV { @@ -575,7 +659,10 @@ rawmidi.hw { vars [ ALSA_RAWMIDI_DEVICE ] - default 0 + default { + @func macro + name defaults.rawmidi.device + } } } @args.SUBDEV { @@ -591,19 +678,25 @@ rawmidi.hw { rawmidi.default { type hw card { - @func igetenv + @func getenv vars [ ALSA_RAWMIDI_CARD ALSA_CARD ] - default 0 + default { + @func macro + name defaults.rawmidi.card + } } device { @func igetenv vars [ ALSA_RAWMIDI_DEVICE ] - default 0 + default { + @func macro + name defaults.rawmidi.device + } } } diff --git a/src/cards/EMU10K1.conf b/src/cards/EMU10K1.conf index d8b3d909..288dcd45 100644 --- a/src/cards/EMU10K1.conf +++ b/src/cards/EMU10K1.conf @@ -5,7 +5,7 @@ cards.EMU10K1.pcm.front.0 { @args [ CARD ] @args.CARD { - type integer + type string } type hw card $CARD @@ -15,7 +15,7 @@ cards.EMU10K1.pcm.front.0 { cards.EMU10K1.pcm.rear.0 { @args [ CARD ] @args.CARD { - type integer + type string } type hooks slave.pcm { @@ -44,6 +44,9 @@ cards.EMU10K1.pcm.rear.0 { cards.EMU10K1.pcm.center_lfe { @args [ CARD ] + @args.CARD { + type string + } type hooks slave.pcm { type hw @@ -84,7 +87,7 @@ cards.EMU10K1.pcm.center_lfe { cards.EMU10K1.pcm.surround40.0 { @args [ CARD ] @args.CARD { - type integer + type string } type multi slaves [ @@ -118,7 +121,7 @@ cards.EMU10K1.pcm.surround40.0 { cards.EMU10K1.pcm.surround51.0 { @args [ CARD ] @args.CARD { - type integer + type string } type multi slaves [ @@ -163,7 +166,7 @@ cards.EMU10K1.pcm.surround51.0 { cards.EMU10K1.pcm.iec958.0 { @args [ CARD DEV AES0 AES1 AES2 AES3 ] @args.CARD { - type integer + type string } @args.DEV { type integer diff --git a/src/cards/ENS1370.conf b/src/cards/ENS1370.conf index b80d969a..0f78be82 100644 --- a/src/cards/ENS1370.conf +++ b/src/cards/ENS1370.conf @@ -5,7 +5,7 @@ cards.ENS1370.pcm.front.0 { @args [ CARD ] @args.CARD { - type integer + type string } type hw card $CARD @@ -15,7 +15,7 @@ cards.ENS1370.pcm.front.0 { cards.ENS1370.pcm.rear.0 { @args [ CARD ] @args.CARD { - type integer + type string } type hooks slave.pcm { @@ -45,7 +45,7 @@ cards.ENS1370.pcm.rear.0 { cards.ENS1370.pcm.surround40.0 { @args [ CARD ] @args.CARD { - type integer + type string } type multi master 1 diff --git a/src/cards/FM801.conf b/src/cards/FM801.conf index ecd5b869..81f542bc 100644 --- a/src/cards/FM801.conf +++ b/src/cards/FM801.conf @@ -5,7 +5,7 @@ cards.FM801.front.0 { @args [ CARD ] @args.CARD { - type integer + type string } type hw card $CARD @@ -18,7 +18,7 @@ cards.FM801.surround51.0 "cards.FM801.front.0" cards.FM801.iec958.0 { @args [ CARD DEV AES0 AES1 AES2 AES3 ] @args.CARD { - type integer + type string } @args.DEV { type integer diff --git a/src/cards/INTEL8X0.conf b/src/cards/INTEL8X0.conf index c9a956a0..9628d09c 100644 --- a/src/cards/INTEL8X0.conf +++ b/src/cards/INTEL8X0.conf @@ -5,7 +5,7 @@ cards.INTEL8X0.pcm.front.0 { @args [ CARD ] @args.CARD { - type integer + type string } type hw card $CARD @@ -15,7 +15,7 @@ cards.INTEL8X0.pcm.front.0 { cards.INTEL8X0.pcm.surround40.0 { @args [ CARD ] @args.CARD { - type integer + type string } type multi slaves [ @@ -40,7 +40,7 @@ cards.INTEL8X0.pcm.surround40.0 { cards.INTEL8X0.pcm.surround51.0 { @args [ CARD ] @args.CARD { - type integer + type string } type multi slaves [ @@ -67,7 +67,7 @@ cards.INTEL8X0.pcm.surround51.0 { cards.INTEL8X0.pcm.iec958.0 { @args [ CARD DEV AES0 AES1 AES2 AES3 ] @args.CARD { - type integer + type string } @args.DEV { type integer diff --git a/src/cards/SI_7018.conf b/src/cards/SI_7018.conf index 1193c6cb..73e1433c 100644 --- a/src/cards/SI_7018.conf +++ b/src/cards/SI_7018.conf @@ -5,7 +5,7 @@ cards.SI_7018.pcm.front.0 { @args [ CARD ] @args.CARD { - type integer + type string } type hw card $CARD @@ -15,7 +15,7 @@ cards.SI_7018.pcm.front.0 { cards.SI_7018.pcm.rear.0 { @args [ CARD ] @args.CARD { - type integer + type string } type hooks slave.pcm { @@ -39,7 +39,7 @@ cards.SI_7018.pcm.rear.0 { cards.SI_7018.pcm.surround40.0 { @args [ CARD ] @args.CARD { - type integer + type string } type multi slaves [ diff --git a/src/cards/TRID4DWAVENX.conf b/src/cards/TRID4DWAVENX.conf index d3ba927b..7b4f4e49 100644 --- a/src/cards/TRID4DWAVENX.conf +++ b/src/cards/TRID4DWAVENX.conf @@ -5,7 +5,7 @@ cards.TRID4DWAVENX.pcm.front.0 { @args [ CARD ] @args.CARD { - type integer + type string } type hw card $CARD @@ -15,7 +15,7 @@ cards.TRID4DWAVENX.pcm.front.0 { cards.TRID4DWAVENX.pcm.rear.0 { @args [ CARD ] @args.CARD { - type integer + type string } type hooks slave.pcm { @@ -53,7 +53,7 @@ cards.TRID4DWAVENX.pcm.rear.0 { cards.TRID4DWAVENX.pcm.surround40.0 { @args [ CARD ] @args.CARD { - type integer + type string } type multi slaves [ @@ -87,7 +87,7 @@ cards.TRID4DWAVENX.pcm.surround40.0 { cards.TRID4DWAVENX.pcm.iec958.0 { @args [ CARD AES0 AES1 AES2 AES3 ] @args.CARD { - type integer + type string } @args.AES0 { type integer diff --git a/src/cards/YMFPCI.conf b/src/cards/YMFPCI.conf index b5479182..02ff6f7a 100644 --- a/src/cards/YMFPCI.conf +++ b/src/cards/YMFPCI.conf @@ -5,7 +5,7 @@ cards.YMFPCI.front.0 { @args [ CARD ] @args.CARD { - type integer + type string } type hw card $CARD @@ -15,7 +15,7 @@ cards.YMFPCI.front.0 { cards.YMFPCI.rear.0 { @args [ CARD ] @args.CARD { - type integer + type string } type hw card $CARD @@ -25,7 +25,7 @@ cards.YMFPCI.rear.0 { cards.YMFPCI.surround40.0 { @args [ CARD ] @args.CARD { - type integer + type string } type multi slaves [ @@ -59,7 +59,7 @@ cards.YMFPCI.surround40.0 { cards.YMFPCI.iec958.0 { @args [ CARD DEV AES0 AES1 AES2 AES3 ] @args.CARD { - type integer + type string } @args.DEV { type integer diff --git a/src/confmisc.c b/src/confmisc.c index 3f86a8bc..7ccb9fa2 100644 --- a/src/confmisc.c +++ b/src/confmisc.c @@ -432,6 +432,7 @@ int snd_func_card_strtype(snd_config_t **dst, snd_config_t *root, snd_config_t * { snd_config_t *n; char *res = NULL; + char *str; snd_ctl_t *ctl = NULL; snd_ctl_card_info_t *info; long v; @@ -447,11 +448,19 @@ int snd_func_card_strtype(snd_config_t **dst, snd_config_t *root, snd_config_t * SNDERR("error evaluating card"); goto __error; } - err = snd_config_get_integer(n, &v); + err = snd_config_get_ascii(n, &str); if (err < 0) { - SNDERR("field card is not an integer"); + SNDERR("field card is not an integer or a string"); + goto __error; + } + v = snd_card_get_index(str); + if (v < 0) { + SNDERR("cannot find card '%s'", str); + free(str); + err = v; goto __error; } + free(str); err = open_ctl(v, &ctl); if (err < 0) { SNDERR("could not open control for card %li", v); @@ -682,3 +691,41 @@ int snd_func_refer(snd_config_t **dst, snd_config_t *root, snd_config_t *src, vo _end: return err; } + +int snd_func_macro(snd_config_t **dst, snd_config_t *root, snd_config_t *src, void *private_data) +{ + snd_config_t *n; + const char *name; + char *buf = NULL; + int err; + + err = snd_config_search(src, "name", &n); + if (err >= 0) { + err = snd_config_evaluate(n, root, private_data, NULL); + if (err < 0) { + SNDERR("error evaluating name"); + goto _end; + } + err = snd_config_get_string(n, &name); + if (err < 0) { + SNDERR("name is not a string"); + goto _end; + } + } + if (strchr(name, '.') == NULL) { + buf = malloc(6 + strlen(name) + 1); + if (buf == NULL) { + err = -ENOMEM; + goto _end; + } + strcpy(buf, "macro."); + strcat(buf, name); + } + err = snd_config_search_definition(root, NULL, name, dst); + if (err < 0) + SNDERR("Unable to find macro definition '%s'", name); + _end: + if (buf) + free(buf); + return err; +} -- 2.47.1