]> mj.ucw.cz Git - ursary.git/blobdiff - ursaryd.c
Nocturn: Do not write to a missing USB device
[ursary.git] / ursaryd.c
index 3b1d051313cd4b6eeffe5fd3004e9d2f36708311..eaa56542b46eec0f4ce81333ec81dcc414d8bce2 100644 (file)
--- a/ursaryd.c
+++ b/ursaryd.c
 
 #include "ursaryd.h"
 
+/*
+ *     Map of all controls
+ *
+ *             rotary          red button      green button
+ *     0       sink Ursarium   mute            select as default (or assign to client selected by touch)
+ *     1       sink Catarium   mute            dtto
+ *     2       -               -               -
+ *     3       -               -               -
+ *     4       MPD             mute            play/pause/stop
+ *     5       Albireo         mute            -
+ *     6       Ogion           mute            -
+ *     7       Ursula          mute            -
+ *
+ *     center  all sinks
+ *     slider  -
+ */
+
 /*** Sink controls ***/
 
 static double volume_from_pa(pa_volume_t vol)
@@ -337,13 +354,40 @@ static void update_default_sink_from_button(int button, int on)
 
 /*** MPD controls ***/
 
+static bool mpd_flash_state;
+
+static void mpd_flash_timeout(struct main_timer *t)
+{
+  mpd_flash_state ^= 1;
+  noct_set_button(12, mpd_flash_state);
+  timer_add_rel(t, 500);
+}
+
+static struct main_timer mpd_flash_timer = {
+  .handler = mpd_flash_timeout,
+};
+
 static void update_mpd(void)
 {
   const char *state = mpd_get_player_state();
   if (!strcmp(state, "play"))
-    noct_set_button(12, 1);
+    {
+      noct_set_button(12, 1);
+      timer_del(&mpd_flash_timer);
+    }
+  else if (!strcmp(state, "pause"))
+    {
+      if (!timer_is_active(&mpd_flash_timer))
+       {
+         mpd_flash_state = 1;
+         mpd_flash_timeout(&mpd_flash_timer);
+       }
+    }
   else
-    noct_set_button(12, 0);
+    {
+      noct_set_button(12, 0);
+      timer_del(&mpd_flash_timer);
+    }
 }
 
 static void mpd_button_timeout(struct main_timer *t)
@@ -359,28 +403,36 @@ static void update_mpd_from_button(int button UNUSED, int on)
     .handler = mpd_button_timeout,
   };
 
+  const char *state = mpd_get_player_state();
+
   if (!on)
     {
-      timer_del(&mpd_button_timer);
+      if (timer_is_active(&mpd_button_timer))
+       {
+         timer_del(&mpd_button_timer);
+         if (!strcmp(state, "play"))
+           {
+             DBG("MPD pause");
+             mpd_pause(1);
+           }
+         else if (!strcmp(state, "pause"))
+           {
+             DBG("MPD resume");
+             mpd_pause(0);
+           }
+       }
       return;
     }
 
-  const char *state = mpd_get_player_state();
   if (!strcmp(state, "stop"))
     {
       DBG("MPD play");
       mpd_play();
     }
-  else if (!strcmp(state, "play"))
+  else
     {
-      DBG("MPD pause");
+      DBG("MPD starting button timer");
       timer_add_rel(&mpd_button_timer, 1000);
-      mpd_pause(1);
-    }
-  else if (!strcmp(state, "pause"))
-    {
-      DBG("MPD resume");
-      mpd_pause(0);
     }
 }