diff options
Diffstat (limited to 'src/SystemTask/SystemTask.cpp')
-rw-r--r-- | src/SystemTask/SystemTask.cpp | 44 |
1 files changed, 28 insertions, 16 deletions
diff --git a/src/SystemTask/SystemTask.cpp b/src/SystemTask/SystemTask.cpp index b515d1ab..222829d4 100644 --- a/src/SystemTask/SystemTask.cpp +++ b/src/SystemTask/SystemTask.cpp @@ -105,22 +105,33 @@ void SystemTask::Work() { Messages message = static_cast<Messages >(msg); switch(message) { case Messages::GoToRunning: - isSleeping = false; + spi.Wakeup(); + twiMaster.Wakeup(); + + spiNorFlash.Wakeup(); + lcd.Wakeup(); + touchPanel.Wakeup(); + + displayApp->PushMessage(Applications::DisplayApp::Messages::GoToRunning); + displayApp->PushMessage(Applications::DisplayApp::Messages::UpdateBatteryLevel); + xTimerStart(idleTimer, 0); nimbleController.StartAdvertising(); + isSleeping = false; + isWakingUp = false; break; case Messages::GoToSleep: + isGoingToSleep = true; NRF_LOG_INFO("[SystemTask] Going to sleep"); xTimerStop(idleTimer, 0); displayApp->PushMessage(Pinetime::Applications::DisplayApp::Messages::GoToSleep); - isSleeping = true; break; case Messages::OnNewTime: ReloadIdleTimer(); displayApp->PushMessage(Pinetime::Applications::DisplayApp::Messages::UpdateDateTime); break; case Messages::OnNewNotification: - if(isSleeping) GoToRunning(); + if(isSleeping && !isWakingUp) GoToRunning(); displayApp->PushMessage(Pinetime::Applications::DisplayApp::Messages::NewNotification); break; case Messages::BleConnected: @@ -130,7 +141,7 @@ void SystemTask::Work() { break; case Messages::BleFirmwareUpdateStarted: doNotGoToSleep = true; - if(isSleeping) GoToRunning(); + if(isSleeping && !isWakingUp) GoToRunning(); displayApp->PushMessage(Pinetime::Applications::DisplayApp::Messages::BleFirmwareUpdateStarted); break; case Messages::BleFirmwareUpdateFinished: @@ -152,6 +163,8 @@ void SystemTask::Work() { spi.Sleep(); twiMaster.Sleep(); + isSleeping = true; + isGoingToSleep = false; break; default: break; } @@ -180,31 +193,27 @@ void SystemTask::Work() { } void SystemTask::OnButtonPushed() { + if(isGoingToSleep) return; if(!isSleeping) { NRF_LOG_INFO("[SystemTask] Button pushed"); PushMessage(Messages::OnButtonEvent); displayApp->PushMessage(Pinetime::Applications::DisplayApp::Messages::ButtonPushed); } else { - NRF_LOG_INFO("[SystemTask] Button pushed, waking up"); - GoToRunning(); + if(!isWakingUp) { + NRF_LOG_INFO("[SystemTask] Button pushed, waking up"); + GoToRunning(); + } } } void SystemTask::GoToRunning() { + isWakingUp = true; PushMessage(Messages::GoToRunning); - spi.Wakeup(); - twiMaster.Wakeup(); - - spiNorFlash.Wakeup(); - lcd.Wakeup(); - touchPanel.Wakeup(); - - displayApp->PushMessage(Applications::DisplayApp::Messages::GoToRunning); - displayApp->PushMessage(Applications::DisplayApp::Messages::UpdateBatteryLevel); } void SystemTask::OnTouchEvent() { + if(isGoingToSleep) return ; NRF_LOG_INFO("[SystemTask] Touch event"); if(!isSleeping) { PushMessage(Messages::OnTouchEvent); @@ -213,6 +222,9 @@ void SystemTask::OnTouchEvent() { } void SystemTask::PushMessage(SystemTask::Messages msg) { + if(msg == Messages::GoToSleep) { + isGoingToSleep = true; + } BaseType_t xHigherPriorityTaskWoken; xHigherPriorityTaskWoken = pdFALSE; xQueueSendFromISR(systemTaksMsgQueue, &msg, &xHigherPriorityTaskWoken); @@ -229,6 +241,6 @@ void SystemTask::OnIdle() { } void SystemTask::ReloadIdleTimer() const { - if(isSleeping) return; + if(isSleeping || isGoingToSleep) return; xTimerReset(idleTimer, 0); } |