/*
 * UART 链路模式示例使用文件
 * 演示如何使用 link_uart 模块与安卓进行串口通信
 *
 * 硬件连接：
 * - ESP32-S3 GPIO17 (U1TXD) -> 安卓设备 RX
 * - ESP32-S3 GPIO18 (U1RXD) -> 安卓设备 TX
 * - GND 共地
 *
 * 通信协议：
 * - 波特率：115200 (可在 menuconfig 中配置)
 * - 数据格式：8N1
 * - 帧格式：JSON + 换行符 (\\n)
 *
 * 协议示例：
 * 安卓发送：{"head":{"message_type":1},"body":{"throttle":50,"steer":30}}
 * 设备回复：{"head":{"message_type":1},"body":{"device_ID":"110201","voltage":12.5,"percent":80}}
 */

#include "link_uart.h"
#include "sdkconfig.h"

#if CONFIG_APP_LINK_UART

#include "esp_log.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"

static const char *tag_s = "UART_LINK_EX";

/**
 * @brief 示例：直接发送原始数据
 * 可用于发送自定义协议数据
 */
void example_uart_link_send_raw(void)
{
    const char *test_data = "{\"test\":\"hello from esp32\"}\n";
    int ret = link_uart_send_raw((const uint8_t *)test_data, strlen(test_data));
    if (ret > 0) {
        ESP_LOGI(tag_s, "原始数据发送成功: %d bytes", ret);
    } else {
        ESP_LOGE(tag_s, "原始数据发送失败");
    }
}

/**
 * @brief 示例：发送心跳
 * 实际使用中由 link_uart.c 中的心跳任务自动发送
 */
void example_uart_link_send_heartbeat(void)
{
    const char *heartbeat = "{\"head\":{\"message_type\":1},\"body\":{\"device_ID\":\"110201\"}}";
    int ret = link_uart_send_heartbeat(heartbeat);
    if (ret > 0) {
        ESP_LOGI(tag_s, "心跳发送成功");
    } else {
        ESP_LOGE(tag_s, "心跳发送失败");
    }
}

/**
 * @brief 示例：发送日志/告警
 */
void example_uart_link_send_log(void)
{
    const char *log_json = "{\"head\":{\"message_type\":4},\"body\":{\"msg\":\"系统运行正常\"}}";
    int ret = link_uart_send_log(log_json);
    if (ret > 0) {
        ESP_LOGI(tag_s, "日志发送成功");
    } else {
        ESP_LOGE(tag_s, "日志发送失败");
    }
}

/**
 * @brief 示例：检查连接状态
 */
void example_uart_link_check_connection(void)
{
    if (link_uart_is_connected()) {
        ESP_LOGI(tag_s, "UART 链路已连接");
    } else {
        ESP_LOGW(tag_s, "UART 链路未连接");
    }
}

/**
 * @brief 启动 UART 链路模式示例任务
 * 演示在应用层如何使用 link_uart 接口
 */
void example_uart_link_start(void)
{
    ESP_LOGI(tag_s, "启动 UART 链路示例任务");
    ESP_LOGI(tag_s, "UART 配置: GPIO%d TX / GPIO%d RX, 波特率 %d",
             CONFIG_APP_UART_LINK_TX_GPIO,
             CONFIG_APP_UART_LINK_RX_GPIO,
             CONFIG_APP_UART_LINK_BAUDRATE);

    /* 注意：link_uart_start() 已在 app_run.c 中调用
     * 这里仅演示如何使用 link_uart 提供的接口 */

    /* 示例：发送一条测试数据 */
    example_uart_link_send_raw();
}

#endif /* CONFIG_APP_LINK_UART */
