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