CppGenerate/include/app.hpp

157 lines
3.6 KiB
C++
Raw Permalink Normal View History

2026-04-17 09:17:56 +00:00
#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