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