|
|
|
@ -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) ||
|
|
|
|
|
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;
|
|
|
|
|
}
|
|
|
|
|
isWakingUp = true;
|
|
|
|
|
if (state == Sleeping) {
|
|
|
|
|
state = WakingUp;
|
|
|
|
|
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) {
|
|
|
|
|