157 lines
3.6 KiB
C++
157 lines
3.6 KiB
C++
|
|
#ifndef HSM_APP_HPP
|
|||
|
|
#define HSM_APP_HPP
|
|||
|
|
|
|||
|
|
#include <memory>
|
|||
|
|
#include <string>
|
|||
|
|
#include <vector>
|
|||
|
|
#include "altitude_calculator.hpp"
|
|||
|
|
#include "data_logger.hpp"
|
|||
|
|
#include "sensor_simulator.hpp"
|
|||
|
|
#include "alert_manager.hpp"
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief 高度测量系统主应用类
|
|||
|
|
*
|
|||
|
|
* 负责协调各个模块,实现系统的主要功能:
|
|||
|
|
* 1. 传感器数据采集和处理
|
|||
|
|
* 2. 高度计算和校准
|
|||
|
|
* 3. 数据记录和导出
|
|||
|
|
* 4. 预警管理
|
|||
|
|
* 5. 系统状态管理
|
|||
|
|
*/
|
|||
|
|
class HeightMeasurementApp {
|
|||
|
|
public:
|
|||
|
|
/**
|
|||
|
|
* @brief 构造函数
|
|||
|
|
* @param sea_level_pressure 海平面气压值(hPa)
|
|||
|
|
*/
|
|||
|
|
explicit HeightMeasurementApp(float sea_level_pressure = 1013.25f);
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief 析构函数
|
|||
|
|
*/
|
|||
|
|
~HeightMeasurementApp();
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief 初始化系统
|
|||
|
|
* @return 初始化是否成功
|
|||
|
|
*/
|
|||
|
|
bool initialize();
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief 启动系统运行
|
|||
|
|
*/
|
|||
|
|
void start();
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief 停止系统运行
|
|||
|
|
*/
|
|||
|
|
void stop();
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief 执行一次测量循环
|
|||
|
|
* @return 测量是否成功
|
|||
|
|
*/
|
|||
|
|
bool measureCycle();
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief 获取当前高度(米)
|
|||
|
|
* @return 当前海拔高度
|
|||
|
|
*/
|
|||
|
|
float getCurrentAltitude() const;
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief 获取当前相对高度(米)
|
|||
|
|
* @return 相对零点的高度变化
|
|||
|
|
*/
|
|||
|
|
float getRelativeHeight() const;
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief 设置预警阈值
|
|||
|
|
* @param upper 上限阈值(米)
|
|||
|
|
* @param lower 下限阈值(米)
|
|||
|
|
*/
|
|||
|
|
void setAlertThresholds(float upper, float lower);
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief 执行零点归位
|
|||
|
|
* @return 归位是否成功
|
|||
|
|
*/
|
|||
|
|
bool performZeroReset();
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief 校准海平面气压
|
|||
|
|
* @param pressure 新的海平面气压值(hPa)
|
|||
|
|
*/
|
|||
|
|
void calibrateSeaLevelPressure(float pressure);
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief 导出历史数据
|
|||
|
|
* @param filename 导出文件名
|
|||
|
|
* @return 导出是否成功
|
|||
|
|
*/
|
|||
|
|
bool exportHistoryData(const std::string& filename);
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief 获取系统状态信息
|
|||
|
|
* @return 状态信息字符串
|
|||
|
|
*/
|
|||
|
|
std::string getStatus() const;
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief 检查系统是否正在运行
|
|||
|
|
* @return 运行状态
|
|||
|
|
*/
|
|||
|
|
bool isRunning() const { return running_; }
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief 获取数据记录器
|
|||
|
|
* @return 数据记录器引用
|
|||
|
|
*/
|
|||
|
|
DataLogger& getDataLogger() { return *data_logger_; }
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief 获取预警管理器
|
|||
|
|
* @return 预警管理器引用
|
|||
|
|
*/
|
|||
|
|
AlertManager& getAlertManager() { return *alert_manager_; }
|
|||
|
|
|
|||
|
|
private:
|
|||
|
|
// 核心组件
|
|||
|
|
std::unique_ptr<AltitudeCalculator> altitude_calculator_;
|
|||
|
|
std::unique_ptr<DataLogger> data_logger_;
|
|||
|
|
std::unique_ptr<SensorSimulator> sensor_simulator_;
|
|||
|
|
std::unique_ptr<AlertManager> alert_manager_;
|
|||
|
|
|
|||
|
|
// 系统状态
|
|||
|
|
bool running_ = false;
|
|||
|
|
bool initialized_ = false;
|
|||
|
|
|
|||
|
|
// 相对高度上下文
|
|||
|
|
struct {
|
|||
|
|
float base_altitude = 0.0f;
|
|||
|
|
bool zero_reset_done = false;
|
|||
|
|
} relative_context_;
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief 处理传感器数据
|
|||
|
|
* @param pressure 气压值(hPa)
|
|||
|
|
* @param timestamp 时间戳(秒)
|
|||
|
|
*/
|
|||
|
|
void processSensorData(float pressure, uint32_t timestamp);
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief 更新预警状态
|
|||
|
|
* @param altitude 当前高度
|
|||
|
|
*/
|
|||
|
|
void updateAlertStatus(float altitude);
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief 记录测量数据
|
|||
|
|
* @param altitude 高度值
|
|||
|
|
* @param timestamp 时间戳
|
|||
|
|
*/
|
|||
|
|
void logMeasurement(float altitude, uint32_t timestamp);
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
#endif // HSM_APP_HPP
|