From c82c22650cf7d7a8f31146345b9510cc6eabc5f8 Mon Sep 17 00:00:00 2001 From: Jean-François Milants Date: Sun, 10 Jan 2021 22:02:21 +0100 Subject: HR Sensor : do not go to sleep when the HR app is running. --- src/components/heartrate/HeartRateController.cpp | 15 +++++++++++++-- src/components/heartrate/HeartRateController.h | 6 ++++++ src/systemtask/SystemTask.cpp | 7 +++++++ src/systemtask/SystemTask.h | 3 ++- 4 files changed, 28 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/components/heartrate/HeartRateController.cpp b/src/components/heartrate/HeartRateController.cpp index f296027f..53b34e6c 100644 --- a/src/components/heartrate/HeartRateController.cpp +++ b/src/components/heartrate/HeartRateController.cpp @@ -1,23 +1,34 @@ #include "HeartRateController.h" #include +#include using namespace Pinetime::Controllers; +HeartRateController::HeartRateController(Pinetime::System::SystemTask &systemTask) : systemTask{systemTask} { + +} + + void HeartRateController::Update(HeartRateController::States newState, uint8_t heartRate) { this->state = newState; this->heartRate = heartRate; } void HeartRateController::Start() { - if(task != nullptr) + if(task != nullptr) { task->PushMessage(Pinetime::Applications::HeartRateTask::Messages::StartMeasurement); + systemTask.PushMessage(System::SystemTask::Messages::HeartRateRunning); + } } void HeartRateController::Stop() { - if(task != nullptr) + if(task != nullptr) { task->PushMessage(Pinetime::Applications::HeartRateTask::Messages::StopMeasurement); + systemTask.PushMessage(System::SystemTask::Messages::HeartRateStopped); + } } void HeartRateController::SetHeartRateTask(Pinetime::Applications::HeartRateTask *task) { this->task = task; } + diff --git a/src/components/heartrate/HeartRateController.h b/src/components/heartrate/HeartRateController.h index b4d6c972..b401f76a 100644 --- a/src/components/heartrate/HeartRateController.h +++ b/src/components/heartrate/HeartRateController.h @@ -6,11 +6,16 @@ namespace Pinetime { namespace Applications { class HeartRateTask; } + namespace System { + class SystemTask; + } namespace Controllers { class HeartRateController { public: enum class States { NotEnoughData, NoTouch, Running}; + explicit HeartRateController(System::SystemTask& systemTask); + void Start(); void Stop(); void Update(States newState, uint8_t heartRate); @@ -20,6 +25,7 @@ namespace Pinetime { uint8_t HeartRate() const { return heartRate; } private: + System::SystemTask& systemTask; Applications::HeartRateTask* task = nullptr; States state = States::NotEnoughData; uint8_t heartRate = 0; diff --git a/src/systemtask/SystemTask.cpp b/src/systemtask/SystemTask.cpp index 1d405621..e7551235 100644 --- a/src/systemtask/SystemTask.cpp +++ b/src/systemtask/SystemTask.cpp @@ -44,6 +44,7 @@ SystemTask::SystemTask(Drivers::SpiMaster &spi, Drivers::St7789 &lcd, Pinetime::Drivers::Hrs3300& heartRateSensor) : spi{spi}, lcd{lcd}, spiNorFlash{spiNorFlash}, twiMaster{twiMaster}, touchPanel{touchPanel}, lvgl{lvgl}, batteryController{batteryController}, + heartRateController{*this}, bleController{bleController}, dateTimeController{dateTimeController}, watchdog{}, watchdogView{watchdog}, notificationManager{notificationManager}, nimbleController(*this, bleController,dateTimeController, notificationManager, batteryController, spiNorFlash), @@ -194,6 +195,12 @@ void SystemTask::Work() { isSleeping = true; isGoingToSleep = false; break; + case Messages::HeartRateRunning: + doNotGoToSleep = true; + break; + case Messages::HeartRateStopped: + doNotGoToSleep = false; + break; default: break; } } diff --git a/src/systemtask/SystemTask.h b/src/systemtask/SystemTask.h index b93d0bce..e4eb8d47 100644 --- a/src/systemtask/SystemTask.h +++ b/src/systemtask/SystemTask.h @@ -28,7 +28,8 @@ namespace Pinetime { class SystemTask { public: enum class Messages {GoToSleep, GoToRunning, OnNewTime, OnNewNotification, BleConnected, - BleFirmwareUpdateStarted, BleFirmwareUpdateFinished, OnTouchEvent, OnButtonEvent, OnDisplayTaskSleeping + BleFirmwareUpdateStarted, BleFirmwareUpdateFinished, OnTouchEvent, OnButtonEvent, OnDisplayTaskSleeping, + HeartRateRunning, HeartRateStopped }; SystemTask(Drivers::SpiMaster &spi, Drivers::St7789 &lcd, -- cgit v1.2.3