#include "iot/thing.h" #include "board.h" // #include "display/lcd_display.h" // 移除显示器头文件引用 #include "settings.h" #include #include #define TAG "Screen" namespace iot { // 这里仅定义 Screen 的属性和方法,不包含具体的实现 class Screen : public Thing { public: Screen() : Thing("Screen", "这是一个屏幕,可设置主题和亮度") { // 定义设备的属性 properties_.AddStringProperty("theme", "主题", [this]() -> std::string { auto display = Board::GetInstance().GetDisplay(); if (display) { return display->GetTheme(); } return "default"; // 无显示器时返回默认主题 }); properties_.AddNumberProperty("brightness", "当前亮度百分比", [this]() -> int { // 这里可以添加获取当前亮度的逻辑 auto backlight = Board::GetInstance().GetBacklight(); return backlight ? backlight->brightness() : 100; }); // 定义设备可以被远程执行的指令 methods_.AddMethod("SetTheme", "设置屏幕主题", ParameterList({ Parameter("theme_name", "主题模式, light 或 dark", kValueTypeString, true) }), [this](const ParameterList& parameters) { std::string theme_name = static_cast(parameters["theme_name"].string()); auto display = Board::GetInstance().GetDisplay(); if (display) { display->SetTheme(theme_name); ESP_LOGI(TAG, "设置主题为: %s", theme_name.c_str()); } else { ESP_LOGW(TAG, "无显示器,忽略设置主题命令: %s", theme_name.c_str()); } }); methods_.AddMethod("SetBrightness", "设置亮度", ParameterList({ Parameter("brightness", "0到100之间的整数", kValueTypeNumber, true) }), [this](const ParameterList& parameters) { uint8_t brightness = static_cast(parameters["brightness"].number()); auto backlight = Board::GetInstance().GetBacklight(); if (backlight) { backlight->SetBrightness(brightness, true); ESP_LOGI(TAG, "设置亮度为: %d", brightness); } else { ESP_LOGW(TAG, "无背光控制,忽略设置亮度命令: %d", brightness); } }); } }; } // namespace iot DECLARE_THING(Screen);