]> mj.ucw.cz Git - ursary.git/blob - ursaryd.h
MPD: Separate stop/prev/next buttons
[ursary.git] / ursaryd.h
1 /*
2  *      The Ursary Audio Controls
3  *
4  *      (c) 2014 Martin Mares <mj@ucw.cz>
5  */
6
7 #include <pulse/pulseaudio.h>
8
9 #define SET_STRING(_field, _val) do { if (!_field || strcmp(_field, _val)) { xfree(_field); _field = xstrdup(_val); } } while (0)
10
11 /* ursary.c */
12
13 void schedule_update(void);
14
15 void notify_rotary(int rotary, int delta);
16 void notify_touch(int rotary, int on);
17 void notify_button(int button, int on);
18
19 /* nocturn.c */
20
21 void noct_init(void);
22 bool noct_is_ready(void);
23 void noct_set_ring(int ring, int mode, int val);
24 void noct_set_button(int button, int val);
25 void noct_clear(void);
26
27 extern char noct_rotary_touched[10];    // 8=center, 9=slider
28 extern char noct_button_pressed[16];
29
30 enum ring_mode {
31   RING_MODE_LEFT,
32   RING_MODE_RIGHT,
33   RING_MODE_MID_RIGHT,
34   RING_MODE_MID_SYM,
35   RING_MODE_SINGLE_ON,
36   RING_MODE_SINGLE_OFF,
37 };
38
39 /* pulse.c */
40
41 extern char *pulse_default_sink_name;
42
43 struct pulse_client {
44   cnode n;
45   int idx;
46   char *name;
47   char *host;
48 };
49
50 struct pulse_sink {
51   cnode n;
52   int idx;
53   char *name;
54   uint channels;
55   uint volume;
56   uint base_volume;
57   bool mute;
58   bool suspended;
59 };
60
61 struct pulse_sink_input {
62   cnode n;
63   int idx;
64   char *name;
65   int client_idx;
66   int sink_idx;
67   uint channels;
68   uint volume;
69   bool mute;
70   int noct_group_idx;           // Used by the high-level logic below
71 };
72
73 extern clist pulse_client_list, pulse_sink_list, pulse_sink_input_list;
74
75 void pulse_init(void);
76 void pulse_dump(void);
77 bool pulse_is_ready(void);
78 struct pulse_sink *pulse_sink_by_name(const char *name);
79 struct pulse_sink *pulse_sink_by_idx(int idx);
80 void pulse_sink_set_volume(int idx, pa_cvolume *cvol);
81 void pulse_sink_set_mute(int idx, bool mute);
82 void pulse_sink_input_set_volume(int idx, pa_cvolume *cvol);
83 void pulse_sink_input_set_mute(int idx, bool mute);
84 void pulse_sink_input_move(int input_idx, int sink_idx);
85 struct pulse_client *pulse_client_by_idx(int idx);
86 void pulse_server_set_default_sink(const char *name);
87
88 /* pulse-ucw.c */
89
90 extern struct pa_mainloop_api pmain_api;
91
92 void pmain_init(void);
93
94 /* mpd.c */
95
96 enum mpd_state {
97   MPD_OFFLINE,
98   MPD_CONNECTING,
99   MPD_WAIT_GREETING,
100   MPD_ONLINE,
101 };
102
103 extern enum mpd_state mpd_state;
104
105 void mpd_init(void);
106 const char *mpd_get_player_state(void);
107 void mpd_play(void);
108 void mpd_stop(void);
109 void mpd_pause(int arg);
110 void mpd_next(void);
111 void mpd_prev(void);