From 8daddf87782c1228a44528da6f67d8dfce3edb40 Mon Sep 17 00:00:00 2001 From: mark9064 <30447455+mark9064@users.noreply.github.com> Date: Wed, 18 Jun 2025 14:09:57 +0100 Subject: Background heartrate measurement Co-Authored-By: Patric Gruber --- src/heartratetask/HeartRateTask.h | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) (limited to 'src/heartratetask/HeartRateTask.h') diff --git a/src/heartratetask/HeartRateTask.h b/src/heartratetask/HeartRateTask.h index 5bbfb9fb..9478d0d4 100644 --- a/src/heartratetask/HeartRateTask.h +++ b/src/heartratetask/HeartRateTask.h @@ -1,8 +1,11 @@ #pragma once #include +#include +#include #include #include #include +#include "components/settings/Settings.h" namespace Pinetime { namespace Drivers { @@ -16,26 +19,37 @@ namespace Pinetime { namespace Applications { class HeartRateTask { public: - enum class Messages : uint8_t { GoToSleep, WakeUp, StartMeasurement, StopMeasurement }; - enum class States { Idle, Running }; + enum class Messages : uint8_t { GoToSleep, WakeUp, Enable, Disable }; - explicit HeartRateTask(Drivers::Hrs3300& heartRateSensor, Controllers::HeartRateController& controller); + explicit HeartRateTask(Drivers::Hrs3300& heartRateSensor, + Controllers::HeartRateController& controller, + Controllers::Settings& settings); void Start(); void Work(); void PushMessage(Messages msg); private: + enum class States : uint8_t { Disabled, Waiting, BackgroundMeasuring, ForegroundMeasuring }; static void Process(void* instance); + void HandleSensorData(); void StartMeasurement(); void StopMeasurement(); + [[nodiscard]] bool BackgroundMeasurementNeeded() const; + [[nodiscard]] std::optional BackgroundMeasurementInterval() const; + [[nodiscard]] TickType_t CurrentTaskDelay() const; + TaskHandle_t taskHandle; QueueHandle_t messageQueue; - States state = States::Running; + bool valueCurrentlyShown; + bool measurementSucceeded; + States state = States::Disabled; Drivers::Hrs3300& heartRateSensor; Controllers::HeartRateController& controller; + Controllers::Settings& settings; Controllers::Ppg ppg; - bool measurementStarted = false; + TickType_t lastMeasurementTime; + TickType_t measurementStartTime; }; } -- cgit v1.2.3-70-g09d2