aboutsummaryrefslogtreecommitdiffstats
path: root/src/systemtask
diff options
context:
space:
mode:
Diffstat (limited to 'src/systemtask')
-rw-r--r--src/systemtask/SystemTask.cpp16
-rw-r--r--src/systemtask/SystemTask.h4
-rw-r--r--src/systemtask/WakeLock.cpp27
-rw-r--r--src/systemtask/WakeLock.h19
4 files changed, 54 insertions, 12 deletions
diff --git a/src/systemtask/SystemTask.cpp b/src/systemtask/SystemTask.cpp
index 4c623883..e55c9ad8 100644
--- a/src/systemtask/SystemTask.cpp
+++ b/src/systemtask/SystemTask.cpp
@@ -189,15 +189,11 @@ void SystemTask::Work() {
if (xQueueReceive(systemTasksMsgQueue, &msg, 100) == pdTRUE) {
switch (msg) {
case Messages::EnableSleeping:
- // Make sure that exiting an app doesn't enable sleeping,
- // if the exiting was caused by a firmware update
- if (!bleController.IsFirmwareUpdating()) {
- doNotGoToSleep = false;
- }
+ wakeLocksHeld--;
break;
case Messages::DisableSleeping:
GoToRunning();
- doNotGoToSleep = true;
+ wakeLocksHeld++;
break;
case Messages::GoToRunning:
GoToRunning();
@@ -243,24 +239,24 @@ void SystemTask::Work() {
break;
case Messages::BleFirmwareUpdateStarted:
GoToRunning();
- doNotGoToSleep = true;
+ wakeLocksHeld++;
displayApp.PushMessage(Pinetime::Applications::Display::Messages::BleFirmwareUpdateStarted);
break;
case Messages::BleFirmwareUpdateFinished:
if (bleController.State() == Pinetime::Controllers::Ble::FirmwareUpdateStates::Validated) {
NVIC_SystemReset();
}
- doNotGoToSleep = false;
+ wakeLocksHeld--;
break;
case Messages::StartFileTransfer:
NRF_LOG_INFO("[systemtask] FS Started");
GoToRunning();
- doNotGoToSleep = true;
+ wakeLocksHeld++;
// TODO add intent of fs access icon or something
break;
case Messages::StopFileTransfer:
NRF_LOG_INFO("[systemtask] FS Stopped");
- doNotGoToSleep = false;
+ wakeLocksHeld--;
// TODO add intent of fs access icon or something
break;
case Messages::OnTouchEvent:
diff --git a/src/systemtask/SystemTask.h b/src/systemtask/SystemTask.h
index 339587c1..8a4e5954 100644
--- a/src/systemtask/SystemTask.h
+++ b/src/systemtask/SystemTask.h
@@ -80,7 +80,7 @@ namespace Pinetime {
void OnTouchEvent();
bool IsSleepDisabled() {
- return doNotGoToSleep;
+ return wakeLocksHeld > 0;
}
Pinetime::Controllers::NimbleController& nimble() {
@@ -124,7 +124,7 @@ namespace Pinetime {
bool isBleDiscoveryTimerRunning = false;
uint8_t bleDiscoveryTimer = 0;
TimerHandle_t measureBatteryTimer;
- bool doNotGoToSleep = false;
+ uint8_t wakeLocksHeld = 0;
SystemTaskState state = SystemTaskState::Running;
void HandleButtonAction(Controllers::ButtonActions action);
diff --git a/src/systemtask/WakeLock.cpp b/src/systemtask/WakeLock.cpp
new file mode 100644
index 00000000..2953f7ee
--- /dev/null
+++ b/src/systemtask/WakeLock.cpp
@@ -0,0 +1,27 @@
+#include "systemtask/WakeLock.h"
+
+using namespace Pinetime::System;
+
+WakeLock::WakeLock(SystemTask& systemTask) : systemTask {systemTask} {
+ lockHeld = false;
+}
+
+WakeLock::~WakeLock() {
+ Release();
+}
+
+void WakeLock::Lock() {
+ if (lockHeld) {
+ return;
+ }
+ systemTask.PushMessage(Messages::DisableSleeping);
+ lockHeld = true;
+}
+
+void WakeLock::Release() {
+ if (!lockHeld) {
+ return;
+ }
+ systemTask.PushMessage(Messages::EnableSleeping);
+ lockHeld = false;
+}
diff --git a/src/systemtask/WakeLock.h b/src/systemtask/WakeLock.h
new file mode 100644
index 00000000..5424c009
--- /dev/null
+++ b/src/systemtask/WakeLock.h
@@ -0,0 +1,19 @@
+#pragma once
+
+#include "systemtask/SystemTask.h"
+
+namespace Pinetime {
+ namespace System {
+ class WakeLock {
+ public:
+ WakeLock(SystemTask& systemTask);
+ ~WakeLock();
+ void Lock();
+ void Release();
+
+ private:
+ bool lockHeld;
+ SystemTask& systemTask;
+ };
+ }
+}