X-Git-Url: http://mj.ucw.cz/gitweb/?a=blobdiff_plain;f=ursaryd.c;h=8df65df31a8493eee81ea6cb22a0889c6e453ede;hb=ed7db1e07ba9ca31a7baab970f42d476b2c03021;hp=c15db3d20b20fb3e81e60b268654120877a60c2a;hpb=2d12407af2d5aa13817547eb558d53c8c798c970;p=ursary.git diff --git a/ursaryd.c b/ursaryd.c index c15db3d..8df65df 100644 --- a/ursaryd.c +++ b/ursaryd.c @@ -1,7 +1,7 @@ /* * The Ursary Audio Controls * - * (c) 2014 Martin Mares + * (c) 2014--2020 Martin Mares */ #undef LOCAL_DEBUG @@ -21,24 +21,27 @@ #include #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) @@ -73,6 +76,18 @@ static void update_ring_from_sink(int ring, const char *sink_name) 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); @@ -103,6 +118,23 @@ static void update_sink_mute_from_button(int on, const char *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 { @@ -259,6 +291,8 @@ static void update_group_from_button(int i, int on) } } +#if 0 // Not used at the moment + static int find_touched_client(void) { int touched = -1; @@ -273,8 +307,12 @@ static int find_touched_client(void) 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; @@ -385,6 +423,8 @@ static void update_default_sink_from_button(int button, int on) } } +#endif + /*** MPD controls ***/ static bool mpd_flash_state; @@ -567,7 +607,8 @@ static void do_update(struct main_timer *t) } // 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(); @@ -606,7 +647,7 @@ void notify_rotary(int rotary, int delta) 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); @@ -621,10 +662,12 @@ void notify_button(int button, int on) 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); @@ -633,6 +676,18 @@ void notify_button(int button, int 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); } @@ -675,6 +730,7 @@ static void daemon_body(struct daemon_params *dp) main_init(); update_timer.handler = do_update; + usb_init(); noct_init(); pulse_init(); mpd_init();