From 58f2e4488b182b86fe4e81fc5b762362bf822ff8 Mon Sep 17 00:00:00 2001 From: philippe44 Date: Sun, 17 Sep 2023 20:00:11 -0700 Subject: [PATCH] don't count failed IR as activity --- components/services/buttons.c | 11 ++++++----- components/services/infrared.c | 6 ++++-- components/services/infrared.h | 2 +- components/services/services.c | 4 ++++ 4 files changed, 15 insertions(+), 8 deletions(-) diff --git a/components/services/buttons.c b/components/services/buttons.c index c1a3a734..1c2a406e 100644 --- a/components/services/buttons.c +++ b/components/services/buttons.c @@ -176,13 +176,11 @@ static void buttons_task(void* arg) { while (1) { QueueSetMemberHandle_t xActivatedMember; + bool active = true; // wait on button, rotary and infrared queues if ((xActivatedMember = xQueueSelectFromSet( common_queue_set, portMAX_DELAY )) == NULL) continue; - - // mark the last activity - buttons_idle_since = pdTICKS_TO_MS(xTaskGetTickCount()); - + if (xActivatedMember == button_queue) { struct button_s button; button_event_e event; @@ -236,8 +234,11 @@ static void buttons_task(void* arg) { ROTARY_RIGHT : ROTARY_LEFT, false); } else { // this is IR - infrared_receive(infrared.rb, infrared.handler); + active = infrared_receive(infrared.rb, infrared.handler); } + + // mark the last activity + if (active) buttons_idle_since = pdTICKS_TO_MS(xTaskGetTickCount()); } } diff --git a/components/services/infrared.c b/components/services/infrared.c index c999f660..6ff6f108 100644 --- a/components/services/infrared.c +++ b/components/services/infrared.c @@ -446,14 +446,14 @@ err: /**************************************************************************************** * */ -void infrared_receive(RingbufHandle_t rb, infrared_handler handler) { +bool infrared_receive(RingbufHandle_t rb, infrared_handler handler) { size_t rx_size = 0; rmt_item32_t* item = (rmt_item32_t*) xRingbufferReceive(rb, &rx_size, 10 / portTICK_RATE_MS); + bool decoded = false; if (item) { uint32_t addr, cmd; bool repeat = false; - bool decoded = false; rx_size /= 4; // one RMT = 4 Bytes @@ -474,6 +474,8 @@ void infrared_receive(RingbufHandle_t rb, infrared_handler handler) { // after parsing the data, return spaces to ringbuffer. vRingbufferReturnItem(rb, (void*) item); } + + return decoded; } diff --git a/components/services/infrared.h b/components/services/infrared.h index be3cc489..3dcbf82d 100644 --- a/components/services/infrared.h +++ b/components/services/infrared.h @@ -15,6 +15,6 @@ typedef enum {IR_NEC, IR_RC5} infrared_mode_t; typedef void (*infrared_handler)(uint16_t addr, uint16_t cmd); -void infrared_receive(RingbufHandle_t rb, infrared_handler handler); +bool infrared_receive(RingbufHandle_t rb, infrared_handler handler); void infrared_init(RingbufHandle_t *rb, int gpio, infrared_mode_t mode); diff --git a/components/services/services.c b/components/services/services.c index e3f7ed15..5f87ef18 100644 --- a/components/services/services.c +++ b/components/services/services.c @@ -253,6 +253,10 @@ void services_sleep_activate(sleep_cause_e cause) { // is there just one GPIO if (sleep_context.wake_gpio & (sleep_context.wake_gpio - 1)) { ESP_LOGI(TAG, "going to sleep cause %d, wake-up on multiple GPIO, any '1' wakes up 0x%llx", cause, sleep_context.wake_gpio); +#if defined(CONFIG_IDF_TARGET_ESP32S3) && ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(5, 2, 0) + if (!sleep_context.wake_level) esp_sleep_enable_ext1_wakeup(sleep_context.wake_gpio, ESP_EXT1_WAKEUP_ANY_LOW); + else +#endif esp_sleep_enable_ext1_wakeup(sleep_context.wake_gpio, ESP_EXT1_WAKEUP_ANY_HIGH); } else if (sleep_context.wake_gpio) { int gpio = __builtin_ctz(sleep_context.wake_gpio);