#ifndef UART_H #define UART_H #include "esp_err.h" #include "freertos/idf_additions.h" #include #include #include #define UART_NUM UART_NUM_1 #define UART_BAUD_RATE 921600 // #define UART_TXD_PIN 3 // #define UART_RXD_PIN 2 #define UART_TXD_PIN 2 #define UART_RXD_PIN 3 #define UART_BUF_SIZE 4096 /** Driver RX ring — must hold a full OTA block burst (~20 × ~215 B frames). */ #define UART_DRIVER_RX_BUF_SIZE 16384 #define UART_DRIVER_TX_BUF_SIZE 4096 #define START_MARKER 0xAA #define STOP_MARKER 0xCC #define MAX_BUF_SIZE 252 #define MAX_PAYLOAD_SIZE \ MAX_BUF_SIZE - 4 // Buffer overhead, Start, Len, CRC, End typedef enum { STATE_START, STATE_LEN, STATE_DATA, STATE_CHECKSUM, STATE_STOP } parser_state_t; typedef struct { uint8_t payload[MAX_PAYLOAD_SIZE]; uint8_t len; uint8_t index; uint8_t checksum; parser_state_t state; } uart_packet_t; typedef struct { uint8_t cmd; } uart_command_t; void init_uart(QueueHandle_t cmd_queue); void uart_read_task(void *param); bool parse_uart_byte(uint8_t byte, uart_packet_t *p); esp_err_t uart_send_framed(const uint8_t *payload, size_t len); #endif