setting.c 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. /**
  2. * @Author: 李建
  3. * @Date: 2025/5/2 11:48
  4. * Description: 系统设置功能
  5. * Copyright: Copyright (©) 2025 永续绿建. All rights reserved.
  6. */
  7. #include <esp_log.h>
  8. #include <esp_timer.h>
  9. #include "setting.h"
  10. #include "lvgl.h"
  11. #include "system/miscellaneous_interface.h"
  12. #include "lcd_st7701.h"
  13. #include "gui_guider.h"
  14. #define DEFAULT_REPORT_DURATION 30
  15. #define DEFAULT_MIN_HUM 30
  16. #define FILTER_LIFE_TIME_VALVE 51840//六个月,每五分钟计数加一
  17. void save_inner_addr(uint8_t addr) {
  18. nvs_set_uint8(addr, NVS_INNER_ADDR);
  19. }
  20. static const char *TAG = "system_setting";
  21. lv_timer_t * screen_timer;
  22. static uint8_t screen_on_off_status;// 当前屏幕亮或灭的状态
  23. void read_system_setting(system_setting_t *setting) {
  24. uint8_t air_exhaust_fan_vol[3]={20,40,49};
  25. uint32_t *filter_life_time_valve = nvs_get_uint32(FILTER_LIFE_TIME);
  26. uint8_t *fan_first_vol = nvs_get_uint8(NVS_FAV_FIRST_VOL);
  27. uint8_t *fan_second_vol = nvs_get_uint8(NVS_FAN_SECOND_VOL);
  28. uint8_t *fan_third_vol = nvs_get_uint8(NVS_FAN_THIRD_VOL);
  29. uint8_t *report_duration = nvs_get_uint8(NVS_REPORT_DATA_DURATION);
  30. int8_t *fix_hum = nvs_get_int8(NVS_FIX_HUM_KEY);
  31. int8_t *fix_temp = nvs_get_int8(NVS_FIX_TEMP_KEY);
  32. if (fix_hum == NULL) {
  33. nvs_set_int8(9, NVS_FIX_HUM_KEY);
  34. setting->fix_hum = 9;
  35. } else {
  36. setting->fix_hum = *fix_hum;
  37. }
  38. if (fix_temp == NULL) {
  39. nvs_set_int8(-3, NVS_FIX_TEMP_KEY);
  40. setting->fix_temp = -3;
  41. } else {
  42. setting->fix_temp = *fix_temp;
  43. }
  44. uint8_t *screen_auto_off = nvs_get_uint8(NVS_SCREEN_AUTO_OFF_KEY);
  45. if (screen_auto_off == NULL) {
  46. nvs_set_uint8(1, NVS_SCREEN_AUTO_OFF_KEY);
  47. setting->screen_auto_off = 1;
  48. } else {
  49. setting->screen_auto_off = *screen_auto_off;
  50. }
  51. uint8_t *screen_off_minute = nvs_get_uint8(NVS_SCREEN_OFF_MINUTE_KEY);
  52. if (screen_off_minute == NULL) {
  53. nvs_set_uint8(1, NVS_SCREEN_OFF_MINUTE_KEY);
  54. setting->screen_off_minute = 1;
  55. } else {
  56. setting->screen_off_minute = *screen_off_minute;
  57. }
  58. uint8_t *sound_on_off = nvs_get_uint8(NVS_SOUND_ON_OFF_KEY);
  59. if (sound_on_off == NULL) {
  60. nvs_set_uint8(1, NVS_SOUND_ON_OFF_KEY);
  61. setting->sound_on_off = 1;
  62. } else {
  63. setting->sound_on_off = *sound_on_off;
  64. }
  65. uint8_t *sound_volume = nvs_get_uint8(NVS_SOUND_VOLUME_KEY);
  66. if (sound_volume == NULL) {
  67. nvs_set_uint8(50, NVS_SOUND_VOLUME_KEY);
  68. setting->sound_volume = 50;
  69. } else {
  70. setting->sound_volume = *sound_volume;
  71. }
  72. if (fan_first_vol == NULL) {
  73. nvs_set_uint32(air_exhaust_fan_vol[0], NVS_FAV_FIRST_VOL);
  74. setting->fan_first_vol = air_exhaust_fan_vol[0];
  75. } else {
  76. setting->fan_first_vol = *fan_first_vol;
  77. }
  78. if (fan_second_vol == NULL) {
  79. nvs_set_uint32(air_exhaust_fan_vol[1], NVS_FAN_SECOND_VOL);
  80. setting->fan_second_vol = air_exhaust_fan_vol[1];
  81. } else {
  82. setting->fan_second_vol = *fan_second_vol;
  83. }
  84. if (fan_third_vol == NULL) {
  85. nvs_set_uint32(air_exhaust_fan_vol[2], NVS_FAN_THIRD_VOL);
  86. setting->fan_third_vol = air_exhaust_fan_vol[2];
  87. } else {
  88. setting->fan_third_vol = *fan_third_vol;
  89. }
  90. if (filter_life_time_valve == NULL) {
  91. nvs_set_uint32(FILTER_LIFE_TIME_VALVE, FILTER_LIFE_TIME);
  92. setting->filter_life_time = FILTER_LIFE_TIME_VALVE;
  93. } else {
  94. setting->filter_life_time = *filter_life_time_valve;
  95. }
  96. setting->filter_life_time = FILTER_LIFE_TIME_VALVE;
  97. if (report_duration == NULL) {
  98. nvs_set_uint8(DEFAULT_REPORT_DURATION, NVS_REPORT_DATA_DURATION);
  99. setting->report_data_duration = DEFAULT_REPORT_DURATION;
  100. } else {
  101. setting->report_data_duration = *report_duration;
  102. }
  103. uint8_t *inner_addr = nvs_get_uint8(NVS_INNER_ADDR);
  104. if (inner_addr == NULL) {
  105. nvs_set_uint8(1, NVS_INNER_ADDR);
  106. setting->inner_addr = 1;
  107. } else {
  108. setting->inner_addr = *inner_addr;
  109. }
  110. uint8_t *xf_have = nvs_get_uint8(NVS_XF_HAVE_ADDR);
  111. if (xf_have == NULL) {
  112. nvs_set_uint8(0, NVS_XF_HAVE_ADDR);
  113. setting->xf_have = 1;
  114. } else {
  115. setting->xf_have = *xf_have;
  116. }
  117. }
  118. void save_system_setting(system_setting_t *setting) {
  119. nvs_set_uint32(setting->filter_life_time, FILTER_LIFE_TIME);
  120. nvs_set_uint8(setting->report_data_duration, NVS_REPORT_DATA_DURATION);
  121. nvs_set_uint8(setting->inner_addr, NVS_INNER_ADDR);
  122. nvs_set_uint8(setting->fix_temp, NVS_FIX_TEMP_KEY);
  123. nvs_set_uint8(setting->fix_hum, NVS_FIX_HUM_KEY);
  124. nvs_set_uint8(setting->fan_first_vol, NVS_FAV_FIRST_VOL);
  125. nvs_set_uint8(setting->fan_second_vol, NVS_FAN_SECOND_VOL);
  126. nvs_set_uint8(setting->fan_third_vol, NVS_FAN_THIRD_VOL);
  127. nvs_set_uint8(setting->xf_have, NVS_XF_HAVE_ADDR);
  128. nvs_set_uint8(setting->sound_on_off, NVS_SOUND_ON_OFF_KEY);
  129. nvs_set_uint8(setting->sound_volume, NVS_SOUND_VOLUME_KEY);
  130. nvs_set_uint8(setting->screen_auto_off, NVS_SCREEN_AUTO_OFF_KEY);
  131. nvs_set_uint8(setting->screen_off_minute, NVS_SCREEN_OFF_MINUTE_KEY);
  132. }
  133. static uint8_t set_bits(uint8_t num, uint8_t bit, uint8_t value) {
  134. if (bit > 7)
  135. return num;
  136. if (value)
  137. return num | (1 << bit);
  138. else
  139. return num & ~(1 << bit);
  140. }
  141. static void screen_off_timer_cb(lv_timer_t * timer) {
  142. lcd_st7701_backlight_off();
  143. lv_screen_load_anim(guider_ui.screen_main, LV_SCR_LOAD_ANIM_MOVE_RIGHT, 100, 0, false);
  144. screen_on_off_status = 0;
  145. nvs_set_uint8(1, NVS_SCREEN_ON_OFF);
  146. lv_timer_pause(screen_timer);
  147. }
  148. bool reset_screen_off(){
  149. if(screen_timer==NULL)return false;
  150. lv_timer_reset(screen_timer);
  151. if(screen_on_off_status==0)
  152. {
  153. lcd_st7701_backlight_on();
  154. nvs_set_uint8(0, NVS_SCREEN_ON_OFF);
  155. screen_on_off_status = 1;
  156. lv_timer_resume(screen_timer);
  157. return true;
  158. }
  159. return false;
  160. }
  161. void screen_off_timer_init(system_setting_t* setting) {
  162. ESP_LOGD(TAG, "screen_off_timer_init");
  163. screen_timer = lv_timer_create(screen_off_timer_cb, 1000 * 60 * setting->screen_off_minute, NULL);
  164. }