Simplify systemtask states
This commit is contained in:
		
							parent
							
								
									beddfc346d
								
							
						
					
					
						commit
						ae2b9d30d6
					
				| @ -258,8 +258,7 @@ void SystemTask::Work() { | ||||
|             nimbleController.RestartFastAdv(); | ||||
|           } | ||||
| 
 | ||||
|           isSleeping = false; | ||||
|           isWakingUp = false; | ||||
|           state = Running; | ||||
|           isDimmed = false; | ||||
|           break; | ||||
|         case Messages::TouchWakeUp: { | ||||
| @ -278,7 +277,7 @@ void SystemTask::Work() { | ||||
|           if (doNotGoToSleep) { | ||||
|             break; | ||||
|           } | ||||
|           isGoingToSleep = true; | ||||
|           state = GoingToSleep; // Already set in PushMessage()
 | ||||
|           NRF_LOG_INFO("[systemtask] Going to sleep"); | ||||
|           xTimerStop(idleTimer, 0); | ||||
|           xTimerStop(dimTimer, 0); | ||||
| @ -294,7 +293,7 @@ void SystemTask::Work() { | ||||
|           break; | ||||
|         case Messages::OnNewNotification: | ||||
|           if (settingsController.GetNotificationStatus() == Pinetime::Controllers::Settings::Notification::ON) { | ||||
|             if (isSleeping && !isWakingUp) { | ||||
|             if (state == Sleeping) { | ||||
|               GoToRunning(); | ||||
|             } else { | ||||
|               ReloadIdleTimer(); | ||||
| @ -303,14 +302,14 @@ void SystemTask::Work() { | ||||
|           } | ||||
|           break; | ||||
|         case Messages::OnTimerDone: | ||||
|           if (isSleeping && !isWakingUp) { | ||||
|           if (state == Sleeping) { | ||||
|             GoToRunning(); | ||||
|           } | ||||
|           motorController.RunForDuration(35); | ||||
|           displayApp.PushMessage(Pinetime::Applications::Display::Messages::TimerDone); | ||||
|           break; | ||||
|         case Messages::SetOffAlarm: | ||||
|           if (isSleeping && !isWakingUp) { | ||||
|           if (state == Sleeping) { | ||||
|             GoToRunning(); | ||||
|           } | ||||
|           motorController.StartRinging(); | ||||
| @ -326,7 +325,7 @@ void SystemTask::Work() { | ||||
|           break; | ||||
|         case Messages::BleFirmwareUpdateStarted: | ||||
|           doNotGoToSleep = true; | ||||
|           if (isSleeping && !isWakingUp) { | ||||
|           if (state == Sleeping) { | ||||
|             GoToRunning(); | ||||
|           } | ||||
|           displayApp.PushMessage(Pinetime::Applications::Display::Messages::BleFirmwareUpdateStarted); | ||||
| @ -341,8 +340,9 @@ void SystemTask::Work() { | ||||
|         case Messages::StartFileTransfer: | ||||
|           NRF_LOG_INFO("[systemtask] FS Started"); | ||||
|           doNotGoToSleep = true; | ||||
|           if (isSleeping && !isWakingUp) | ||||
|           if (state == Sleeping) { | ||||
|             GoToRunning(); | ||||
|           } | ||||
|           // TODO add intent of fs access icon or something
 | ||||
|           break; | ||||
|         case Messages::StopFileTransfer: | ||||
| @ -391,8 +391,7 @@ void SystemTask::Work() { | ||||
|             touchPanel.Sleep(); | ||||
|           } | ||||
| 
 | ||||
|           isSleeping = true; | ||||
|           isGoingToSleep = false; | ||||
|           state = Sleeping; | ||||
|           break; | ||||
|         case Messages::OnNewDay: | ||||
|           // We might be sleeping (with TWI device disabled.
 | ||||
| @ -401,8 +400,9 @@ void SystemTask::Work() { | ||||
|           break; | ||||
|         case Messages::OnNewHour: | ||||
|           using Pinetime::Controllers::AlarmController; | ||||
|           if (settingsController.GetChimeOption() == Controllers::Settings::ChimesOption::Hours && alarmController.State() != AlarmController::AlarmState::Alerting) { | ||||
|             if (isSleeping && !isWakingUp) { | ||||
|           if (settingsController.GetChimeOption() == Controllers::Settings::ChimesOption::Hours && | ||||
|               alarmController.State() != AlarmController::AlarmState::Alerting) { | ||||
|             if (state == Sleeping) { | ||||
|               GoToRunning(); | ||||
|               displayApp.PushMessage(Pinetime::Applications::Display::Messages::Clock); | ||||
|             } | ||||
| @ -411,8 +411,9 @@ void SystemTask::Work() { | ||||
|           break; | ||||
|         case Messages::OnNewHalfHour: | ||||
|           using Pinetime::Controllers::AlarmController; | ||||
|           if (settingsController.GetChimeOption() == Controllers::Settings::ChimesOption::HalfHours && alarmController.State() != AlarmController::AlarmState::Alerting) { | ||||
|             if (isSleeping && !isWakingUp) { | ||||
|           if (settingsController.GetChimeOption() == Controllers::Settings::ChimesOption::HalfHours && | ||||
|               alarmController.State() != AlarmController::AlarmState::Alerting) { | ||||
|             if (state == Sleeping) { | ||||
|               GoToRunning(); | ||||
|               displayApp.PushMessage(Pinetime::Applications::Display::Messages::Clock); | ||||
|             } | ||||
| @ -423,7 +424,7 @@ void SystemTask::Work() { | ||||
|           batteryController.ReadPowerState(); | ||||
|           motorController.RunForDuration(15); | ||||
|           ReloadIdleTimer(); | ||||
|           if (isSleeping && !isWakingUp) { | ||||
|           if (state == Sleeping) { | ||||
|             GoToRunning(); | ||||
|           } | ||||
|           break; | ||||
| @ -434,7 +435,7 @@ void SystemTask::Work() { | ||||
|           nimbleController.NotifyBatteryLevel(batteryController.PercentRemaining()); | ||||
|           break; | ||||
|         case Messages::OnPairing: | ||||
|           if (isSleeping && !isWakingUp) { | ||||
|           if (state == Sleeping) { | ||||
|             GoToRunning(); | ||||
|           } | ||||
|           motorController.RunForDuration(35); | ||||
| @ -475,14 +476,15 @@ void SystemTask::Work() { | ||||
| } | ||||
| 
 | ||||
| void SystemTask::UpdateMotion() { | ||||
|   if (isGoingToSleep or isWakingUp) { | ||||
|   if (state == GoingToSleep || state == WakingUp) { | ||||
|     return; | ||||
|   } | ||||
| 
 | ||||
|   if (isSleeping && !(settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::RaiseWrist) || | ||||
|                       settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::Shake))) { | ||||
|   if (state == Sleeping && !(settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::RaiseWrist) || | ||||
|                              settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::Shake))) { | ||||
|     return; | ||||
|   } | ||||
| 
 | ||||
|   if (stepCounterMustBeReset) { | ||||
|     motionSensor.ResetStepCounter(); | ||||
|     stepCounterMustBeReset = false; | ||||
| @ -494,7 +496,7 @@ void SystemTask::UpdateMotion() { | ||||
|   motionController.Update(motionValues.x, motionValues.y, motionValues.z, motionValues.steps); | ||||
| 
 | ||||
|   if (settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::RaiseWrist) && | ||||
|       motionController.Should_RaiseWake(isSleeping)) { | ||||
|       motionController.Should_RaiseWake(state == Sleeping)) { | ||||
|     GoToRunning(); | ||||
|   } | ||||
|   if (settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::Shake) && | ||||
| @ -515,7 +517,7 @@ void SystemTask::HandleButtonAction(Controllers::ButtonActions action) { | ||||
|   switch (action) { | ||||
|     case Actions::Click: | ||||
|       // If the first action after fast wakeup is a click, it should be ignored.
 | ||||
|       if (!fastWakeUpDone && !isGoingToSleep) { | ||||
|       if (!fastWakeUpDone && state != GoingToSleep) { | ||||
|         displayApp.PushMessage(Applications::Display::Messages::ButtonPushed); | ||||
|       } | ||||
|       break; | ||||
| @ -536,20 +538,16 @@ void SystemTask::HandleButtonAction(Controllers::ButtonActions action) { | ||||
| } | ||||
| 
 | ||||
| void SystemTask::GoToRunning() { | ||||
|   if (isGoingToSleep or (not isSleeping) or isWakingUp) { | ||||
|     return; | ||||
|   if (state == Sleeping) { | ||||
|     state = WakingUp; | ||||
|     PushMessage(Messages::GoToRunning); | ||||
|   } | ||||
|   isWakingUp = true; | ||||
|   PushMessage(Messages::GoToRunning); | ||||
| } | ||||
| 
 | ||||
| void SystemTask::OnTouchEvent() { | ||||
|   if (isGoingToSleep) { | ||||
|     return; | ||||
|   } | ||||
|   if (!isSleeping) { | ||||
|   if (state == Running) { | ||||
|     PushMessage(Messages::OnTouchEvent); | ||||
|   } else if (!isWakingUp) { | ||||
|   } else if (state == Sleeping) { | ||||
|     if (settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::SingleTap) or | ||||
|         settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::DoubleTap)) { | ||||
|       PushMessage(Messages::TouchWakeUp); | ||||
| @ -559,7 +557,7 @@ void SystemTask::OnTouchEvent() { | ||||
| 
 | ||||
| void SystemTask::PushMessage(System::Messages msg) { | ||||
|   if (msg == Messages::GoToSleep && !doNotGoToSleep) { | ||||
|     isGoingToSleep = true; | ||||
|     state = GoingToSleep; | ||||
|   } | ||||
| 
 | ||||
|   if (in_isr()) { | ||||
| @ -594,7 +592,7 @@ void SystemTask::OnIdle() { | ||||
| } | ||||
| 
 | ||||
| void SystemTask::ReloadIdleTimer() { | ||||
|   if (isSleeping || isGoingToSleep) { | ||||
|   if (state != Running) { | ||||
|     return; | ||||
|   } | ||||
|   if (isDimmed) { | ||||
|  | ||||
| @ -53,6 +53,7 @@ namespace Pinetime { | ||||
|   namespace System { | ||||
|     class SystemTask { | ||||
|     public: | ||||
|       enum SystemTaskState { Sleeping, Running, GoingToSleep, WakingUp }; | ||||
|       SystemTask(Drivers::SpiMaster& spi, | ||||
|                  Drivers::St7789& lcd, | ||||
|                  Pinetime::Drivers::SpiNorFlash& spiNorFlash, | ||||
| @ -91,7 +92,7 @@ namespace Pinetime { | ||||
|       }; | ||||
| 
 | ||||
|       bool IsSleeping() const { | ||||
|         return isSleeping; | ||||
|         return state == Sleeping || state == WakingUp; | ||||
|       } | ||||
| 
 | ||||
|     private: | ||||
| @ -110,10 +111,6 @@ namespace Pinetime { | ||||
|       Pinetime::Controllers::TimerController& timerController; | ||||
|       Pinetime::Controllers::AlarmController& alarmController; | ||||
|       QueueHandle_t systemTasksMsgQueue; | ||||
|       std::atomic<bool> isSleeping {false}; | ||||
|       std::atomic<bool> isGoingToSleep {false}; | ||||
|       std::atomic<bool> isWakingUp {false}; | ||||
|       std::atomic<bool> isDimmed {false}; | ||||
|       Pinetime::Drivers::Watchdog& watchdog; | ||||
|       Pinetime::Controllers::NotificationManager& notificationManager; | ||||
|       Pinetime::Controllers::MotorController& motorController; | ||||
| @ -139,6 +136,8 @@ namespace Pinetime { | ||||
|       TimerHandle_t idleTimer; | ||||
|       TimerHandle_t measureBatteryTimer; | ||||
|       bool doNotGoToSleep = false; | ||||
|       bool isDimmed = false; | ||||
|       SystemTaskState state = Running; | ||||
| 
 | ||||
|       void HandleButtonAction(Controllers::ButtonActions action); | ||||
|       bool fastWakeUpDone = false; | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user