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

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