esp_alox/main/message_parser.h

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 128
#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];
uint8_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