#include "uart_prot.h" #include #define MSG_QUEUE_LEN 64 static QueueHandle_t input_queue; static QueueHandle_t output_queue; QueueHandle_t message_handler_get_input_queue(void) { return input_queue; } QueueHandle_t message_handler_get_output_queue(void) { return output_queue; } void message_handler_init(void) { input_queue = xQueueCreate(MSG_QUEUE_LEN, sizeof(uint8_t)); output_queue = xQueueCreate(MSG_QUEUE_LEN, sizeof(uint8_t)); } void message_handler_task(void *param) { uint8_t byte; while (1) { if (xQueueReceive(input_queue, &byte, portMAX_DELAY)) { // handle byte, check message recieve with start and stop byte length and crc } } } // Message Dispatcher void dispatch_message(uint8_t msg_id, void *payload) { switch (msg_id) { case RequestPing: if (on_request_ping) on_request_ping((RequestPingPayload *)payload); break; case RequestStatus: if (on_request_status) on_request_status((RequestStatusPayload *)payload); break; case PrepareFirmwareUpdate: if (on_prepare_firmware_update) on_prepare_firmware_update((PrepareFirmwareUpdatePayload *)payload); break; case FirmwareUpdateLine: if (on_firmware_update_line) on_firmware_update_line((FirmwareUpdateLinePayload *)payload); break; default: // Unknown message break; } } // Generic Send Function void send_message(ESP_TO_PC_MESSAGE_IDS msgid, PayloadUnion *payload) { ESPTOPCBaseMessage mes; mes.Version = 1; mes.MessageID = msgid; mes.Payload = *payload; esp_send_message_hook(&mes); } // Sepzific Send Functions void send_clients(uint8_t clientCount, uint32_t clientAvaiableBitMask) { ClientsPayload payload; // Payload-Daten zuweisen payload.clientCount = clientCount; payload.clientAvaiableBitMask = clientAvaiableBitMask; // Nachricht senden send_message(Clients, (PayloadUnion *)&payload); } void send_status(uint8_t clientId, uint8_t *mac) { StatusPayload payload; // Payload-Daten zuweisen payload.clientId = clientId; memcpy(payload.mac, mac, 6); // Nachricht senden send_message(Status, (PayloadUnion *)&payload); } void send_pong(uint8_t clientId, uint32_t ping) { PongPayload payload; // Payload-Daten zuweisen payload.clientId = clientId; payload.ping = ping; // Nachricht senden send_message(Pong, (PayloadUnion *)&payload); }