The Prototype will be used as Template for the Code Generation but first we need an working example
98 lines
2.4 KiB
C
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);
|
|
}
|