/**
 * UART 链路通信模块
 * 用于 UART 链路模式下与安卓进行串口通信
 * 使用 UART1 (GPIO17 TX / GPIO18 RX)
 *
 * 协议格式：
 * - 遥控指令：UTF-8 JSON（与 MQTT/BLE payload 相同结构）
 * - 心跳：周期 JSON，包含 device_id、状态等信息
 * - 日志：W/E 日志即时推送
 */

#ifndef LINK_UART_H
#define LINK_UART_H

#include "esp_err.h"
#include <stdbool.h>
#include <stddef.h>

/**
 * @brief 启动 UART 链路通信
 * 初始化 UART1 (GPIO17 TX / GPIO18 RX)，启动接收和发送任务
 * @return ESP_OK 成功，其他错误码失败
 */
esp_err_t link_uart_start(void);

/**
 * @brief 停止 UART 链路通信
 * 停止 UART 任务，释放资源
 */
void link_uart_stop(void);

/**
 * @brief 发送心跳 JSON 数据
 * @param json 要发送的 JSON 字符串
 * @return 0 成功，其他失败
 */
int link_uart_send_heartbeat(const char *json);

/**
 * @brief 发送日志/告警 JSON（message_type=4/5；Release 下 ESP_LOGW/E 亦经此上送）
 * @param json 要发送的 JSON 字符串
 * @return 0 成功，其他失败
 */
int link_uart_send_log(const char *json);

/**
 * @brief 是否曾收到对端 UART1 数据（发过 6 或控制帧后为 true）
 */
bool link_uart_has_peer_seen(void);

/**
 * @brief 对端会话有效（曾 RX 且在 UART_LINK_ALIVE_MS 内，供心跳）
 */
bool link_uart_is_connected(void);

/**
 * @brief 发送原始数据到 UART
 * @param data 数据指针
 * @param len 数据长度
 * @return 实际发送字节数，-1 失败
 */
int link_uart_send_raw(const uint8_t *data, size_t len);

#endif /* LINK_UART_H */
