]> Pileus Git - ~andy/csm213a-hw/blobdiff - hw2/messages.h
Factor out message parser
[~andy/csm213a-hw] / hw2 / messages.h
index 752476fb2c4ecd60b8fd2425b72171eceb868be0..2e84107aee849df9c071657aa05e103727c60520 100644 (file)
@@ -1,9 +1,16 @@
+#ifndef MESSAGES_H
+#define MESSAGES_H
+
+#include <stdint.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 /***********************
  * Message Definitions *
  ***********************/
 
-#include <stdint.h>
-
 #define MSG_HEADER       0x1234
 
 #define MSG_VALID_DEVICE 0x0001  // device id is valid
@@ -53,3 +60,26 @@ typedef struct {
 } event_msg_t;
 
 #pragma pack()
+
+/******************
+ * Message Parser *
+ ******************/
+
+typedef void (*handler_t)(int msgid, void *msg);
+
+typedef struct {
+       int       index;
+       int       state;
+       uint8_t   buffer[256];
+       handler_t handler[MSG_MAX_ID];
+} parser_t;
+
+void msg_register(parser_t *parser, int msgid, handler_t handler);
+
+void msg_receive(parser_t *parser, int byte);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif