✨ 新增功能 - 按键驱动模块:GPIO中断+软件去抖,支持BOOT和KEY2按键事件回调 - 休眠管理器:10秒无操作自动休眠,触摸/按键唤醒,UI集成开关 - 电池电量监控:GPIO3 ADC实时检测,ScreenSet界面圆弧显示 🐛 Bug修复 - 修复FreeRTOS任务栈溢出导致内存损坏(battery任务栈2048→4096) - 修复图片文件名损坏问题(改用静态缓冲区替代动态分配) - 修复触摸中断引脚配置错误(GPIO4→GPIO5,匹配V1.0硬件) - 修复开机闪烁问题(调整背光初始化时序,UI渲染后再点亮) 🎨 界面优化 - ScreenSet恢复为标准Screen切换方式(移除浮动面板架构) - 亮度调节支持0%(完全关闭)和10-100%范围 - ScreenHome界面电量显示独立(不关联实时电量) - 手势导航优化:下拉显示设置,上滑返回主界面 ⚡ 性能优化 - 启动时间优化:从650ms缩短至170ms - 内存管理优化:图片列表使用静态数组(10×32字节) - 任务栈配置调优:battery 4096, button 3072, sleep_mgr 3072 📝 其他改进 - CMakeLists.txt添加新模块编译配置 - 添加硬件版本兼容性注释(GPIO引脚说明) - 完善函数注释和错误日志输出 - sdkconfig配置更新 Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
215 lines
10 KiB
C
215 lines
10 KiB
C
// This file was generated by SquareLine Studio
|
||
// SquareLine Studio version: SquareLine Studio 1.6.0
|
||
// LVGL version: 8.3.11
|
||
// Project name: Lcd_Pro
|
||
|
||
#include "../ui.h"
|
||
#include "../../pages/include/pages.h"
|
||
#include "../../sleep_mgr/include/sleep_mgr.h"
|
||
|
||
lv_obj_t *ui_ScreenSet = NULL;lv_obj_t *ui_GlobalContainer = NULL;lv_obj_t *ui_ContainerTop = NULL;lv_obj_t *ui_ImgLowPower = NULL;lv_obj_t *ui_ImgFlashlight = NULL;lv_obj_t *ui_ImgDelete = NULL;lv_obj_t *ui_ContainerCentral = NULL;lv_obj_t *ui_SliderBrightness = NULL;lv_obj_t *ui_ImgSun = NULL;lv_obj_t *ui_LabelBrightness = NULL;lv_obj_t *ui_ArcPowerLevel = NULL;lv_obj_t *ui_ImgLightning = NULL;lv_obj_t *ui_LabelPowerLevel = NULL;
|
||
|
||
// event funtions
|
||
void ui_event_ScreenSet( lv_event_t * e) {
|
||
lv_event_code_t event_code = lv_event_get_code(e);
|
||
|
||
if ( event_code == LV_EVENT_GESTURE && lv_indev_get_gesture_dir(lv_indev_get_act()) == LV_DIR_TOP ) {
|
||
lv_indev_wait_release(lv_indev_get_act());
|
||
_ui_screen_change( &ui_ScreenHome, LV_SCR_LOAD_ANIM_NONE, 0, 0, &ui_ScreenHome_screen_init);
|
||
}
|
||
}
|
||
|
||
void ui_event_SliderBrightness( lv_event_t * e) {
|
||
lv_event_code_t event_code = lv_event_get_code(e);lv_obj_t * target = lv_event_get_target(e);
|
||
|
||
if ( event_code == LV_EVENT_VALUE_CHANGED) {
|
||
int32_t val = lv_slider_get_value(target);
|
||
if (val < 10) { val = 10; lv_slider_set_value(target, 10, LV_ANIM_OFF); }
|
||
pwm_set_brightness((uint8_t)val);
|
||
_ui_slider_set_text_value( ui_LabelBrightness, target, "", "%");
|
||
}
|
||
}
|
||
|
||
// ImgLowPower点击事件:切换休眠模式
|
||
void ui_event_ImgLowPower( lv_event_t * e) {
|
||
lv_event_code_t event_code = lv_event_get_code(e);
|
||
if ( event_code == LV_EVENT_VALUE_CHANGED) {
|
||
lv_obj_t * target = lv_event_get_target(e);
|
||
// checked=true时显示s12(休眠模式),false时显示s11(正常模式)
|
||
bool checked = lv_obj_has_state(target, LV_STATE_CHECKED);
|
||
sleep_mgr_set_enabled(checked);
|
||
}
|
||
}
|
||
|
||
// build funtions
|
||
|
||
void ui_ScreenSet_screen_init(void)
|
||
{
|
||
ui_ScreenSet = lv_obj_create(NULL);
|
||
lv_obj_clear_flag( ui_ScreenSet, LV_OBJ_FLAG_SCROLLABLE ); /// Flags
|
||
lv_obj_set_style_bg_color(ui_ScreenSet, lv_color_hex(0x000000), LV_PART_MAIN | LV_STATE_DEFAULT );
|
||
lv_obj_set_style_bg_opa(ui_ScreenSet, 255, LV_PART_MAIN| LV_STATE_DEFAULT);
|
||
|
||
ui_GlobalContainer = lv_obj_create(ui_ScreenSet);
|
||
lv_obj_remove_style_all(ui_GlobalContainer);
|
||
lv_obj_set_width( ui_GlobalContainer, 360);
|
||
lv_obj_set_height( ui_GlobalContainer, 360);
|
||
lv_obj_set_align( ui_GlobalContainer, LV_ALIGN_CENTER );
|
||
lv_obj_clear_flag( ui_GlobalContainer, LV_OBJ_FLAG_CLICKABLE | LV_OBJ_FLAG_SCROLLABLE ); /// Flags
|
||
|
||
ui_ContainerTop = lv_obj_create(ui_GlobalContainer);
|
||
lv_obj_remove_style_all(ui_ContainerTop);
|
||
lv_obj_set_width( ui_ContainerTop, 240);
|
||
lv_obj_set_height( ui_ContainerTop, 80);
|
||
lv_obj_set_x( ui_ContainerTop, 0 );
|
||
lv_obj_set_y( ui_ContainerTop, -40 );
|
||
lv_obj_set_align( ui_ContainerTop, LV_ALIGN_CENTER );
|
||
lv_obj_clear_flag( ui_ContainerTop, LV_OBJ_FLAG_CLICKABLE | LV_OBJ_FLAG_SCROLLABLE ); /// Flags
|
||
|
||
ui_ImgLowPower = lv_imgbtn_create(ui_ContainerTop);
|
||
lv_imgbtn_set_src(ui_ImgLowPower, LV_IMGBTN_STATE_RELEASED, NULL, &ui_img_s11_png, NULL);
|
||
lv_imgbtn_set_src(ui_ImgLowPower, LV_IMGBTN_STATE_PRESSED, NULL, &ui_img_s11_png, NULL);
|
||
lv_imgbtn_set_src(ui_ImgLowPower, LV_IMGBTN_STATE_DISABLED, NULL, &ui_img_s12_png, NULL);
|
||
lv_imgbtn_set_src(ui_ImgLowPower, LV_IMGBTN_STATE_CHECKED_PRESSED, NULL, &ui_img_s12_png, NULL);
|
||
lv_imgbtn_set_src(ui_ImgLowPower, LV_IMGBTN_STATE_CHECKED_RELEASED, NULL, &ui_img_s12_png, NULL);
|
||
lv_obj_set_width( ui_ImgLowPower, 64);
|
||
lv_obj_set_height( ui_ImgLowPower, 64);
|
||
lv_obj_set_x( ui_ImgLowPower, -86 );
|
||
lv_obj_set_y( ui_ImgLowPower, -1 );
|
||
lv_obj_set_align( ui_ImgLowPower, LV_ALIGN_CENTER );
|
||
lv_obj_add_flag( ui_ImgLowPower, LV_OBJ_FLAG_CHECKABLE ); /// Flags
|
||
|
||
ui_ImgFlashlight = lv_img_create(ui_ContainerTop);
|
||
lv_img_set_src(ui_ImgFlashlight, &ui_img_s9_png);
|
||
lv_obj_set_width( ui_ImgFlashlight, LV_SIZE_CONTENT); /// 1
|
||
lv_obj_set_height( ui_ImgFlashlight, LV_SIZE_CONTENT); /// 1
|
||
lv_obj_set_x( ui_ImgFlashlight, -2 );
|
||
lv_obj_set_y( ui_ImgFlashlight, -1 );
|
||
lv_obj_set_align( ui_ImgFlashlight, LV_ALIGN_CENTER );
|
||
lv_obj_add_flag( ui_ImgFlashlight, LV_OBJ_FLAG_ADV_HITTEST ); /// Flags
|
||
lv_obj_clear_flag( ui_ImgFlashlight, LV_OBJ_FLAG_SCROLLABLE ); /// Flags
|
||
|
||
ui_ImgDelete = lv_img_create(ui_ContainerTop);
|
||
lv_img_set_src(ui_ImgDelete, &ui_img_s6_png);
|
||
lv_obj_set_width( ui_ImgDelete, LV_SIZE_CONTENT); /// 1
|
||
lv_obj_set_height( ui_ImgDelete, LV_SIZE_CONTENT); /// 1
|
||
lv_obj_set_x( ui_ImgDelete, 82 );
|
||
lv_obj_set_y( ui_ImgDelete, -1 );
|
||
lv_obj_set_align( ui_ImgDelete, LV_ALIGN_CENTER );
|
||
lv_obj_add_flag( ui_ImgDelete, LV_OBJ_FLAG_ADV_HITTEST ); /// Flags
|
||
lv_obj_clear_flag( ui_ImgDelete, LV_OBJ_FLAG_SCROLLABLE ); /// Flags
|
||
|
||
ui_ContainerCentral = lv_obj_create(ui_GlobalContainer);
|
||
lv_obj_remove_style_all(ui_ContainerCentral);
|
||
lv_obj_set_width( ui_ContainerCentral, 230);
|
||
lv_obj_set_height( ui_ContainerCentral, 70);
|
||
lv_obj_set_x( ui_ContainerCentral, 6 );
|
||
lv_obj_set_y( ui_ContainerCentral, 44 );
|
||
lv_obj_set_align( ui_ContainerCentral, LV_ALIGN_CENTER );
|
||
lv_obj_clear_flag( ui_ContainerCentral, LV_OBJ_FLAG_CLICKABLE | LV_OBJ_FLAG_SCROLLABLE ); /// Flags
|
||
|
||
ui_SliderBrightness = lv_slider_create(ui_ContainerCentral);
|
||
lv_slider_set_value( ui_SliderBrightness, 50, LV_ANIM_OFF);
|
||
if (lv_slider_get_mode(ui_SliderBrightness)==LV_SLIDER_MODE_RANGE ) lv_slider_set_left_value( ui_SliderBrightness, 0, LV_ANIM_OFF);
|
||
lv_obj_set_width( ui_SliderBrightness, 220);
|
||
lv_obj_set_height( ui_SliderBrightness, 60);
|
||
lv_obj_set_x( ui_SliderBrightness, -3 );
|
||
lv_obj_set_y( ui_SliderBrightness, 0 );
|
||
lv_obj_set_align( ui_SliderBrightness, LV_ALIGN_CENTER );
|
||
lv_obj_set_style_radius(ui_SliderBrightness, 50, LV_PART_MAIN| LV_STATE_DEFAULT);
|
||
lv_obj_set_style_bg_grad_dir(ui_SliderBrightness, LV_GRAD_DIR_NONE, LV_PART_MAIN| LV_STATE_DEFAULT);
|
||
lv_obj_set_style_blend_mode(ui_SliderBrightness, LV_BLEND_MODE_NORMAL, LV_PART_MAIN| LV_STATE_DEFAULT);
|
||
|
||
lv_obj_set_style_radius(ui_SliderBrightness, 0, LV_PART_INDICATOR| LV_STATE_DEFAULT);
|
||
lv_obj_set_style_bg_color(ui_SliderBrightness, lv_color_hex(0x64A8EB), LV_PART_INDICATOR | LV_STATE_DEFAULT );
|
||
lv_obj_set_style_bg_opa(ui_SliderBrightness, 255, LV_PART_INDICATOR| LV_STATE_DEFAULT);
|
||
|
||
lv_obj_set_style_bg_color(ui_SliderBrightness, lv_color_hex(0xFFFFFF), LV_PART_KNOB | LV_STATE_DEFAULT );
|
||
lv_obj_set_style_bg_opa(ui_SliderBrightness, 0, LV_PART_KNOB| LV_STATE_DEFAULT);
|
||
|
||
ui_ImgSun = lv_img_create(ui_ContainerCentral);
|
||
lv_img_set_src(ui_ImgSun, &ui_img_s10_png);
|
||
lv_obj_set_width( ui_ImgSun, LV_SIZE_CONTENT); /// 1
|
||
lv_obj_set_height( ui_ImgSun, LV_SIZE_CONTENT); /// 1
|
||
lv_obj_set_x( ui_ImgSun, -78 );
|
||
lv_obj_set_y( ui_ImgSun, 0 );
|
||
lv_obj_set_align( ui_ImgSun, LV_ALIGN_CENTER );
|
||
lv_obj_add_flag( ui_ImgSun, LV_OBJ_FLAG_ADV_HITTEST ); /// Flags
|
||
lv_obj_clear_flag( ui_ImgSun, LV_OBJ_FLAG_SCROLLABLE ); /// Flags
|
||
|
||
ui_LabelBrightness = lv_label_create(ui_ContainerCentral);
|
||
lv_obj_set_width( ui_LabelBrightness, LV_SIZE_CONTENT); /// 1
|
||
lv_obj_set_height( ui_LabelBrightness, LV_SIZE_CONTENT); /// 1
|
||
lv_obj_set_x( ui_LabelBrightness, 6 );
|
||
lv_obj_set_y( ui_LabelBrightness, 0 );
|
||
lv_obj_set_align( ui_LabelBrightness, LV_ALIGN_CENTER );
|
||
lv_label_set_text(ui_LabelBrightness,"50%");
|
||
lv_obj_set_style_text_color(ui_LabelBrightness, lv_color_hex(0xFFFFFF), LV_PART_MAIN | LV_STATE_DEFAULT );
|
||
lv_obj_set_style_text_opa(ui_LabelBrightness, 255, LV_PART_MAIN| LV_STATE_DEFAULT);
|
||
lv_obj_set_style_text_font(ui_LabelBrightness, &lv_font_montserrat_18, LV_PART_MAIN| LV_STATE_DEFAULT);
|
||
|
||
ui_ArcPowerLevel = lv_arc_create(ui_GlobalContainer);
|
||
lv_obj_set_width( ui_ArcPowerLevel, 320);
|
||
lv_obj_set_height( ui_ArcPowerLevel, 320);
|
||
lv_obj_set_align( ui_ArcPowerLevel, LV_ALIGN_CENTER );
|
||
lv_obj_clear_flag( ui_ArcPowerLevel, LV_OBJ_FLAG_CLICKABLE ); /// Flags
|
||
lv_arc_set_value(ui_ArcPowerLevel, 50);
|
||
lv_obj_set_style_arc_color(ui_ArcPowerLevel, lv_color_hex(0x39393E), LV_PART_MAIN | LV_STATE_DEFAULT );
|
||
lv_obj_set_style_arc_opa(ui_ArcPowerLevel, 255, LV_PART_MAIN| LV_STATE_DEFAULT);
|
||
lv_obj_set_style_arc_width(ui_ArcPowerLevel, 16, LV_PART_MAIN| LV_STATE_DEFAULT);
|
||
|
||
lv_obj_set_style_arc_color(ui_ArcPowerLevel, lv_color_hex(0x19FA29), LV_PART_INDICATOR | LV_STATE_DEFAULT );
|
||
lv_obj_set_style_arc_opa(ui_ArcPowerLevel, 255, LV_PART_INDICATOR| LV_STATE_DEFAULT);
|
||
lv_obj_set_style_arc_width(ui_ArcPowerLevel, 16, LV_PART_INDICATOR| LV_STATE_DEFAULT);
|
||
|
||
lv_obj_set_style_bg_color(ui_ArcPowerLevel, lv_color_hex(0x19FA29), LV_PART_KNOB | LV_STATE_DEFAULT );
|
||
lv_obj_set_style_bg_opa(ui_ArcPowerLevel, 255, LV_PART_KNOB| LV_STATE_DEFAULT);
|
||
|
||
ui_ImgLightning = lv_img_create(ui_GlobalContainer);
|
||
lv_img_set_src(ui_ImgLightning, &ui_img_s8_png);
|
||
lv_obj_set_width( ui_ImgLightning, LV_SIZE_CONTENT); /// 20
|
||
lv_obj_set_height( ui_ImgLightning, LV_SIZE_CONTENT); /// 20
|
||
lv_obj_set_x( ui_ImgLightning, -23 );
|
||
lv_obj_set_y( ui_ImgLightning, 121 );
|
||
lv_obj_set_align( ui_ImgLightning, LV_ALIGN_CENTER );
|
||
lv_obj_add_flag( ui_ImgLightning, LV_OBJ_FLAG_ADV_HITTEST ); /// Flags
|
||
lv_obj_clear_flag( ui_ImgLightning, LV_OBJ_FLAG_SCROLLABLE ); /// Flags
|
||
|
||
ui_LabelPowerLevel = lv_label_create(ui_GlobalContainer);
|
||
lv_obj_set_width( ui_LabelPowerLevel, LV_SIZE_CONTENT); /// 1
|
||
lv_obj_set_height( ui_LabelPowerLevel, LV_SIZE_CONTENT); /// 1
|
||
lv_obj_set_x( ui_LabelPowerLevel, 26 );
|
||
lv_obj_set_y( ui_LabelPowerLevel, 121 );
|
||
lv_obj_set_align( ui_LabelPowerLevel, LV_ALIGN_CENTER );
|
||
lv_label_set_text(ui_LabelPowerLevel,"70%");
|
||
lv_obj_set_style_text_color(ui_LabelPowerLevel, lv_color_hex(0xFFFFFF), LV_PART_MAIN | LV_STATE_DEFAULT );
|
||
lv_obj_set_style_text_opa(ui_LabelPowerLevel, 255, LV_PART_MAIN| LV_STATE_DEFAULT);
|
||
lv_obj_set_style_text_font(ui_LabelPowerLevel, &lv_font_montserrat_20, LV_PART_MAIN| LV_STATE_DEFAULT);
|
||
|
||
lv_obj_add_event_cb(ui_ImgLowPower, ui_event_ImgLowPower, LV_EVENT_ALL, NULL);
|
||
lv_obj_add_event_cb(ui_SliderBrightness, ui_event_SliderBrightness, LV_EVENT_ALL, NULL);
|
||
lv_obj_add_event_cb(ui_ScreenSet, ui_event_ScreenSet, LV_EVENT_ALL, NULL);
|
||
|
||
}
|
||
|
||
void ui_ScreenSet_screen_destroy(void)
|
||
{
|
||
if (ui_ScreenSet) lv_obj_del(ui_ScreenSet);
|
||
|
||
// NULL screen variables
|
||
ui_ScreenSet= NULL;
|
||
ui_GlobalContainer= NULL;
|
||
ui_ContainerTop= NULL;
|
||
ui_ImgLowPower= NULL;
|
||
ui_ImgFlashlight= NULL;
|
||
ui_ImgDelete= NULL;
|
||
ui_ContainerCentral= NULL;
|
||
ui_SliderBrightness= NULL;
|
||
ui_ImgSun= NULL;
|
||
ui_LabelBrightness= NULL;
|
||
ui_ArcPowerLevel= NULL;
|
||
ui_ImgLightning= NULL;
|
||
ui_LabelPowerLevel= NULL;
|
||
|
||
}
|