/** * @Author: 李建 * @Date: 2025/5/2 11:48 * Description: 系统设置功能 * Copyright: Copyright (©) 2025 永续绿建. All rights reserved. */ #include #include #include "setting.h" #include "lvgl.h" #include "system/miscellaneous_interface.h" #include "lcd_st7701.h" #include "gui_guider.h" #define DEFAULT_REPORT_DURATION 30 #define DEFAULT_MIN_HUM 30 #define FILTER_LIFE_TIME_VALVE 51840//六个月,每五分钟计数加一 void save_inner_addr(uint8_t addr) { nvs_set_uint8(addr, NVS_INNER_ADDR); } static const char *TAG = "system_setting"; lv_timer_t * screen_timer; static uint8_t screen_on_off_status;// 当前屏幕亮或灭的状态 void read_system_setting(system_setting_t *setting) { uint8_t air_exhaust_fan_vol[3]={20,40,49}; uint32_t *filter_life_time_valve = nvs_get_uint32(FILTER_LIFE_TIME); uint8_t *fan_first_vol = nvs_get_uint8(NVS_FAV_FIRST_VOL); uint8_t *fan_second_vol = nvs_get_uint8(NVS_FAN_SECOND_VOL); uint8_t *fan_third_vol = nvs_get_uint8(NVS_FAN_THIRD_VOL); 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); 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; } uint8_t *screen_auto_off = nvs_get_uint8(NVS_SCREEN_AUTO_OFF_KEY); 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; } if (fan_first_vol == NULL) { nvs_set_uint32(air_exhaust_fan_vol[0], NVS_FAV_FIRST_VOL); setting->fan_first_vol = air_exhaust_fan_vol[0]; } else { setting->fan_first_vol = *fan_first_vol; } if (fan_second_vol == NULL) { nvs_set_uint32(air_exhaust_fan_vol[1], NVS_FAN_SECOND_VOL); setting->fan_second_vol = air_exhaust_fan_vol[1]; } else { setting->fan_second_vol = *fan_second_vol; } if (fan_third_vol == NULL) { nvs_set_uint32(air_exhaust_fan_vol[2], NVS_FAN_THIRD_VOL); setting->fan_third_vol = air_exhaust_fan_vol[2]; } else { setting->fan_third_vol = *fan_third_vol; } if (filter_life_time_valve == NULL) { nvs_set_uint32(FILTER_LIFE_TIME_VALVE, FILTER_LIFE_TIME); setting->filter_life_time = FILTER_LIFE_TIME_VALVE; } else { setting->filter_life_time = *filter_life_time_valve; } setting->filter_life_time = FILTER_LIFE_TIME_VALVE; 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; } 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; } uint8_t *xf_have = nvs_get_uint8(NVS_XF_HAVE_ADDR); if (xf_have == NULL) { nvs_set_uint8(0, NVS_XF_HAVE_ADDR); setting->xf_have = 1; } else { setting->xf_have = *xf_have; } } void save_system_setting(system_setting_t *setting) { nvs_set_uint32(setting->filter_life_time, FILTER_LIFE_TIME); nvs_set_uint8(setting->report_data_duration, NVS_REPORT_DATA_DURATION); nvs_set_uint8(setting->inner_addr, NVS_INNER_ADDR); nvs_set_uint8(setting->fix_temp, NVS_FIX_TEMP_KEY); nvs_set_uint8(setting->fix_hum, NVS_FIX_HUM_KEY); nvs_set_uint8(setting->fan_first_vol, NVS_FAV_FIRST_VOL); nvs_set_uint8(setting->fan_second_vol, NVS_FAN_SECOND_VOL); nvs_set_uint8(setting->fan_third_vol, NVS_FAN_THIRD_VOL); nvs_set_uint8(setting->xf_have, NVS_XF_HAVE_ADDR); 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); } 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) { lcd_st7701_backlight_off(); lv_screen_load_anim(guider_ui.screen_main, LV_SCR_LOAD_ANIM_MOVE_RIGHT, 100, 0, false); 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); }