From 491d3ae20f5d888e8eaa3ff49af1c3cff85c0fe6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-Fran=C3=A7ois=20Milants?= Date: Mon, 8 May 2023 21:07:30 +0200 Subject: [PATCH] Power optimization - Increase SystemTaskPeriod Improve the timeout on the queue : by default, the timeout is 100ms, and it's extended to 4s in sleep mode, when no motion based wake up option is enabled. --- src/systemtask/SystemTask.cpp | 13 ++++++++++++- src/systemtask/SystemTask.h | 2 ++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/systemtask/SystemTask.cpp b/src/systemtask/SystemTask.cpp index f0cc0adc..67b1dbba 100644 --- a/src/systemtask/SystemTask.cpp +++ b/src/systemtask/SystemTask.cpp @@ -181,7 +181,7 @@ void SystemTask::Work() { UpdateMotion(); Messages msg; - if (xQueueReceive(systemTasksMsgQueue, &msg, 4000) == pdTRUE) { + if (xQueueReceive(systemTasksMsgQueue, &msg, GetQueueTimeout()) == pdTRUE) { switch (msg) { case Messages::EnableSleeping: // Make sure that exiting an app doesn't enable sleeping, @@ -504,3 +504,14 @@ void SystemTask::PushMessage(System::Messages msg) { xQueueSend(systemTasksMsgQueue, &msg, portMAX_DELAY); } } + +TickType_t SystemTask::GetQueueTimeout() const { + // By default, the timeout on the queue is 100ms. + // It's extended to 4s in sleep mode, when no motion based wake up option is enabled. + TickType_t timeout = pdMS_TO_TICKS(100); + if (state == SystemTaskState::Sleeping && !settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::RaiseWrist) && + !settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::Shake)) { + timeout = pdMS_TO_TICKS(4000); + } + return timeout; +} \ No newline at end of file diff --git a/src/systemtask/SystemTask.h b/src/systemtask/SystemTask.h index 79f1cf44..de5478f2 100644 --- a/src/systemtask/SystemTask.h +++ b/src/systemtask/SystemTask.h @@ -138,6 +138,8 @@ namespace Pinetime { bool stepCounterMustBeReset = false; static constexpr TickType_t batteryMeasurementPeriod = pdMS_TO_TICKS(10 * 60 * 1000); + TickType_t GetQueueTimeout() const; + SystemMonitor monitor; }; }