Big rework of the playlist system.
[playerz] / notify.h
1 /* notify.c: Service IPC API via POSIX  message queues.
2
3    Copyright (C) 2019 Michael Zucchi
4
5    This program is free software: you can redistribute it and/or
6    modify it under the terms of the GNU General Public License as
7    published by the Free Software Foundation, either version 3 of the
8    License, or (at your option) any later version.
9
10    This program is distributed in the hope that it will be useful, but
11    WITHOUT ANY WARRANTY; without even the implied warranty of
12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13    General Public License for more details.
14
15    You should have received a copy of the GNU General Public License
16    along with this program. If not, see
17    <http://www.gnu.org/licenses/>.
18 */
19
20 #ifndef _NOTIFY_H
21 #define _NOTIFY_H
22
23 #define NOTIFY_BROKER "/pz.broker"
24 #define NOTIFY_INDEXER "/pz.indexer"
25 #define NOTIFY_PLAYER "/pz.player"
26
27 enum notify_action {
28         NOTIFY_QUIT,
29
30         NOTIFY_DISK_ADD,
31         NOTIFY_DISK_REMOVE,
32
33         NOTIFY_PLAY_PLAY,
34         NOTIFY_PLAY_PAUSE,
35         NOTIFY_PLAY_STOP,
36         NOTIFY_PLAY_SEEK,       // notify_play_seek : absolute, fixed, forward or rewind
37
38         NOTIFY_PLAY_NEXT,
39         NOTIFY_PLAY_PREV,
40
41         NOTIFY_VOLUME_UP,
42         NOTIFY_VOLUME_DOWN,
43         NOTIFY_VOLUME_MUTE,
44
45         NOTIFY_TRACK_INFO,      // etc?
46
47         NOTIFY_KEY,             // some key pressed
48
49         NOTIFY_DEBUG,           // debug/prototyping command
50
51         NOTIFY_SHUFFLE,         /* disk-manager: create shuffled playlist */
52
53         NOTIFY_SIZEOF
54 };
55
56 typedef int notify_t;
57
58 struct notify_play_seek {
59         int mode; // 0 abs, 1 relative
60         double stamp;
61 };
62
63 struct notify_debug {
64         int func;
65 };
66
67 struct notify_key {
68         int code;
69 };
70
71 notify_t notify_reader_new(const char *path);
72 notify_t notify_writer_new(const char *path);
73 void notify_close(notify_t q);
74
75 int notify_msg_ready(notify_t q);
76
77 int notify_msg_send(notify_t q, enum notify_action action, unsigned int msg_pri, const void *payload);
78 void *notify_msg_receive(notify_t q, enum notify_action *actionp, unsigned int *msg_pri);
79
80 void notify_msg_free(enum notify_action action, void *p);
81
82 #endif