diff --git a/main/display.c b/main/display.c index 1efdd94..bc91ff3 100644 --- a/main/display.c +++ b/main/display.c @@ -26,11 +26,17 @@ static const char * TAG = "display"; +static esp_lcd_panel_handle_t panel_handle = NULL; +static bool display_state_on = false; + static lv_theme_t theme; static lv_style_t scr_style; extern const lv_font_t lv_font_portfolio_6x8; +esp_err_t display_on(void); +esp_err_t display_off(void); + static void theme_apply(lv_theme_t *theme, lv_obj_t *obj) { if (lv_obj_get_parent(obj) == NULL) { lv_obj_add_style(obj, &scr_style, LV_PART_MAIN); @@ -61,7 +67,6 @@ esp_err_t display_init(void * pvParameters) ESP_RETURN_ON_ERROR(esp_lcd_new_panel_io_i2c(i2c_master_bus_handle, &io_config, &io_handle), TAG, "Failed to initialise i2c panel bus"); ESP_LOGI(TAG, "Install SSD1306 panel driver"); - esp_lcd_panel_handle_t panel_handle = NULL; esp_lcd_panel_dev_config_t panel_config = { .bits_per_pixel = 1, .reset_gpio_num = -1, @@ -123,7 +128,10 @@ esp_err_t display_init(void * pvParameters) } // Only turn on the screen when it has been cleared - ESP_RETURN_ON_ERROR(esp_lcd_panel_disp_on_off(panel_handle, true), TAG, "Panel display on failed"); + esp_err_t esp_err = display_on(); + if (ESP_OK != esp_err) { + return esp_err; + } GLOBAL_STATE->SYSTEM_MODULE.is_screen_active = true; } else { @@ -132,3 +140,22 @@ esp_err_t display_init(void * pvParameters) return ESP_OK; } + +esp_err_t display_on(void) +{ + if (!display_state_on && (NULL != panel_handle)) { + ESP_RETURN_ON_ERROR(esp_lcd_panel_disp_on_off(panel_handle, true), TAG, "Panel display on failed"); + display_state_on = true; + } + + return ESP_OK; +} +esp_err_t display_off(void) +{ + if (display_state_on && (NULL != panel_handle)) { + ESP_RETURN_ON_ERROR(esp_lcd_panel_disp_on_off(panel_handle, false), TAG, "Panel display off failed"); + display_state_on = false; + } + + return ESP_OK; +} diff --git a/main/display.h b/main/display.h index 9cdc5e9..79656ad 100644 --- a/main/display.h +++ b/main/display.h @@ -2,5 +2,7 @@ #define DISPLAY_H_ esp_err_t display_init(void * pvParameters); +esp_err_t display_on(void); +esp_err_t display_off(void); #endif /* DISPLAY_H_ */ diff --git a/main/http_server/axe-os/src/app/components/edit/edit.component.html b/main/http_server/axe-os/src/app/components/edit/edit.component.html index 75c394d..ae6e01d 100644 --- a/main/http_server/axe-os/src/app/components/edit/edit.component.html +++ b/main/http_server/axe-os/src/app/components/edit/edit.component.html @@ -49,6 +49,15 @@ +
+ +
+ + +
+
+
valueint); } + if ((item = cJSON_GetObjectItem(root, "displayTimeout")) != NULL) { + nvs_config_set_u16(NVS_CONFIG_DISPLAY_TIMEOUT, item->valueint); + } if ((item = cJSON_GetObjectItem(root, "invertfanpolarity")) != NULL) { nvs_config_set_u16(NVS_CONFIG_INVERT_FAN_POLARITY, item->valueint); } @@ -595,6 +598,7 @@ static esp_err_t GET_system_info(httpd_req_t * req) cJSON_AddNumberToObject(root, "overheat_mode", nvs_config_get_u16(NVS_CONFIG_OVERHEAT_MODE, 0)); cJSON_AddNumberToObject(root, "overclockEnabled", nvs_config_get_u16(NVS_CONFIG_OVERCLOCK_ENABLED, 0)); cJSON_AddNumberToObject(root, "invertscreen", nvs_config_get_u16(NVS_CONFIG_INVERT_SCREEN, 0)); + cJSON_AddNumberToObject(root, "displayTimeout", nvs_config_get_u16(NVS_CONFIG_DISPLAY_TIMEOUT, 0)); cJSON_AddNumberToObject(root, "invertfanpolarity", nvs_config_get_u16(NVS_CONFIG_INVERT_FAN_POLARITY, 1)); cJSON_AddNumberToObject(root, "autofanspeed", nvs_config_get_u16(NVS_CONFIG_AUTO_FAN_SPEED, 1)); diff --git a/main/nvs_config.h b/main/nvs_config.h index 50e0497..e8a2e93 100644 --- a/main/nvs_config.h +++ b/main/nvs_config.h @@ -23,6 +23,7 @@ #define NVS_CONFIG_BOARD_VERSION "boardversion" #define NVS_CONFIG_FLIP_SCREEN "flipscreen" #define NVS_CONFIG_INVERT_SCREEN "invertscreen" +#define NVS_CONFIG_DISPLAY_TIMEOUT "displayTimeout" #define NVS_CONFIG_INVERT_FAN_POLARITY "invertfanpol" #define NVS_CONFIG_AUTO_FAN_SPEED "autofanspeed" #define NVS_CONFIG_FAN_SPEED "fanspeed" diff --git a/main/screen.c b/main/screen.c index af20621..718b211 100644 --- a/main/screen.c +++ b/main/screen.c @@ -6,6 +6,8 @@ #include "esp_lvgl_port.h" #include "global_state.h" #include "screen.h" +#include "nvs_config.h" +#include "display.h" // static const char * TAG = "screen"; @@ -227,6 +229,10 @@ static lv_obj_t * create_scr_stats() { static void screen_show(screen_t screen) { + if (SCR_CAROUSEL_START > current_screen) { + lv_display_trigger_activity(NULL); + } + if (current_screen != screen) { lv_obj_t * scr = screens[screen]; @@ -347,6 +353,7 @@ static void screen_update_cb(lv_timer_t * timer) lv_label_set_text_fmt(difficulty_label, "Best: %s !!! BLOCK FOUND !!!", module->best_session_diff_string); screen_show(SCR_STATS); + lv_display_trigger_activity(NULL); } else { if (current_difficulty != module->best_session_nonce_diff) { lv_label_set_text_fmt(difficulty_label, "Best: %s/%s", module->best_session_diff_string, module->best_diff_string); @@ -362,6 +369,15 @@ static void screen_update_cb(lv_timer_t * timer) current_difficulty = module->best_session_nonce_diff; current_chip_temp = power_management->chip_temp_avg; + const uint32_t display_inactive_time = lv_display_get_inactive_time(NULL); + const uint16_t display_timeout_config = nvs_config_get_u16(NVS_CONFIG_DISPLAY_TIMEOUT, 0) * 60 * 1000; + + if ((0 != display_timeout_config) && (display_inactive_time > display_timeout_config)) { + display_off(); + } else { + display_on(); + } + if (CAROUSEL_DELAY_COUNT > current_screen_counter || found_block) { return; }