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;
}