53 lines
1.2 KiB
C
53 lines
1.2 KiB
C
#ifndef _MESSAGE_PARSER_HEADER
|
|
#define _MESSAGE_PARSER_HEADER
|
|
|
|
#include <stddef.h>
|
|
#include <stdint.h>
|
|
|
|
#define MAX_MESSAGE_PAYLOAD_LENGTH 512
|
|
#define MAX_TOTAL_CONTENT_LENGTH (MAX_MESSAGE_PAYLOAD_LENGTH + 1)
|
|
|
|
enum ParserState {
|
|
WaitingForStartByte,
|
|
GetMessageType,
|
|
EscapedMessageType,
|
|
EscapePayloadByte,
|
|
InPayload,
|
|
};
|
|
|
|
enum ParserError {
|
|
NoError,
|
|
WrongCheckSum,
|
|
MessageToLong,
|
|
UnexpectedCommandByte,
|
|
};
|
|
|
|
typedef enum {
|
|
StartByte = 0xAA,
|
|
EscapeByte = 0xBB,
|
|
EndByte = 0xCC,
|
|
} MessageBytes;
|
|
|
|
struct MessageReceive {
|
|
enum ParserState state;
|
|
enum ParserError error;
|
|
uint8_t messageid;
|
|
uint8_t message[MAX_MESSAGE_PAYLOAD_LENGTH];
|
|
uint16_t index;
|
|
uint8_t checksum;
|
|
};
|
|
|
|
typedef void (*MessageReceivedCallback)(uint8_t msgid, const uint8_t *payload,
|
|
size_t payload_len);
|
|
typedef void (*MessageFailCallback)(uint8_t msgid, const uint8_t *payload,
|
|
size_t payload_len, enum ParserError error);
|
|
|
|
struct MessageReceive InitMessageReceive();
|
|
|
|
void register_message_callback(MessageReceivedCallback callback);
|
|
void register_message_fail_callback(MessageFailCallback callback);
|
|
|
|
void parse_byte(struct MessageReceive *mr, uint8_t pbyte);
|
|
|
|
#endif
|