aboutsummaryrefslogtreecommitdiffstats
path: root/src/components/stopwatch/StopWatchController.h
diff options
context:
space:
mode:
authorJan Hustak <coding@journey.sk>2024-10-20 12:01:36 +0200
committerJF <JF002@users.noreply.github.com>2025-11-04 21:25:31 +0100
commitdb5d4704cc4a7361c80d1eab199af268364545c7 (patch)
tree060efe2965b0984637fc8054353c1dcea5ffb622 /src/components/stopwatch/StopWatchController.h
parent74cf69bb6716657575f52e0e207ff123c6e01575 (diff)
StopWatch: add persistence
# Conflicts: # src/displayapp/screens/StopWatch.h
Diffstat (limited to 'src/components/stopwatch/StopWatchController.h')
-rw-r--r--src/components/stopwatch/StopWatchController.h66
1 files changed, 66 insertions, 0 deletions
diff --git a/src/components/stopwatch/StopWatchController.h b/src/components/stopwatch/StopWatchController.h
new file mode 100644
index 00000000..0aaeb5ca
--- /dev/null
+++ b/src/components/stopwatch/StopWatchController.h
@@ -0,0 +1,66 @@
+#pragma once
+
+#include <FreeRTOS.h>
+#include <timers.h>
+
+#define LAP_CAPACITY 2
+
+namespace Pinetime {
+ namespace System {
+ class SystemTask;
+ }
+ namespace Controllers {
+
+ enum class StopWatchStates { Cleared, Running, Paused };
+
+ struct LapInfo {
+ int count = 0; // Used to label the lap
+ TickType_t time = 0; // Delta time from beginning of stopwatch
+ };
+
+ class StopWatchController {
+ public:
+ StopWatchController();
+
+ // StopWatch functionality and data
+ void Start();
+ void Pause();
+ void Clear();
+
+ TickType_t GetElapsedTime();
+
+ // Lap functionality
+
+ /// Only the latest laps are stored, the lap count is saved until reset
+ void PushLap();
+
+ /// Returns actual count of stored laps
+ int GetLapNum();
+
+ /// Returns lapCount
+ int GetLapCount();
+
+ /// Indexes into lap history, with 0 being the latest lap.
+ /// If the lap is unavailable, count and time will be 0. If there is a
+ /// real value, count should be above 0
+ LapInfo* LastLap(int lap = 0);
+
+ bool IsRunning();
+ bool IsCleared();
+ bool IsPaused();
+
+ private:
+ // Current state of stopwatch
+ StopWatchStates currentState = StopWatchStates::Cleared;
+ // Start time of current duration
+ TickType_t startTime = 0;
+ // How much time was elapsed before current duration
+ TickType_t timeElapsedPreviously = 0;
+ // Stores lap times
+ LapInfo laps[LAP_CAPACITY];
+ LapInfo emptyLapInfo = {.count = 0, .time = 0};
+ int lapCount = 0;
+ int lapHead = 0;
+ };
+ }
+}