#ifndef HSM_APP_HPP #define HSM_APP_HPP #include #include #include #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 altitude_calculator_; std::unique_ptr data_logger_; std::unique_ptr sensor_simulator_; std::unique_ptr 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