123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272 |
- /**
- * @Author: 李建
- * @Date: 2025/3/18 11:34
- * Description: 定义了UI 与 逻辑的交互
- * Copyright: Copyright (©) 2025 永续绿建. All rights reserved.
- */
- #include <esp_log.h>
- #include <string.h>
- #include <nvs_flash.h>
- #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) {
- }
- 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);
- if(mode == 1) {
- lvgl_port_lock(0);
- lv_label_set_text_static(guider_ui.screen_lab_mode, "制冷");
- 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,22);
- lv_arc_set_value(guider_ui.screen_arc_temp, hp_controller.cool_set_temp);
- lvgl_port_unlock();
- } else if(mode ==2) {
- lvgl_port_lock(0);
- 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,60);
- lv_arc_set_value(guider_ui.screen_arc_temp, hp_controller.heat_set_temp);
- 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);
- 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);
- //ac_status.set_temp = (uint16_t) value;
- //ac_set_temp(true);
- }
|