65 lines
2.7 KiB
C++
65 lines
2.7 KiB
C++
/**
|
|
* @file DisplayManager.h
|
|
* @brief 墨水屏 UI 管理器,负责环境监测大屏数据的绘制。
|
|
*
|
|
* 屏幕尺寸:400 × 300 像素,三色(黑/白/红)或纯黑白模式。
|
|
* 布局分区:
|
|
* ┌──────────────────────────────────────────────┐
|
|
* │ 顶部横幅(标题 + WiFi 连接状态) │ ~28px
|
|
* ├──────────────────────────────────────────────┤
|
|
* │ 【温湿度看板】 │
|
|
* │ 室内温度 (Font24) | 相对湿度 (Font24) │ ~125px
|
|
* ├──────────────────────────────────────────────┤
|
|
* │ 【空气质量指标】 │
|
|
* │ CO₂ ppm | TVOC mg/m³ | CH₂O mg/m³ │ ~110px
|
|
* ├──────────────────────────────────────────────┤
|
|
* │ 底部网络信息栏(IP + MAC 地址) │ ~25px
|
|
* └──────────────────────────────────────────────┘
|
|
*/
|
|
#ifndef DISPLAY_MANAGER_H
|
|
#define DISPLAY_MANAGER_H
|
|
|
|
#include "DashboardFetcher.h"
|
|
#include <string>
|
|
|
|
class DisplayManager {
|
|
public:
|
|
DisplayManager();
|
|
~DisplayManager();
|
|
|
|
/// 初始化 E-Paper SPI / GPIO 硬件
|
|
void initHardware();
|
|
|
|
/// 清空帧缓冲区,准备新一帧绘制
|
|
void beginDrawing();
|
|
|
|
/// 全量刷新并进入深度休眠
|
|
void updateFullAndSleep();
|
|
|
|
/// 快速刷新并进入深度休眠(黑白模式或仅更新黑白图层)
|
|
void updateFastAndSleep();
|
|
|
|
// ====== UI 绘制方法 ======
|
|
|
|
/// 绘制顶部横幅(应用标题 + WiFi 状态)
|
|
void drawTopBanner(const std::string &networkStatus);
|
|
|
|
/// 绘制温湿度核心看板(大字号温度、湿度与采集时间)
|
|
void drawThermoHygrometer(const DashboardData &data);
|
|
|
|
/// 绘制空气质量指标区(CO2、TVOC、甲醛三列卡片)
|
|
void drawAirQuality(const DashboardData &data);
|
|
|
|
/// 绘制底部网络及设备信息栏(IP + MAC)
|
|
void drawBottomInfoBar(const std::string &ip, const std::string &mac);
|
|
|
|
/// 绘制全屏错误提示(网络异常等)
|
|
void drawError(const std::string &errorMsg);
|
|
|
|
private:
|
|
/// 切换绘制目标到红色图层(true)或黑白图层(false)
|
|
void switchColor(bool toRed);
|
|
};
|
|
|
|
#endif // DISPLAY_MANAGER_H
|