#pragma once

#include <iostream>
#include <thread>
#include <chrono>
#include <string>
#include <boost/asio.hpp>
#include <boost/array.hpp>
#include <vector>
#include <opencv2/core/core.hpp>


using namespace std;

// 结构体定义 IMU 数据
struct IMUData {
   
    cv::Point3f vAcc;
    cv::Point3f vGyro;
    double timestamp;
   

};

class IMUReader {
public:
    // 构造函数
    IMUReader(std::string ComNumber);

    // 构造函数
    IMUReader();

    // 析构函数
    ~IMUReader();

    // 初始化 IMU
    void IMUInit(std::string ComNumber);

    // 获取 IMU 数据状态
    int ReadData(IMUData& data);
    int IMUReadData();
    std::vector<IMUData> imubuffer;

    IMUData getdata() const{
        std::unique_lock<std::mutex> lock(dataMutex);
        return data;
    };
private:
    boost::asio::io_service io;
    boost::asio::serial_port* serial;
    // boost::asio::serial_port serial(io, "/dev/ttyUSB0"); // 替换成你的串口设备路径

    bool        isRunning; // 控制是否退出循环的标志变量
    std::thread dataThread; // 数据读取线程
    IMUData     data;
    mutable std::mutex dataMutex;
   
    
    // 读取 IMU 数据的循环

    void IMUReadDataThread(void);

   
};
