CppGenerate/include/app.hpp

157 lines
3.6 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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