1 #ifndef _UADEIPC_H_
2 #define _UADEIPC_H_
3 
4 #include <stdlib.h>
5 #include <stdint.h>
6 
7 #include "uadeutils.h"
8 
9 #define UADE_MAX_MESSAGE_SIZE (4096)
10 
11 enum uade_msgtype {
12   UADE_MSG_FIRST = 0,
13   UADE_COMMAND_ACTIVATE_DEBUGGER,
14   UADE_COMMAND_CHANGE_SUBSONG,
15   UADE_COMMAND_CONFIG,
16   UADE_COMMAND_SCORE,
17   UADE_COMMAND_PLAYER,
18   UADE_COMMAND_MODULE,
19   UADE_COMMAND_READ,
20   UADE_COMMAND_REBOOT,
21   UADE_COMMAND_SET_SUBSONG,
22   UADE_COMMAND_IGNORE_CHECK,
23   UADE_COMMAND_SONG_END_NOT_POSSIBLE,
24   UADE_COMMAND_SET_NTSC,
25   UADE_COMMAND_FILTER,
26   UADE_COMMAND_SET_FREQUENCY,
27   UADE_COMMAND_SET_PLAYER_OPTION,
28   UADE_COMMAND_SET_RESAMPLING_MODE,
29   UADE_COMMAND_SPEED_HACK,
30   UADE_COMMAND_TOKEN,
31   UADE_COMMAND_USE_TEXT_SCOPE,
32   UADE_REPLY_MSG,
33   UADE_REPLY_CANT_PLAY,
34   UADE_REPLY_CAN_PLAY,
35   UADE_REPLY_SONG_END,
36   UADE_REPLY_SUBSONG_INFO,
37   UADE_REPLY_PLAYERNAME,
38   UADE_REPLY_MODULENAME,
39   UADE_REPLY_FORMATNAME,
40   UADE_REPLY_DATA,
41   UADE_MSG_LAST
42 };
43 
44 struct uade_msg {
45   uint32_t msgtype;
46   uint32_t size;
47   uint8_t data[0];
48 } __attribute__((packed));
49 
50 enum uade_control_state {
51   UADE_INITIAL_STATE = 0,
52   UADE_R_STATE,
53   UADE_S_STATE
54 };
55 
56 struct uade_ipc {
57   void *input;
58   void *output;
59   unsigned int inputbytes;
60   char inputbuffer[UADE_MAX_MESSAGE_SIZE];
61   enum uade_control_state state;
62 };
63 
64 void uade_check_fix_string(struct uade_msg *um, size_t maxlen);
65 int uade_parse_u32_message(uint32_t *u1, struct uade_msg *um);
66 int uade_parse_two_u32s_message(uint32_t *u1, uint32_t *u2, struct uade_msg *um);
67 int uade_receive_message(struct uade_msg *um, size_t maxbytes, struct uade_ipc *ipc);
68 int uade_receive_short_message(enum uade_msgtype msgtype, struct uade_ipc *ipc);
69 int uade_receive_string(char *s, enum uade_msgtype msgtype, size_t maxlen, struct uade_ipc *ipc);
70 int uade_send_message(struct uade_msg *um, struct uade_ipc *ipc);
71 int uade_send_short_message(enum uade_msgtype msgtype, struct uade_ipc *ipc);
72 int uade_send_string(enum uade_msgtype msgtype, const char *str, struct uade_ipc *ipc);
73 int uade_send_u32(enum uade_msgtype com, uint32_t u, struct uade_ipc *ipc);
74 int uade_send_two_u32s(enum uade_msgtype com, uint32_t u1, uint32_t u2, struct uade_ipc *ipc);
75 void uade_set_peer(struct uade_ipc *ipc, int peer_is_client, const char *input, const char *output);
76 
77 #endif
78