#ifndef UART_HANDLER_H
#define UART_HANDLER_H

#include <thread>
#include <atomic>
#include <string>
#include <iostream>
#include <fcntl.h>
#include <unistd.h>
#include <errno.h>
#include <termios.h>

class UartHandler
{
public:
    UartHandler(const std::string &device, int baudrate = 100000);
    ~UartHandler();

    bool open_serial();                 // 打开串口
    void start_reading();               // 启动读取数据的线程
    void stop_reading();                // 停止读取数据的线程
    int get_channel_value(int channel); // 获取指定通道的数据
    bool get_data_safe();               // 获取数据安全性

private:
    std::string serial_device;
    int baudrate;
    int fd;

    static const int kChannelCount = 16;
    static const int kSbusFrameLength = 25;

    uint8_t sbus_data[kSbusFrameLength];
    uint16_t sbus_channels[kChannelCount];
    int failsafe_status;

    enum
    {
        SBUS_SIGNAL_LOST = -1,
        SBUS_SIGNAL_FAILSAFE,
        SBUS_SIGNAL_OK
    };

    std::atomic<bool> reading; // 控制读取线程的状态
    std::thread read_thread;   // 读取数据的线程

    void read_loop();                       // 持续读取串口数据
    void parse_data(uint8_t *buf, int len); // 解析数据
    int sbus_parse();                       // SBUS 数据解析
    void print_hex(uint8_t *buf, int len);  // 打印数据（调试用）
};

#endif // UART_HANDLER_H
