/** * @Author: 李建 * @Date: 2025/5/2 11:48 * Description: 系统设置功能 * Copyright: Copyright (?) 2025 永续绿建. All rights reserved. */ #include #include "setting.h" #include "lvgl.h" #include "system/miscellaneous_interface.h" #include "lcd_st7701.h" #include "gui_guider.h" #include "main.h" // 默认上报时间间隔 #define DEFAULT_REPORT_DURATION 30 static const char *TAG = "system_setting"; lv_timer_t *screen_timer; static uint8_t screen_on_off_status = 0;// 当前屏幕亮或灭的状态 void read_system_setting(system_setting_t *setting) { uint8_t *screen_auto_off = nvs_get_uint8(NVS_SCREEN_AUTO_OFF_KEY); uint8_t *report_duration = nvs_get_uint8(NVS_REPORT_DATA_DURATION); int8_t *fix_hum = nvs_get_int8(NVS_FIX_HUM_KEY); int8_t *fix_temp = nvs_get_int8(NVS_FIX_TEMP_KEY); uint16_t *hp_power = nvs_get_uint16(NVS_HP_POWER_KEY); uint16_t *hp_mode = nvs_get_uint16(NVS_HP_MODE_KEY); uint16_t *fjsq_slave_addr = nvs_get_uint16(NVS_FJSQ_SLAVE_ADDR); uint16_t *hp_cool_set_temp = nvs_get_uint16(NVS_HP_COOL_SET_TEMP_KEY); uint16_t *hp_heat_set_temp = nvs_get_uint16(NVS_HP_HEAT_SET_TEMP_KEY); uint16_t *relay_status = nvs_get_uint16(NVS_RELEY_STATUS_KEY); if (hp_power == NULL) { nvs_set_uint16(1, NVS_HP_POWER_KEY); setting->hp_power = 0; } else { setting->hp_power = *hp_power; } if (hp_mode == NULL) { nvs_set_uint16(MODE_COOL, NVS_HP_MODE_KEY); setting->hp_mode = MODE_COOL; } else { setting->hp_mode = *hp_mode; } if (fjsq_slave_addr == NULL) { nvs_set_uint16(5, NVS_FJSQ_SLAVE_ADDR); setting->fjsq_slave_addr = 5; } else { setting->fjsq_slave_addr = *fjsq_slave_addr; } if (hp_cool_set_temp == NULL) { nvs_set_uint16(12, NVS_HP_COOL_SET_TEMP_KEY); setting->hp_cool_set_temp = 12; } else { setting->hp_cool_set_temp = *hp_cool_set_temp; } if (hp_heat_set_temp == NULL) { nvs_set_uint16(45, NVS_HP_HEAT_SET_TEMP_KEY); setting->hp_heat_set_temp = 45; } else { setting->hp_heat_set_temp = *hp_heat_set_temp; } if (relay_status == NULL) { nvs_set_uint16(0xFF, NVS_RELEY_STATUS_KEY); setting->reley_status = 0xFF; } else { setting->reley_status = *relay_status; } if (fix_hum == NULL) { nvs_set_int8(9, NVS_FIX_HUM_KEY); setting->fix_hum = 9; } else { setting->fix_hum = *fix_hum; } if (fix_temp == NULL) { nvs_set_int8(-3, NVS_FIX_TEMP_KEY); setting->fix_temp = -3; } else { setting->fix_temp = *fix_temp; } if (report_duration == NULL) { nvs_set_uint8(DEFAULT_REPORT_DURATION, NVS_REPORT_DATA_DURATION); setting->report_data_duration = DEFAULT_REPORT_DURATION; } else { setting->report_data_duration = *report_duration; } if (screen_auto_off == NULL) { nvs_set_uint8(1, NVS_SCREEN_AUTO_OFF_KEY); setting->screen_auto_off = 1; } else { setting->screen_auto_off = *screen_auto_off; } uint8_t *screen_off_minute = nvs_get_uint8(NVS_SCREEN_OFF_MINUTE_KEY); if (screen_off_minute == NULL) { nvs_set_uint8(1, NVS_SCREEN_OFF_MINUTE_KEY); setting->screen_off_minute = 1; } else { setting->screen_off_minute = *screen_off_minute; } uint8_t *sound_on_off = nvs_get_uint8(NVS_SOUND_ON_OFF_KEY); if (sound_on_off == NULL) { nvs_set_uint8(1, NVS_SOUND_ON_OFF_KEY); setting->sound_on_off = 1; } else { setting->sound_on_off = *sound_on_off; } uint8_t *sound_volume = nvs_get_uint8(NVS_SOUND_VOLUME_KEY); if (sound_volume == NULL) { nvs_set_uint8(50, NVS_SOUND_VOLUME_KEY); setting->sound_volume = 50; } else { setting->sound_volume = *sound_volume; } uint8_t *inner_addr = nvs_get_uint8(NVS_INNER_ADDR); if (inner_addr == NULL) { nvs_set_uint8(1, NVS_INNER_ADDR); setting->inner_addr = 1; } else { setting->inner_addr = *inner_addr; } } void save_inner_addr(uint8_t addr) { nvs_set_uint8(addr, NVS_INNER_ADDR); } void save_system_setting(system_setting_t *setting) { nvs_set_uint8(setting->sound_on_off, NVS_SOUND_ON_OFF_KEY); nvs_set_uint8(setting->sound_volume, NVS_SOUND_VOLUME_KEY); nvs_set_uint8(setting->screen_auto_off, NVS_SCREEN_AUTO_OFF_KEY); nvs_set_uint8(setting->screen_off_minute, NVS_SCREEN_OFF_MINUTE_KEY); nvs_set_uint8(setting->report_data_duration, NVS_REPORT_DATA_DURATION); nvs_set_int8(setting->fix_temp, NVS_FIX_TEMP_KEY); nvs_set_int8(setting->fix_hum, NVS_FIX_HUM_KEY); lv_timer_set_period(screen_timer, 1000 * 60 * setting->screen_off_minute); } static uint8_t set_bits(uint8_t num, uint8_t bit, uint8_t value) { if (bit > 7) return num; if (value) return num | (1 << bit); else return num & ~(1 << bit); } static void screen_off_timer_cb(lv_timer_t *timer) { if (system_setting.screen_auto_off == 0)return; // 切换到待机画面,不为 OTA时 if (guider_ui.OTAPage == NULL) { //lv_obj_clear_flag(guider_ui.screen_cont_1, LV_OBJ_FLAG_HIDDEN); } lcd_st7701_backlight_off(); screen_on_off_status = 0; nvs_set_uint8(1, NVS_SCREEN_ON_OFF); lv_timer_pause(screen_timer); } bool reset_screen_off() { if (screen_timer == NULL)return false; lv_timer_reset(screen_timer); if (screen_on_off_status == 0) { lcd_st7701_backlight_on(); nvs_set_uint8(0, NVS_SCREEN_ON_OFF); screen_on_off_status = 1; lv_timer_resume(screen_timer); return true; } return false; } void screen_off_timer_init(system_setting_t *setting) { ESP_LOGD(TAG, "screen_off_timer_init"); screen_timer = lv_timer_create(screen_off_timer_cb, 1000 * 60 * setting->screen_off_minute, NULL); }