esp_alox/main/message_handler.h

56 lines
1.8 KiB
C

#ifndef _MESSAGE_HANDLER_HEADER
#define _MESSAGE_HANDLER_HEADER
#include "freertos/idf_additions.h"
#include <stddef.h>
#include <stdint.h>
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