Files
xInfo/main/App.h
T
2026-08-31 15:05:13 +08:00

89 lines
3.2 KiB
C++
Raw 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.
/**
* @file App.h
* @brief xInfo 环境监控终端主应用类。
*
* 负责协调系统初始化、WiFi 连接、NTP 网络授时、本地传感器数据采集聚合,
* 以及墨水屏 UI 定时局部/全量刷新的完整生命周期与状态机管理。
*
* 系统运行机制:
* 1. 启动与初始化(init()):
* - 建立 WiFi 连接并获取网络配置;
* - 启动 SNTP 同步网络北京时间,供本地环境数据生成时间戳;
* - 初始化 E-Paper SPI/GPIO 硬件总线;
* - 初始化 UART 空气质量传感器(TVOC/CH₂O/CO₂)与 DHT11 温湿度传感器驱动。
* 2. 主循环(run()):
* - 定时从本地硬件驱动采集传感器读数并聚合为 DashboardData;
* - 比较当前帧与历史帧数据,有变化时才驱动墨水屏刷新(延长墨水屏使用寿命);
* - 根据刷新次数与内容变化自适应选择快速黑白刷新(~1.6s)或全量刷新(消除残影);
* - 进入低功耗休眠等待下一轮刷新周期。
*/
#ifndef APP_H
#define APP_H
#include "DashboardFetcher.h"
#include "Dht11Driver.h"
#include "DisplayManager.h"
#include "SensorDriver.h"
#include "WifiManager.h"
#include <optional>
#include <string>
class App {
public:
/**
* @brief 构造函数,初始化基础组件引脚与配置。
*/
App();
/**
* @brief 析构函数。
*/
~App();
/**
* @brief 初始化系统所有子系统。
*
* 包含:
* - WiFi 连接与网络参数就绪检测;
* - SNTP 时间同步(重试机制);
* - 墨水屏底层 SPI/GPIO 接口初始化;
* - DHT11 与 UART 气体传感器硬件接口初始化。
*/
void init();
/**
* @brief 主运行循环(阻塞)。
*
* 执行环境数据周期性采集、变化检测、墨水屏快刷/全刷决策与低功耗等待。
*/
void run();
private:
WifiManager wifi_; ///< WiFi 连接管理器(负责连接建立、IP/MAC/SSID/状态维护)
DisplayManager display_; ///< 墨水屏 UI 渲染与刷新驱动管理器
SensorDriver sensorDriver_; ///< UART 空气质量传感器驱动(CO₂、TVOC、甲醛 CH₂O 读数)
Dht11Driver dht11Driver_; ///< DHT11 单总线温湿度传感器驱动(室内温度、相对湿度)
DashboardFetcher dashFetcher_; ///< 本地环境数据聚合器(聚合传感器与系统时间)
/**
* @brief 缓存上一次刷新所使用的展示数据。
* 用于数据变更比对,数据完全一致时跳过刷新以延长墨水屏寿命。
*/
std::optional<DashboardData> lastDashData_;
/**
* @brief 缓存上一次红色图层区域的内容指纹(仅在 BWR 模式下生效)。
* 当红色图层内容发生变化时,必须触发全量三色刷新以更新红色像素。
*/
std::string lastRedContent_;
/**
* @brief 连续快速刷新计数器。
* 墨水屏在多次快速黑白刷新后可能产生背景残影,
* 计数器累计达到阈值(约每 3 小时)时强制触发一次全量刷新以消除残影。
*/
int fullRefreshCounter_ = 0;
};
#endif // APP_H