diff options
| author | Jan Hustak <coding@journey.sk> | 2024-10-20 12:01:36 +0200 |
|---|---|---|
| committer | JF <JF002@users.noreply.github.com> | 2025-11-04 21:25:31 +0100 |
| commit | db5d4704cc4a7361c80d1eab199af268364545c7 (patch) | |
| tree | 060efe2965b0984637fc8054353c1dcea5ffb622 /src/components/stopwatch/StopWatchController.h | |
| parent | 74cf69bb6716657575f52e0e207ff123c6e01575 (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.h | 66 |
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; + }; + } +} |
