#include "uart_proto.h" #include "esp_log.h" #include "pb_encode.h" #include "uart.h" #include static const char *TAG = "[UART_PROTO]"; esp_err_t uart_send_uart_message(const alox_UartMessage *msg) { uint8_t pb_buf[MAX_PAYLOAD_SIZE]; pb_ostream_t stream = pb_ostream_from_buffer(pb_buf, sizeof(pb_buf)); if (!pb_encode(&stream, alox_UartMessage_fields, msg)) { ESP_LOGE(TAG, "pb_encode failed type=%u (%s)", (unsigned)msg->type, PB_GET_ERROR(&stream)); return ESP_FAIL; } uint8_t payload[MAX_PAYLOAD_SIZE]; if (stream.bytes_written + 1 > sizeof(payload)) { ESP_LOGE(TAG, "payload too large type=%u need=%u max=%u", (unsigned)msg->type, (unsigned)(stream.bytes_written + 1), (unsigned)sizeof(payload)); return ESP_ERR_NO_MEM; } payload[0] = (uint8_t)msg->type; memcpy(&payload[1], pb_buf, stream.bytes_written); return uart_send_framed(payload, stream.bytes_written + 1); }