/*
 * 示例：Release 模式下将「APP_DEBUG_UART_NUM」这一路 UART 作为普通通信串口
 *
 * 编译条件：
 *   - CONFIG_ROBO_APP_FW_RELEASE=y
 *
 * 使用场景：
 *   - 通过板载 RX1/TX1（UART1）等与外部 MCU 透明传输
 *   - 量产固件不需要日志输出
 */

#include "core/build_config.h"
#include "task_manager.h"
#include "drivers/uart_comm/uart_comm.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"

/* 仅在 Release + UART 通信模式下编译此示例 */
#if BUILD_IS_RELEASE && UART_MODE_COMMUNICATION

static const char *TEST_MSG = "Hello from ESP32 UART communication mode!\r\n";

void example_uart_comm_task(void *pvParameters)
{
    (void)pvParameters;

    /* 初始化指定 UART 作为通信串口（115200 波特率，引脚已在 menuconfig 配置） */
    esp_err_t err = uart_comm_init(115200);
    if (err != ESP_OK) {
        /* 初始化失败（无日志输出时无法打印错误） */
        vTaskDelete(NULL);
        return;
    }

    /* 发送测试消息 */
    uart_comm_send_string(TEST_MSG);

    uint8_t rx_buf[256];
    while (1) {
        /* 非阻塞接收（100ms 超时） */
        int len = uart_comm_receive(rx_buf, sizeof(rx_buf), 100);
        if (len > 0) {
            /* 回传接收到的数据（Echo） */
            uart_comm_send(rx_buf, len);
        }

        vTaskDelay(pdMS_TO_TICKS(10));
    }
}

/* 启动示例任务的入口函数 */
void example_uart_comm_start(void)
{
    (void)app_task_start(APP_TASK_UART_COMM_EXAMPLE, example_uart_comm_task, NULL, NULL);
}

#else /* Debug 模式或 UART 作为调试模式 */

/* 空实现，避免编译错误 */
void example_uart_comm_start(void)
{
    /* 在非 Release+通信模式下，此功能不可用 */
}

#endif
