setting.c 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  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 "setting.h"
  9. #include "lvgl.h"
  10. #include "system/miscellaneous_interface.h"
  11. #include "lcd_st7701.h"
  12. #include "gui_guider.h"
  13. #include "main.h"
  14. // 默认上报时间间隔
  15. #define DEFAULT_REPORT_DURATION 30
  16. static const char *TAG = "system_setting";
  17. lv_timer_t *screen_timer;
  18. static uint8_t screen_on_off_status = 0;// 当前屏幕亮或灭的状态
  19. void read_system_setting(system_setting_t *setting) {
  20. uint8_t *screen_auto_off = nvs_get_uint8(NVS_SCREEN_AUTO_OFF_KEY);
  21. uint8_t *report_duration = nvs_get_uint8(NVS_REPORT_DATA_DURATION);
  22. int8_t *fix_hum = nvs_get_int8(NVS_FIX_HUM_KEY);
  23. int8_t *fix_temp = nvs_get_int8(NVS_FIX_TEMP_KEY);
  24. uint16_t *hp_power = nvs_get_uint16(NVS_HP_POWER_KEY);
  25. uint16_t *hp_mode = nvs_get_uint16(NVS_HP_MODE_KEY);
  26. uint16_t *fjsq_slave_addr = nvs_get_uint16(NVS_FJSQ_SLAVE_ADDR);
  27. uint16_t *hp_cool_set_temp = nvs_get_uint16(NVS_HP_COOL_SET_TEMP_KEY);
  28. uint16_t *hp_heat_set_temp = nvs_get_uint16(NVS_HP_HEAT_SET_TEMP_KEY);
  29. uint16_t *relay_status = nvs_get_uint16(NVS_RELEY_STATUS_KEY);
  30. uint8_t *linkage = nvs_get_uint8(NVS_ALLOW_LINKAGE_KEY);
  31. uint8_t *active_fjsq = nvs_get_uint8(NVS_ACTIVE_FJSQ_KEY);
  32. if (active_fjsq == NULL) {
  33. nvs_set_uint8(0, NVS_ACTIVE_FJSQ_KEY);
  34. setting->active_fjsq = 0;
  35. } else {
  36. setting->active_fjsq = *active_fjsq;
  37. }
  38. if (hp_power == NULL) {
  39. nvs_set_uint16(1, NVS_HP_POWER_KEY);
  40. setting->hp_power = 0;
  41. } else {
  42. setting->hp_power = *hp_power;
  43. }
  44. if (linkage == NULL) {
  45. nvs_set_uint8(0, NVS_ALLOW_LINKAGE_KEY);
  46. setting->allow_linkage = 0;
  47. } else {
  48. setting->allow_linkage = *linkage;
  49. }
  50. if (hp_mode == NULL) {
  51. nvs_set_uint16(MODE_COOL, NVS_HP_MODE_KEY);
  52. setting->hp_mode = MODE_COOL;
  53. } else {
  54. setting->hp_mode = *hp_mode;
  55. }
  56. if (fjsq_slave_addr == NULL) {
  57. nvs_set_uint16(5, NVS_FJSQ_SLAVE_ADDR);
  58. setting->fjsq_slave_addr = 5;
  59. } else {
  60. setting->fjsq_slave_addr = *fjsq_slave_addr;
  61. }
  62. if (hp_cool_set_temp == NULL) {
  63. nvs_set_uint16(12, NVS_HP_COOL_SET_TEMP_KEY);
  64. setting->hp_cool_set_temp = 12;
  65. } else {
  66. setting->hp_cool_set_temp = *hp_cool_set_temp;
  67. }
  68. if (hp_heat_set_temp == NULL) {
  69. nvs_set_uint16(45, NVS_HP_HEAT_SET_TEMP_KEY);
  70. setting->hp_heat_set_temp = 45;
  71. } else {
  72. setting->hp_heat_set_temp = *hp_heat_set_temp;
  73. }
  74. if (relay_status == NULL) {
  75. nvs_set_uint16(0xFF, NVS_RELEY_STATUS_KEY);
  76. setting->reley_status = 0xFF;
  77. } else {
  78. setting->reley_status = *relay_status;
  79. }
  80. if (fix_hum == NULL) {
  81. nvs_set_int8(9, NVS_FIX_HUM_KEY);
  82. setting->fix_hum = 9;
  83. } else {
  84. setting->fix_hum = *fix_hum;
  85. }
  86. if (fix_temp == NULL) {
  87. nvs_set_int8(-3, NVS_FIX_TEMP_KEY);
  88. setting->fix_temp = -3;
  89. } else {
  90. setting->fix_temp = *fix_temp;
  91. }
  92. if (report_duration == NULL) {
  93. nvs_set_uint8(DEFAULT_REPORT_DURATION, NVS_REPORT_DATA_DURATION);
  94. setting->report_data_duration = DEFAULT_REPORT_DURATION;
  95. } else {
  96. setting->report_data_duration = *report_duration;
  97. }
  98. if (screen_auto_off == NULL) {
  99. nvs_set_uint8(1, NVS_SCREEN_AUTO_OFF_KEY);
  100. setting->screen_auto_off = 1;
  101. } else {
  102. setting->screen_auto_off = *screen_auto_off;
  103. }
  104. uint8_t *screen_off_minute = nvs_get_uint8(NVS_SCREEN_OFF_MINUTE_KEY);
  105. if (screen_off_minute == NULL) {
  106. nvs_set_uint8(1, NVS_SCREEN_OFF_MINUTE_KEY);
  107. setting->screen_off_minute = 1;
  108. } else {
  109. setting->screen_off_minute = *screen_off_minute;
  110. }
  111. uint8_t *sound_on_off = nvs_get_uint8(NVS_SOUND_ON_OFF_KEY);
  112. if (sound_on_off == NULL) {
  113. nvs_set_uint8(1, NVS_SOUND_ON_OFF_KEY);
  114. setting->sound_on_off = 1;
  115. } else {
  116. setting->sound_on_off = *sound_on_off;
  117. }
  118. uint8_t *sound_volume = nvs_get_uint8(NVS_SOUND_VOLUME_KEY);
  119. if (sound_volume == NULL) {
  120. nvs_set_uint8(50, NVS_SOUND_VOLUME_KEY);
  121. setting->sound_volume = 50;
  122. } else {
  123. setting->sound_volume = *sound_volume;
  124. }
  125. uint8_t *inner_addr = nvs_get_uint8(NVS_INNER_ADDR);
  126. if (inner_addr == NULL) {
  127. nvs_set_uint8(1, NVS_INNER_ADDR);
  128. setting->inner_addr = 1;
  129. } else {
  130. setting->inner_addr = *inner_addr;
  131. }
  132. }
  133. void save_inner_addr(uint8_t addr) {
  134. nvs_set_uint8(addr, NVS_INNER_ADDR);
  135. }
  136. void save_system_setting(const system_setting_t *setting) {
  137. nvs_set_uint8(setting->sound_on_off, NVS_SOUND_ON_OFF_KEY);
  138. nvs_set_uint8(setting->sound_volume, NVS_SOUND_VOLUME_KEY);
  139. nvs_set_uint8(setting->screen_auto_off, NVS_SCREEN_AUTO_OFF_KEY);
  140. nvs_set_uint8(setting->screen_off_minute, NVS_SCREEN_OFF_MINUTE_KEY);
  141. nvs_set_uint8(setting->report_data_duration, NVS_REPORT_DATA_DURATION);
  142. nvs_set_int8(setting->fix_temp, NVS_FIX_TEMP_KEY);
  143. nvs_set_int8(setting->fix_hum, NVS_FIX_HUM_KEY);
  144. nvs_set_uint8(setting->active_fjsq, NVS_ACTIVE_FJSQ_KEY);
  145. nvs_set_uint8(setting->allow_linkage, NVS_ALLOW_LINKAGE_KEY);
  146. lv_timer_set_period(screen_timer, 1000 * 60 * setting->screen_off_minute);
  147. }
  148. static uint8_t set_bits(uint8_t num, uint8_t bit, uint8_t value) {
  149. if (bit > 7)
  150. return num;
  151. if (value)
  152. return num | (1 << bit);
  153. else
  154. return num & ~(1 << bit);
  155. }
  156. static void screen_off_timer_cb(lv_timer_t *timer) {
  157. if (system_setting.screen_auto_off == 0)return;
  158. // 切换到待机画面,不为 OTA时
  159. if (guider_ui.OTAPage == NULL) {
  160. lv_obj_clear_flag(guider_ui.screen_cont_1, LV_OBJ_FLAG_HIDDEN);
  161. }
  162. lcd_st7701_backlight_off();
  163. screen_on_off_status = 0;
  164. nvs_set_uint8(1, NVS_SCREEN_ON_OFF);
  165. lv_timer_pause(screen_timer);
  166. }
  167. bool reset_screen_off() {
  168. if (screen_timer == NULL)return false;
  169. lv_timer_reset(screen_timer);
  170. if (screen_on_off_status == 0) {
  171. lcd_st7701_backlight_on();
  172. nvs_set_uint8(0, NVS_SCREEN_ON_OFF);
  173. screen_on_off_status = 1;
  174. lv_timer_resume(screen_timer);
  175. return true;
  176. }
  177. return false;
  178. }
  179. void screen_off_timer_init(system_setting_t *setting) {
  180. ESP_LOGD(TAG, "screen_off_timer_init");
  181. screen_timer = lv_timer_create(screen_off_timer_cb, 1000 * 60 * setting->screen_off_minute, NULL);
  182. }