/*
* The Ursary Audio Controls
*
- * (c) 2014 Martin Mares <mj@ucw.cz>
+ * (c) 2014--2020 Martin Mares <mj@ucw.cz>
*/
#undef LOCAL_DEBUG
#include <syslog.h>
#include "ursaryd.h"
+#include "usb.h"
/*
* Map of all controls
*
* rotary red button green button
- * 0 sink Brum mute -
+ * 0 sink PCH mute use headphones
* 1 - - -
* 2 - - -
* 3 - - -
- * 4 MPD mute play/pause/stop
- * 5 Albireo MPV mute -
- * 6 Albireo other mute -
- * 7 other machines mute -
+ * 4 MPD mute MPD play/pause
+ * 5 Albireo MPV mute MPD stop
+ * 6 Albireo other mute MPD prev
+ * 7 other machines mute MPD next
*
* center -
* slider -
*/
+#define PCH_SINK "alsa_output.pci-0000_00_1f.3.analog-stereo"
+
/*** Sink controls ***/
static double volume_from_pa(pa_volume_t vol)
noct_set_button(ring, 0);
}
+static void update_button_from_port(int button, const char *sink_name, const char *port_name)
+{
+ struct pulse_sink *s = pulse_sink_by_name(sink_name);
+ if (!s)
+ {
+ noct_set_button(button, 0);
+ return;
+ }
+
+ noct_set_button(button, !strcmp(s->active_port, port_name));
+}
+
static void update_sink_from_rotary(int delta, const char *sink_name)
{
struct pulse_sink *s = pulse_sink_by_name(sink_name);
pulse_sink_set_mute(s->idx, !s->mute);
}
+static void update_port_from_button(int on, const char *sink_name, const char *port1, const char *port2)
+{
+ if (!on)
+ return;
+
+ struct pulse_sink *s = pulse_sink_by_name(sink_name);
+ if (!s)
+ return;
+
+ const char *port = port1;
+ if (!strcmp(s->active_port, port1))
+ port = port2;
+
+ DBG("## Setting port of sink %s to %s", s->name, port);
+ pulse_sink_set_port(s->idx, port);
+}
+
/*** Client controls ***/
struct client_map {
}
}
+#if 0 // Not used at the moment
+
static int find_touched_client(void)
{
int touched = -1;
return touched;
}
+#endif
+
/*** Default sink controls ***/
+#if 0 // Not mapped to any button at the moment
+
static const char *get_client_sink(int i)
{
const char *sink = NULL;
}
}
+#endif
+
/*** MPD controls ***/
static bool mpd_flash_state;
}
// Everything normal
- update_ring_from_sink(0, "alsa_output.brum.analog-stereo");
+ update_ring_from_sink(0, PCH_SINK);
+ update_button_from_port(8, PCH_SINK, "analog-output-headphones");
update_groups();
#if 0
update_default_sink();
switch (rotary)
{
case 0:
- update_sink_from_rotary(delta, "alsa_output.brum.analog-stereo");
+ update_sink_from_rotary(delta, PCH_SINK);
break;
default:
update_group_from_rotary(rotary, delta);
switch (button)
{
case 0:
- update_sink_mute_from_button(on, "alsa_output.brum.analog-stereo");
+ update_sink_mute_from_button(on, PCH_SINK);
break;
-#if 0
case 8:
+ update_port_from_button(on, PCH_SINK, "analog-output-lineout", "analog-output-headphones");
+ break;
+#if 0
case 9:
case 10:
update_default_sink_from_button(button, on);
case 12:
update_mpd_from_button(button, on);
break;
+ case 13:
+ if (on)
+ mpd_stop();
+ break;
+ case 14:
+ if (on)
+ mpd_prev();
+ break;
+ case 15:
+ if (on)
+ mpd_next();
+ break;
default:
update_group_from_button(button, on);
}
main_init();
update_timer.handler = do_update;
+ usb_init();
noct_init();
pulse_init();
mpd_init();