/** * @Author: 李建 * @Date: 2025/3/18 11:34 * Description: 定义了UI 与 逻辑的交互 * Copyright: Copyright (©) 2025 永续绿建. All rights reserved. */ #include #include #include #include "misc/lv_types.h" #include "widgets/tabview/lv_tabview.h" #include "gui_guider.h" #include "main.h" #include "wifi.h" #include "actions.h" #include "lvgl_port.h" #include "modbus_master.h" #include "system/miscellaneous_interface.h" #include "heatpump_controller.h" LV_IMAGE_DECLARE(_orange_meter_RGB565A8_84x396); LV_IMAGE_DECLARE(_green_meter_RGB565A8_84x396); const static char *TAG = "actions"; char mode_str[][8] = {"制冷", "制热", "除湿", "送风", "加湿"}; char speed_str[][8] = {"一档", "二档", "三档", "四档", "五档"}; static uint8_t addr = 1; /** * 点击管理密码登录按钮事件 * @param e */ void on_btn_check_manager_password(lv_event_t *e) { const char *password = lv_textarea_get_text(guider_ui.SettingPage_ta_1); if (strcmp(password, "0803") != 0) { // 显示密码错误标签 lv_obj_remove_flag(guider_ui.SettingPage_lab_password_incorrect, LV_OBJ_FLAG_HIDDEN); } else { // 验证通过 lv_obj_add_flag(guider_ui.SettingPage_lab_password_incorrect, LV_OBJ_FLAG_HIDDEN); // 隐藏密码输入 panel lv_obj_add_flag(guider_ui.SettingPage_cont_1, LV_OBJ_FLAG_HIDDEN); // 显示高级设置界面 guider_ui.SettingPage_del = true; ui_load_scr_animation(&guider_ui, &guider_ui.FactorySettingPage, true, &guider_ui.SettingPage_del, setup_scr_FactorySettingPage, LV_SCR_LOAD_ANIM_MOVE_RIGHT, 200, 200, true, true); } } /** * 点击设置-网络-查找网络按钮事件 * @param e */ void on_btn_scan_wifi_click(lv_event_t *e) { lv_obj_clean(guider_ui.SettingPage_list_wifi); app_wifi_scan(); } /** * 点击连接 wifi 按钮 * @param e */ void on_btn_connect_wifi(lv_event_t *e) { app_connect_wifi(); } // 设置界面切换顶部tab按钮时的事件 void on_setting_tabview_changed(lv_event_t *e) { // uint32_t index = lv_tabview_get_tab_active(guider_ui.SettingPage_tabview_1); // switch (index) { // case 0: // 参数设置 // break; // case 1: // 网络设置 // //app_wifi_scan(); // break; // case 2: // default: // break; // } } /** * 高级配置-五恒模块选中事件 * @param e */ void on_set_five_const_module(lv_event_t *e) { lv_obj_t *cont = (lv_obj_t *) lv_event_get_current_target(e); lv_obj_t *act_cb = lv_event_get_target(e); if (act_cb == cont) return; lv_obj_add_state(act_cb, LV_STATE_CHECKED); uint32_t count = lv_obj_get_child_count(cont); // 遍历所有子控件 for (int i = 0; i < count; i++) { lv_obj_t *child = lv_obj_get_child(cont, i); if (child != act_cb) { lv_obj_remove_state(child, LV_STATE_CHECKED); } } // TODO:修改本地配置 } /** * 高级配置-设备风阀与分控对应关系 * @param e * @param valve_index */ void on_set_fan_valve(lv_event_t *e, uint8_t valve_index) { lv_obj_t *cont = (lv_obj_t *) lv_event_get_current_target(e); lv_obj_t *act_cb = lv_event_get_target(e); if (act_cb == cont) return; lv_obj_add_state(act_cb, LV_STATE_CHECKED); uint32_t count = lv_obj_get_child_count(cont); // 遍历所有子控件 for (int i = 0; i < count; i++) { lv_obj_t *child = lv_obj_get_child(cont, i); if (child != act_cb) { lv_obj_remove_state(child, LV_STATE_CHECKED); } } // TODO: 修改风阀对应配置 } /** * 高级配置-恢复出厂设置按钮事件 * @param e */ void on_reset_factory_setting(lv_event_t *e) { // 清空nvs nvs_flash_erase(); // 重启设备 esp_restart(); } void on_set_inner_addr(uint8_t num) { if (num) addr += 1; else addr -= 1; if (addr + num > 255) addr = 254; if (addr + num < 1) addr = 1; lvgl_port_lock(0); lv_label_set_text_fmt(guider_ui.FactorySettingPage_lab_inner_addr, "%d", addr); lvgl_port_unlock(); // 保存到 nvs system_setting.inner_addr = addr; save_inner_addr(addr); } void on_ac_page_set_power(lv_event_t *e, uint8_t power) { hp_controller.power = power; heatpump_set_power(true); } void on_set_beep_on_off(lv_event_t *e) { lv_obj_t *obj = lv_event_get_current_target(e); if (lv_obj_has_state(obj, LV_STATE_CHECKED)) { system_setting.sound_on_off = 1; } else { system_setting.sound_on_off = 0; } save_system_setting(&system_setting); } void on_set_allow_valve_on_off(lv_event_t *e) { lv_obj_t *obj = lv_event_get_current_target(e); if (lv_obj_has_state(obj, LV_STATE_CHECKED)) { //system_setting.allow_valve_onoff = 1; } else { //system_setting.allow_valve_onoff = 0; } save_system_setting(&system_setting); } void on_set_screen_auto_off(lv_event_t *e) { lv_obj_t *obj = lv_event_get_current_target(e); if (lv_obj_has_state(obj, LV_STATE_CHECKED)) { system_setting.screen_auto_off = 1; } else { system_setting.screen_auto_off = 0; } save_system_setting(&system_setting); } void on_set_beep_volume(lv_event_t *e) { const lv_obj_t *slider = lv_event_get_current_target(e); uint32_t value = lv_slider_get_value(slider); ESP_LOGD(TAG, "on_set_beep_volume;%d", (uint8_t) value); system_setting.sound_volume = (uint8_t) value; save_system_setting(&system_setting); } void on_set_screen_off_minute(lv_event_t *e) { lv_obj_t *spbox = lv_event_get_current_target(e); int32_t value = lv_spinbox_get_value(spbox); if (value <= 0) { value = 1; } ESP_LOGD(TAG, "on_set_screen_off_minute;%d", (uint8_t) value); system_setting.screen_off_minute = (uint8_t) value; save_system_setting(&system_setting); } void on_ota_failed_restart(lv_event_t *e) { esp_restart(); } void on_restart_device(lv_event_t *e) { esp_restart(); } void on_params_save(lv_event_t *e) { // 与分风箱同步内机地址 (改到同步任务中) // mb_param_request_t req = { // .reg_size = 1, // .reg_start = 0x58, // .command = 0x06, // .slave_addr = 0x01, // }; // send_request(&req, &system_setting.inner_addr); // 保存参数 int32_t temp_fix = lv_spinbox_get_value(guider_ui.FactorySettingPage_sp_temp_recoup); system_setting.fix_temp = (int8_t) temp_fix; int32_t hum_fix = lv_spinbox_get_value(guider_ui.FactorySettingPage_sp_hum_recoup); system_setting.fix_hum = (int8_t) hum_fix; save_system_setting(&system_setting); } void on_reset_wifi(lv_event_t *e) { yx_data_clear(NVS_SSID_KEY); yx_data_clear(NVS_PASSWORD_KEY); esp_restart(); } void on_set_mode(lv_event_t *e, uint8_t mode) { ESP_LOGI(TAG, "on_set_mode:%d", mode); hp_controller.mode = mode; heatpump_set_mode(mode); if (mode == 1) { lvgl_port_lock(0); lv_label_set_text_static(guider_ui.screen_lab_mode, "制冷"); lv_obj_set_style_arc_color(guider_ui.screen_arc_temp, lv_color_hex(0x00d9ff), LV_PART_INDICATOR | LV_STATE_DEFAULT); lv_label_set_text_fmt(guider_ui.screen_lab_ac_temp, "%d", hp_controller.cool_set_temp); lv_obj_add_state(guider_ui.screen_ib_cool, LV_STATE_CHECKED); lv_obj_remove_state(guider_ui.screen_ib_heat, LV_STATE_CHECKED); lv_arc_set_range(guider_ui.screen_arc_temp, 7 * 2, 22 * 2); lv_arc_set_value(guider_ui.screen_arc_temp, hp_controller.cool_set_temp * 2); lvgl_port_unlock(); } else if (mode == 2) { lvgl_port_lock(0); lv_obj_set_style_arc_color(guider_ui.screen_arc_temp, lv_color_hex(0xfa890a), LV_PART_INDICATOR | LV_STATE_DEFAULT); lv_label_set_text_static(guider_ui.screen_lab_mode, "制热"); lv_label_set_text_fmt(guider_ui.screen_lab_ac_temp, "%d", hp_controller.heat_set_temp); lv_obj_remove_state(guider_ui.screen_ib_cool, LV_STATE_CHECKED); lv_obj_add_state(guider_ui.screen_ib_heat, LV_STATE_CHECKED); lv_arc_set_range(guider_ui.screen_arc_temp, 30 * 2, 60 * 2); lv_arc_set_value(guider_ui.screen_arc_temp, hp_controller.heat_set_temp * 2); lvgl_port_unlock(); } } void on_arc_temp_value_changed(lv_event_t *e) { lv_obj_t *arc = lv_event_get_current_target(e); int32_t value = lv_arc_get_value(arc); lvgl_port_lock(0); lv_label_set_text_fmt(guider_ui.screen_lab_ac_temp, "%d", (uint16_t) value / 2); lvgl_port_unlock(); } void on_arc_temp_released(lv_event_t *e) { lv_obj_t *arc = lv_event_get_current_target(e); int32_t value = lv_arc_get_value(arc); if (hp_controller.mode == MODE_COOL) hp_controller.cool_set_temp = value / 2; if (hp_controller.mode == MODE_HEAT) hp_controller.heat_set_temp = value / 2; heatpump_set_temp(value / 2); } void on_screen_gesture_bottom(lv_event_t *e) { lv_obj_t *c_obj = lv_event_get_current_target_obj(e); lv_obj_t *obj = lv_event_get_target_obj(e); if(c_obj == guider_ui.screen_arc_temp)return; ui_load_scr_animation(&guider_ui, &guider_ui.SettingPage, guider_ui.SettingPage_del, &guider_ui.screen_del, setup_scr_SettingPage, LV_SCR_LOAD_ANIM_MOVE_BOTTOM, 100, 0, false, false); }