Refactor into defined states
This commit is contained in:
parent
97ba39988b
commit
f032847ae1
6 changed files with 52 additions and 38 deletions
|
|
@ -17,6 +17,7 @@ namespace Pinetime {
|
|||
HandleButtonEvent,
|
||||
HandleButtonTimerEvent,
|
||||
OnDisplayTaskSleeping,
|
||||
OnDisplayTaskAOD,
|
||||
EnableSleeping,
|
||||
DisableSleeping,
|
||||
OnNewDay,
|
||||
|
|
|
|||
|
|
@ -284,9 +284,10 @@ void SystemTask::Work() {
|
|||
HandleButtonAction(action);
|
||||
} break;
|
||||
case Messages::OnDisplayTaskSleeping:
|
||||
case Messages::OnDisplayTaskAOD:
|
||||
// The state was set to GoingToSleep when GoToSleep() was called
|
||||
// If the state is no longer GoingToSleep, we have since transitioned back to Running
|
||||
// In this case absorb the OnDisplayTaskSleeping
|
||||
// In this case absorb the OnDisplayTaskSleeping/AOD
|
||||
// as DisplayApp is about to receive GoToRunning
|
||||
if (state != SystemTaskState::GoingToSleep) {
|
||||
break;
|
||||
|
|
@ -298,7 +299,7 @@ void SystemTask::Work() {
|
|||
}
|
||||
|
||||
// Must keep SPI awake when still updating the display for always on
|
||||
if (!settingsController.GetAlwaysOnDisplay()) {
|
||||
if (msg == Messages::OnDisplayTaskSleeping) {
|
||||
spi.Sleep();
|
||||
}
|
||||
|
||||
|
|
@ -307,7 +308,11 @@ void SystemTask::Work() {
|
|||
touchPanel.Sleep();
|
||||
}
|
||||
|
||||
state = SystemTaskState::Sleeping;
|
||||
if (msg == Messages::OnDisplayTaskSleeping) {
|
||||
state = SystemTaskState::Sleeping;
|
||||
} else {
|
||||
state = SystemTaskState::AODSleeping;
|
||||
}
|
||||
break;
|
||||
case Messages::OnNewDay:
|
||||
// We might be sleeping (with TWI device disabled.
|
||||
|
|
@ -381,8 +386,8 @@ void SystemTask::GoToRunning() {
|
|||
if (state == SystemTaskState::Running) {
|
||||
return;
|
||||
}
|
||||
// SPI doesn't go to sleep for always on mode
|
||||
if (!settingsController.GetAlwaysOnDisplay()) {
|
||||
// SPI only switched off when entering Sleeping, not AOD or GoingToSleep
|
||||
if (state == SystemTaskState::Sleeping) {
|
||||
spi.Wakeup();
|
||||
}
|
||||
|
||||
|
|
@ -411,16 +416,22 @@ void SystemTask::GoToSleep() {
|
|||
return;
|
||||
}
|
||||
NRF_LOG_INFO("[systemtask] Going to sleep");
|
||||
displayApp.PushMessage(Pinetime::Applications::Display::Messages::GoToSleep);
|
||||
if (settingsController.GetAlwaysOnDisplay()) {
|
||||
displayApp.PushMessage(Pinetime::Applications::Display::Messages::GoToAOD);
|
||||
} else {
|
||||
displayApp.PushMessage(Pinetime::Applications::Display::Messages::GoToSleep);
|
||||
}
|
||||
heartRateApp.PushMessage(Pinetime::Applications::HeartRateTask::Messages::GoToSleep);
|
||||
|
||||
state = SystemTaskState::GoingToSleep;
|
||||
};
|
||||
|
||||
void SystemTask::UpdateMotion() {
|
||||
if (IsSleeping() && !(settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::RaiseWrist) ||
|
||||
settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::Shake) ||
|
||||
motionController.GetService()->IsMotionNotificationSubscribed())) {
|
||||
// Only consider disabling motion updates specifically in the Sleeping state
|
||||
// AOD needs motion on to show up to date step counts
|
||||
if (state == SystemTaskState::Sleeping && !(settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::RaiseWrist) ||
|
||||
settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::Shake) ||
|
||||
motionController.GetService()->IsMotionNotificationSubscribed())) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -52,7 +52,7 @@ namespace Pinetime {
|
|||
namespace System {
|
||||
class SystemTask {
|
||||
public:
|
||||
enum class SystemTaskState { Sleeping, Running, GoingToSleep };
|
||||
enum class SystemTaskState { Sleeping, Running, GoingToSleep, AODSleeping };
|
||||
SystemTask(Drivers::SpiMaster& spi,
|
||||
Pinetime::Drivers::SpiNorFlash& spiNorFlash,
|
||||
Drivers::TwiMaster& twiMaster,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue