#ifndef HSM_DATA_LOGGER_HPP #define HSM_DATA_LOGGER_HPP #include #include #include #include /** * @brief 历史数据记录结构体(模拟GJB需求) */ struct HSM_Record_t { uint32_t timestamp; // UTC时间戳(秒) float altitude; // 测量高度(单位:米) char unit; // 单位标识符:'m' 表示米,'f' 表示英尺 uint8_t status; // 状态码:0=正常, 1=异常, 2=校准中 HSM_Record_t() : timestamp(0), altitude(0.0f), unit('m'), status(0) {} HSM_Record_t(uint32_t ts, float alt, char u = 'm', uint8_t s = 0) : timestamp(ts), altitude(alt), unit(u), status(s) {} }; /** * @brief 数据记录器类 * * 负责历史数据的存储、管理和导出,功能包括: * 1. 环形缓冲区管理(模拟硬件环形缓冲区) * 2. 数据记录和查询 * 3. CSV/JSON格式导出 * 4. 数据回放支持 */ class DataLogger { public: /** * @brief 构造函数 * @param max_records 最大记录数(默认100000,对应24小时数据) */ explicit DataLogger(size_t max_records = 100000); /** * @brief 析构函数 */ ~DataLogger(); /** * @brief 添加一条记录 * @param record 要添加的记录 * @return 添加是否成功 */ bool addRecord(const HSM_Record_t& record); /** * @brief 添加一条记录(简化版本) * @param timestamp 时间戳 * @param altitude 高度 * @param unit 单位 * @param status 状态 * @return 添加是否成功 */ bool addRecord(uint32_t timestamp, float altitude, char unit = 'm', uint8_t status = 0); /** * @brief 获取记录数量 * @return 当前记录数 */ size_t getRecordCount() const; /** * @brief 获取指定索引的记录 * @param index 记录索引 * @return 记录指针,如果索引无效返回nullptr */ const HSM_Record_t* getRecord(size_t index) const; /** * @brief 获取最近的记录 * @param count 要获取的记录数 * @return 记录向量 */ std::vector getRecentRecords(size_t count) const; /** * @brief 按时间范围获取记录 * @param start_time 开始时间戳 * @param end_time 结束时间戳 * @return 符合条件的记录向量 */ std::vector getRecordsByTimeRange(uint32_t start_time, uint32_t end_time) const; /** * @brief 导出数据到CSV文件 * @param filename 输出文件名 * @return 导出是否成功 */ bool exportToCSV(const std::string& filename) const; /** * @brief 导出数据到JSON文件 * @param filename 输出文件名 * @return 导出是否成功 */ bool exportToJSON(const std::string& filename) const; /** * @brief 清空所有记录 */ void clear(); /** * @brief 检查存储是否已满 * @return 是否已满 */ bool isFull() const; /** * @brief 获取可用存储空间 * @return 可用记录数 */ size_t getAvailableSpace() const; /** * @brief 获取存储容量 * @return 最大记录数 */ size_t getCapacity() const { return capacity_; } private: std::unique_ptr buffer_; // 数据缓冲区 size_t capacity_; // 缓冲区容量 size_t count_; // 当前记录数 size_t head_; // 环形缓冲区头指针 size_t tail_; // 环形缓冲区尾指针 /** * @brief 获取下一个索引 * @param current 当前索引 * @return 下一个索引 */ size_t nextIndex(size_t current) const; /** * @brief 生成CSV内容 * @return CSV格式字符串 */ std::string generateCSV() const; /** * @brief 生成JSON内容 * @return JSON格式字符串 */ std::string generateJSON() const; }; #endif // HSM_DATA_LOGGER_HPP