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
|