#ifndef _MESSAGE_HANDLER_HEADER #define _MESSAGE_HANDLER_HEADER #include "freertos/idf_additions.h" #include #include typedef struct { QueueHandle_t message_queue; uint8_t *send_buffer; size_t send_buffer_size; uint8_t *payload_buffer; size_t payload_buffer_size; } MessageBrokerTaskParams_t; typedef void (*RegisterFunctionCallback)(uint8_t msgid, const uint8_t *payload, size_t payload_len, uint8_t *send_payload_buffer, size_t send_payload_buffer_size, uint8_t *send_buffer, size_t send_buffer_size); typedef void (*RegisterTaskCallback)(uint8_t msgid, const uint8_t *payload, size_t payload_len, uint8_t *send_payload_buffer, size_t send_payload_buffer_size, uint8_t *send_buffer, size_t send_buffer_size); struct RegisterdFunction { uint8_t MSGID; RegisterFunctionCallback callback; }; struct RegisterdTask { uint8_t MSGID; RegisterTaskCallback task; }; struct MessageBroker { struct RegisterdFunction FunctionList[64]; uint8_t num_direct_callbacks; struct RegisterdTask TaskList[64]; uint8_t num_task_callbacks; }; typedef void (*SendMessageHookCallback)(const uint8_t *buffer, size_t length); void InitMessageBroker(); void RegisterCallback(uint8_t msgid, RegisterFunctionCallback callback); void RegisterTask(uint8_t msgid, RegisterTaskCallback callback); void SendMessage(const uint8_t *buffer, size_t length); void MessageBrokerTask(void *param); #endif