89 lines
3.2 KiB
C++
89 lines
3.2 KiB
C++
/**
|
||
* @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
|