esp_alox/main/uart_prot.c
simon 94b5fd47a4 TMP: Working on a Prototyp of UART Communication
The Prototype will be used as Template for the Code Generation
but first we need an working example
2025-05-20 22:00:33 +02:00

98 lines
2.4 KiB
C

#include "uart_prot.h"
#include <string.h>
#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);
}