Update of /cvsroot/alsa/alsa-utils/iecset In directory sc8-pr-cvs1:/tmp/cvs-serv5620
Modified Files: iecset.c Log Message: Clemens Ladisch <[EMAIL PROTECTED]> - add error handler for ALSA errors - enumerate all controls to find the desired control (because SPDIF is device 1 on ymfpci) Index: iecset.c =================================================================== RCS file: /cvsroot/alsa/alsa-utils/iecset/iecset.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- iecset.c 28 Oct 2003 17:42:28 -0000 1.2 +++ iecset.c 3 Nov 2003 10:43:32 -0000 1.3 @@ -76,6 +76,12 @@ }; +static void error(const char *s, int err) +{ + fprintf(stderr, "%s: %s\n", s, snd_strerror(err)); +} + + static void usage(void) { int i; @@ -279,13 +285,16 @@ int main(int argc, char **argv) { const char *dev = "default"; - const char *spdif_str = "IEC958 Playback Default"; + const char *spdif_str = SND_CTL_NAME_IEC958("", PLAYBACK, DEFAULT); snd_ctl_t *ctl; + snd_ctl_elem_list_t *clist; + snd_ctl_elem_id_t *cid; snd_ctl_elem_value_t *cval; snd_aes_iec958_t iec958; int from_stdin = 0; int dumphex = 0; - int i, c; + int i, c, err; + unsigned int controls, cidx; char tmpname[32]; int parms[IDX_LAST]; @@ -318,20 +327,42 @@ } } - if (snd_ctl_open(&ctl, dev, 0) < 0) { - perror("snd_ctl_open"); + if ((err = snd_ctl_open(&ctl, dev, 0)) < 0) { + error("snd_ctl_open", err); return 1; } + snd_ctl_elem_list_alloca(&clist); + if ((err = snd_ctl_elem_list(ctl, clist)) < 0) { + error("snd_ctl_elem_list", err); + return 1; + } + if ((err = snd_ctl_elem_list_alloc_space(clist, snd_ctl_elem_list_get_count(clist))) < 0) { + error("snd_ctl_elem_list_alloc_space", err); + return 1; + } + if ((err = snd_ctl_elem_list(ctl, clist)) < 0) { + error("snd_ctl_elem_list", err); + return 1; + } + + controls = snd_ctl_elem_list_get_used(clist); + for (cidx = 0; cidx < controls; cidx++) { + if (!strcmp(snd_ctl_elem_list_get_name(clist, cidx), spdif_str)) + break; + } + if (cidx >= controls) { + fprintf(stderr, "control \"%s\" not found\n", spdif_str); + return 1; + } + + snd_ctl_elem_id_alloca(&cid); + snd_ctl_elem_list_get_id(clist, cidx, cid); snd_ctl_elem_value_alloca(&cval); - snd_ctl_elem_value_set_interface(cval, SND_CTL_ELEM_IFACE_MIXER); - snd_ctl_elem_value_set_name(cval, spdif_str); - if (snd_ctl_elem_read(ctl, cval) < 0) { - snd_ctl_elem_value_set_interface(cval, SND_CTL_ELEM_IFACE_PCM); - if (snd_ctl_elem_read(ctl, cval) < 0) { - perror("snd_ctl_elem_read"); - return 1; - } + snd_ctl_elem_value_set_id(cval, cid); + if ((err = snd_ctl_elem_read(ctl, cval)) < 0) { + error("snd_ctl_elem_read", err); + return 1; } snd_ctl_elem_value_get_iec958(cval, &iec958); @@ -347,12 +378,12 @@ if (update_iec958_status(&iec958, parms)) { /* store the values */ snd_ctl_elem_value_set_iec958(cval, &iec958); - if (snd_ctl_elem_write(ctl, cval) < 0) { - perror("snd_ctl_elem_write"); + if ((err = snd_ctl_elem_write(ctl, cval)) < 0) { + error("snd_ctl_elem_write", err); return 1; } - if (snd_ctl_elem_read(ctl, cval) < 0) { - perror("snd_ctl_elem_write"); + if ((err = snd_ctl_elem_read(ctl, cval)) < 0) { + error("snd_ctl_elem_write", err); return 1; } snd_ctl_elem_value_get_iec958(cval, &iec958); ------------------------------------------------------- This SF.net email is sponsored by: SF.net Giveback Program. Does SourceForge.net help you be more productive? Does it help you create better code? SHARE THE LOVE, and help us help YOU! Click Here: http://sourceforge.net/donate/ _______________________________________________ Alsa-cvslog mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/alsa-cvslog