]> git.alsa-project.org Git - alsa-tools.git/commitdiff
Add auto-probing of ice1712 cards
authorTakashi Iwai <tiwai@suse.de>
Mon, 20 Dec 2004 19:03:14 +0000 (19:03 +0000)
committerTakashi Iwai <tiwai@suse.de>
Mon, 20 Dec 2004 19:03:14 +0000 (19:03 +0000)
The ice1712 card is probed automatically when no option is given.

envy24control/envy24control.c

index c3856587511e6e2c7d097e97264be959235601ea..ce7d896772e4ed27fc40512a896c3bf0787ac6d6 100644 (file)
@@ -1972,7 +1972,7 @@ int main(int argc, char **argv)
        /* Go through gtk initialization */
         gtk_init(&argc, &argv);
 
-       name = "hw:0";
+       name = NULL; /* probe */
        card_number = 0;
        input_channels = MAX_INPUT_CHANNELS;
        output_channels = MAX_OUTPUT_CHANNELS;
@@ -2055,17 +2055,40 @@ int main(int argc, char **argv)
                default_profile = argv[optind];
        }
 
-       if ((err = snd_ctl_open(&ctl, name, 0)) < 0) {
-               fprintf(stderr, "snd_ctl_open: %s\n", snd_strerror(err));
-               exit(EXIT_FAILURE);
-       }
-       if ((err = snd_ctl_card_info(ctl, hw_info)) < 0) {
-               fprintf(stderr, "snd_ctl_card_info: %s\n", snd_strerror(err));
-               exit(EXIT_FAILURE);
-       }
-       if (strcmp(snd_ctl_card_info_get_driver(hw_info), "ICE1712")) {
-               fprintf(stderr, "invalid card type (driver is %s)\n", snd_ctl_card_info_get_driver(hw_info));
-               exit(EXIT_FAILURE);
+       if (! name) {
+               /* probe cards */
+               static char cardname[8];
+               /* FIXME: hardcoded max number of cards */
+               for (card_number = 0; card_number < 8; card_number++) {
+                       sprintf(cardname, "hw:%d", card_number);
+                       if (snd_ctl_open(&ctl, cardname, 0) < 0)
+                               continue;
+                       if (snd_ctl_card_info(ctl, hw_info) < 0 ||
+                           strcmp(snd_ctl_card_info_get_driver(hw_info), "ICE1712")) {
+                               snd_ctl_close(ctl);
+                               continue;
+                       }
+                       /* found */
+                       name = cardname;
+                       break;
+               }
+               if (! name) {
+                       fprintf(stderr, "No ICE1712 cards found\n");
+                       exit(EXIT_FAILURE);
+               }
+       } else {
+               if ((err = snd_ctl_open(&ctl, name, 0)) < 0) {
+                       fprintf(stderr, "snd_ctl_open: %s\n", snd_strerror(err));
+                       exit(EXIT_FAILURE);
+               }
+               if ((err = snd_ctl_card_info(ctl, hw_info)) < 0) {
+                       fprintf(stderr, "snd_ctl_card_info: %s\n", snd_strerror(err));
+                       exit(EXIT_FAILURE);
+               }
+               if (strcmp(snd_ctl_card_info_get_driver(hw_info), "ICE1712")) {
+                       fprintf(stderr, "invalid card type (driver is %s)\n", snd_ctl_card_info_get_driver(hw_info));
+                       exit(EXIT_FAILURE);
+               }
        }
 
        snd_ctl_elem_value_set_interface(val, SND_CTL_ELEM_IFACE_CARD);