]> git.alsa-project.org Git - alsa-tools.git/commitdiff
hdspmixer - Automatic initialization of secondary cards
authorTakashi Iwai <tiwai@suse.de>
Wed, 14 Nov 2007 12:04:34 +0000 (13:04 +0100)
committerTakashi Iwai <tiwai@suse.de>
Wed, 14 Nov 2007 12:04:34 +0000 (13:04 +0100)
From debian bug#450805:

We are using Hammerfall DSP cards. After booting, their audio output
remains silent until hdspmixer is started. No interaction in the GUI
of hdspmixer is necessary to unmute the first HDSP card; however,
further cards are only unmuted when activating the respective GUI
page ("2", "3"). Apparently, hdspmixer does some automatic
initialization of the card when activating the page.

Since we'd like to have a fully automatic startup, the following
patch activates the page for each existing card on startup, thereby
initializing them. There are surely more elegant solutions, but this
patch is tested and solves the problem for us.

hdspmixer/src/HDSPMixerCardSelector.cxx
hdspmixer/src/HDSPMixerCardSelector.h
hdspmixer/src/HDSPMixerWindow.cxx

index 083f8177859e7f97f92f03b73372bf747955e57c..0e31847c1785210981e624853fe1da959d1a7e84 100644 (file)
@@ -45,27 +45,25 @@ void HDSPMixerCardSelector::draw()
     }    
 }
 
+void HDSPMixerCardSelector::ActivateCard (int i)
+{
+  card = i + 1;
+  basew->current_card = i;
+  basew->cards[i]->setMode (basew->cards[i]->getSpeed ());
+  redraw ();
+}
+
 int HDSPMixerCardSelector::handle(int e)
 {
     int xpos = Fl::event_x()-x();
     switch (e) {
        case FL_PUSH:
-           if (xpos < 13 && card != 1) {
-                   card = 1;
-                   basew->current_card = 0;
-                   basew->cards[0]->setMode(basew->cards[0]->getSpeed());
-                   redraw();
-           } else if (xpos >= 24 && xpos < 37 && card != 2 && basew->cards[1] != NULL) {
-                   card = 2;
-                   basew->current_card = 1;
-                   basew->cards[1]->setMode(basew->cards[1]->getSpeed());
-                   redraw();
-           } else if (xpos >= 48 && card != 3 && basew->cards[2] != NULL) {
-                   card = 3;
-                   basew->current_card = 2;
-                   basew->cards[2]->setMode(basew->cards[2]->getSpeed());
-                   redraw();
-           }
+           if (xpos < 13 && card != 1)
+             ActivateCard (0);
+           else if (xpos >= 24 && xpos < 37 && card != 2 && basew->cards[1] != NULL)
+             ActivateCard (1);
+           else if (xpos >= 48 && card != 3 && basew->cards[2] != NULL)
+             ActivateCard (2);
            return 1;
        default:
            return Fl_Widget::handle(e);
index 9a5676e738bdbadcdd9f2b37ec7772edca4c84f3..7d2912db8a6e42f5e05e3b55fcb3025c6605b967 100644 (file)
@@ -37,6 +37,7 @@ public:
     int card;
     HDSPMixerWindow *basew;
     HDSPMixerCardSelector(int x, int y, int w, int h, int card);
+    void ActivateCard (int i);
     void draw();
     int handle(int e);
 };
index cab0d5e03cc8949175d6acf477b93eb10d0649ef..fb901306ac5377e96c8bf9ce3cfe0aabc2fe1754 100644 (file)
@@ -700,6 +700,9 @@ HDSPMixerWindow::HDSPMixerWindow(int x, int y, int w, int h, const char *label,
     Fl::atclose = atclose_cb;
     Fl::add_handler(handler_cb);
     Fl::add_timeout(0.030, readregisters_cb, this);
+    i = 0;
+    while (cards[i] != NULL)
+      inputs->buttons->cardselector->ActivateCard (i++);
 }
 
 int HDSPMixerWindow::handle(int e)