From aac809e4787666de36252dbbaedfb1fd115cc3a6 Mon Sep 17 00:00:00 2001 From: fvanroie Date: Tue, 9 Mar 2021 00:25:19 +0100 Subject: [PATCH] Fix wakeup touch --- src/hasp/hasp.cpp | 6 ++++++ src/hasp/hasp.h | 1 + src/hasp/hasp_dispatch.cpp | 21 +++++++++++++++++++-- src/hasp/hasp_dispatch.h | 2 +- src/hasp/hasp_object.cpp | 10 +++++----- 5 files changed, 32 insertions(+), 8 deletions(-) diff --git a/src/hasp/hasp.cpp b/src/hasp/hasp.cpp index 0cc018be..63635ecd 100644 --- a/src/hasp/hasp.cpp +++ b/src/hasp/hasp.cpp @@ -137,6 +137,12 @@ void hasp_enable_wakeup_touch() lv_obj_set_event_cb(lv_disp_get_layer_sys(NULL), wakeup_event_handler); } +void hasp_disable_wakeup_touch() +{ + LOG_VERBOSE(TAG_HASP, F("Wakeup touch disabled")); + lv_obj_set_click(lv_disp_get_layer_sys(NULL), false); // disable first touch +} + /** * Return the sleep times */ diff --git a/src/hasp/hasp.h b/src/hasp/hasp.h index 986eefc8..5b1dc1a5 100644 --- a/src/hasp/hasp.h +++ b/src/hasp/hasp.h @@ -81,6 +81,7 @@ bool hasp_update_sleep_state(); void hasp_get_sleep_time(uint16_t& short_time, uint16_t& long_time); void hasp_set_sleep_time(uint16_t short_time, uint16_t long_time); void hasp_enable_wakeup_touch(); +void hasp_disable_wakeup_touch(); /********************** * MACROS diff --git a/src/hasp/hasp_dispatch.cpp b/src/hasp/hasp_dispatch.cpp index 58d17e0a..ce337b65 100644 --- a/src/hasp/hasp_dispatch.cpp +++ b/src/hasp/hasp_dispatch.cpp @@ -43,7 +43,7 @@ dispatch_conf_t dispatch_setings = {.teleperiod = 10}; uint32_t dispatchLastMillis; uint8_t nCommands = 0; -haspCommand_t commands[17]; +haspCommand_t commands[18]; struct moodlight_t { @@ -952,7 +952,17 @@ void dispatch_moodlight(const char* topic, const char* payload) void dispatch_backlight(const char*, const char* payload) { // Set the current state - if(strlen(payload) != 0) haspDevice.set_backlight_power(Utilities::is_true(payload)); + if(strlen(payload) != 0) { + bool power = Utilities::is_true(payload); + + if(haspDevice.get_backlight_power() != power) { + haspDevice.set_backlight_power(power); + if(power) + hasp_disable_wakeup_touch(); + else + hasp_enable_wakeup_touch(); + } + } // Return the current state char topic[8]; @@ -1067,6 +1077,12 @@ void dispatch_calibrate(const char* topic = NULL, const char* payload = NULL) void dispatch_wakeup(const char*, const char*) { lv_disp_trig_activity(NULL); + hasp_disable_wakeup_touch(); +} + +void dispatch_sleep(const char*, const char*) +{ + hasp_enable_wakeup_touch(); } void dispatch_reboot(const char*, const char*) @@ -1105,6 +1121,7 @@ void dispatchSetup() dispatch_add_command(PSTR("json"), dispatch_parse_json); dispatch_add_command(PSTR("page"), dispatch_page); dispatch_add_command(PSTR("wakeup"), dispatch_wakeup); + dispatch_add_command(PSTR("sleep"), dispatch_sleep); dispatch_add_command(PSTR("statusupdate"), dispatch_output_statusupdate); dispatch_add_command(PSTR("clearpage"), dispatch_clear_page); dispatch_add_command(PSTR("jsonl"), dispatch_parse_jsonl); diff --git a/src/hasp/hasp_dispatch.h b/src/hasp/hasp_dispatch.h index ac0e591b..29b1e3d4 100644 --- a/src/hasp/hasp_dispatch.h +++ b/src/hasp/hasp_dispatch.h @@ -52,7 +52,7 @@ void dispatch_page_next(); void dispatch_page_prev(); void dispatch_dim(const char* level); -void dispatch_backlight(const char* payload); +void dispatch_backlight(const char*, const char* payload); void dispatch_web_update(const char* espOtaUrl); void dispatch_reboot(bool saveConfig); diff --git a/src/hasp/hasp_object.cpp b/src/hasp/hasp_object.cpp index 20350691..690dccbb 100644 --- a/src/hasp/hasp_object.cpp +++ b/src/hasp/hasp_object.cpp @@ -276,12 +276,12 @@ void hasp_send_obj_attribute_color(lv_obj_t* obj, const char* attribute, lv_colo */ void wakeup_event_handler(lv_obj_t* obj, lv_event_t event) { - if(obj == lv_disp_get_layer_sys(NULL)) { + if(event == LV_EVENT_RELEASED && obj == lv_disp_get_layer_sys(NULL)) { hasp_update_sleep_state(); // wakeup? - - if(event == LV_EVENT_CLICKED) { - lv_obj_set_click(obj, false); // disable first touch - LOG_VERBOSE(TAG_HASP, F("Wakeup touch disabled")); + if(!haspDevice.get_backlight_power()) + dispatch_backlight(NULL, "1"); // backlight on and also disable wakeup touch + else { + hasp_disable_wakeup_touch(); // only disable wakeup touch } } }