3 void msg_register(parser_t *parser, int msgid, handler_t handler)
5 if (msgid < MSG_MAX_ID)
6 parser->handler[msgid] = handler;
9 void msg_receive(parser_t *parser, int byte)
11 //sirq_printf("msg_receive - %02x\r\n", byte);
14 header_t *head = (header_t*)parser->buffer;
15 void *body = (void*)(head+1);
16 const int max_length = sizeof(parser->buffer)-sizeof(header_t);
18 // Process uart messages
19 parser->buffer[parser->index++] = byte;
20 switch (parser->state) {
22 if (parser->index == sizeof(uint16_t)) {
23 if (head->header == MSG_HEADER) {
26 parser->buffer[0] = parser->buffer[1];
32 if (parser->index == sizeof(header_t)) {
33 if (head->length <= max_length &&
34 head->msgid <= MSG_MAX_ID) {
43 if (parser->index == (int)sizeof(header_t)+head->length) {
44 handler_t handler = parser->handler[head->msgid];
46 handler(head->msgid, body);