diff --git a/src/systemtask/SystemTask.cpp b/src/systemtask/SystemTask.cpp index fc4e8f7e..58e14ced 100644 --- a/src/systemtask/SystemTask.cpp +++ b/src/systemtask/SystemTask.cpp @@ -186,7 +186,7 @@ void SystemTask::Work() { UpdateMotion(); Messages msg; - if (xQueueReceive(systemTasksMsgQueue, &msg, 100) == pdTRUE) { + if (xQueueReceive(systemTasksMsgQueue, &msg, GetQueueTimeout()) == pdTRUE) { switch (msg) { case Messages::EnableSleeping: wakeLocksHeld--; @@ -499,3 +499,15 @@ 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)) || + settingsController.GetNotificationStatus() == Controllers::Settings::Notification::Sleep)) { + 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 8a4e5954..04f0729c 100644 --- a/src/systemtask/SystemTask.h +++ b/src/systemtask/SystemTask.h @@ -136,6 +136,8 @@ namespace Pinetime { bool stepCounterMustBeReset = false; static constexpr TickType_t batteryMeasurementPeriod = pdMS_TO_TICKS(10 * 60 * 1000); + TickType_t GetQueueTimeout() const; + SystemMonitor monitor; }; }