skipstone/include/skipstone/message.h

78 lines
2.4 KiB
C

#ifndef _SKIPSTONE_MESSAGE_H
#define _SKIPSTONE_MESSAGE_H
#include <stdint.h>
#include <skipstone/link.h>
#include <skipstone/map.h>
#define SKIPSTONE_MESSAGE_MAX_PAYLOAD 4096
enum {
SKIPSTONE_MESSAGE_ENDPOINT_NONE = 0,
SKIPSTONE_MESSAGE_ENDPOINT_FIRMWARE = 1,
SKIPSTONE_MESSAGE_ENDPOINT_TIME = 11,
SKIPSTONE_MESSAGE_ENDPOINT_VERSIONS = 16,
SKIPSTONE_MESSAGE_ENDPOINT_PHONE_VERSION = 17,
SKIPSTONE_MESSAGE_ENDPOINT_SYSTEM_MESSAGE = 18,
SKIPSTONE_MESSAGE_ENDPOINT_MUSIC_CONTROL = 32,
SKIPSTONE_MESSAGE_ENDPOINT_PHONE_CONTROL = 33
};
enum skipstone_message_endianness {
SKIPSTONE_MESSAGE_ENDIAN_LITTLE,
SKIPSTONE_MESSAGE_ENDIAN_BIG
};
typedef struct _skipstone_message_header {
uint16_t size,
id;
} skipstone_message_header;
typedef struct _skipstone_message_service skipstone_message_service;
typedef struct _skipstone_message skipstone_message;
typedef int (skipstone_message_handler)(skipstone_message_service *service,
void *buf, uint16_t size, uint16_t id, void *context);
skipstone_message *skipstone_message_new();
void skipstone_message_destroy(skipstone_message *message);
uint16_t skipstone_message_size(skipstone_message *message);
int skipstone_message_append_string(skipstone_message *message,
char *string, uint8_t size);
int skipstone_message_append_uint8(skipstone_message *message,
uint8_t value);
int skipstone_message_append_uint16(skipstone_message *message,
uint16_t value);
int skipstone_message_append_uint32(skipstone_message *message,
uint32_t value);
int skipstone_message_pack(skipstone_message *message, void *buf);
skipstone_message_service *skipstone_message_service_new();
void skipstone_message_service_destroy(skipstone_message_service *service);
int skipstone_message_service_register(skipstone_message_service *service,
uint16_t id, skipstone_message_handler *handler, void *context);
int skipstone_message_service_deregister(skipstone_message_service *service,
uint16_t id);
int skipstone_message_service_queue_packed(skipstone_message_service *service,
void *buf, uint16_t size, uint16_t id);
int skipstone_message_service_queue(skipstone_message_service *service,
skipstone_message *message, uint16_t id);
int skipstone_message_service_next_event(skipstone_message_service *service,
skipstone_link *link, struct timeval *timeout);
#endif /* _SKIPSTONE_MESSAGE_H */