diff options
Diffstat (limited to 'src/components/timer')
| -rw-r--r-- | src/components/timer/TimerController.cpp | 32 | ||||
| -rw-r--r-- | src/components/timer/TimerController.h | 19 |
2 files changed, 26 insertions, 25 deletions
diff --git a/src/components/timer/TimerController.cpp b/src/components/timer/TimerController.cpp index 115aa27..35e3512 100644 --- a/src/components/timer/TimerController.cpp +++ b/src/components/timer/TimerController.cpp @@ -8,7 +8,6 @@ using namespace Pinetime::Controllers; - namespace { void TimerEnd(TimerHandle_t xTimer) { auto controller = static_cast<Pinetime::Controllers::TimerController*>(pvTimerGetTimerID(xTimer)); @@ -16,7 +15,6 @@ namespace { } } - void TimerController::Init() { timerAppTimer = xTimerCreate("timerAppTm", 1, pdFALSE, this, TimerEnd); } @@ -29,37 +27,37 @@ void TimerController::StartTimer(uint32_t duration) { xTimerStart(timerAppTimer, 0); endTicks = currentTicks + durationTicks; timerRunning = true; + overtime = false; } -uint32_t TimerController::GetTimeRemaining() { +int32_t TimerController::GetSecondsRemaining() { if (!timerRunning) { return 0; } auto currentTicks = xTaskGetTickCount(); - - TickType_t deltaTicks = 0; - if (currentTicks > endTicks) { - deltaTicks = 0xffffffff - currentTicks; - deltaTicks += (endTicks + 1); - } else { - deltaTicks = endTicks - currentTicks; - } - - return (static_cast<TickType_t>(deltaTicks) / static_cast<TickType_t>(configTICK_RATE_HZ)) * 1000; + + int32_t deltaTicks = static_cast<int32_t>(endTicks) - static_cast<int32_t>(currentTicks); + + return (deltaTicks / static_cast<int32_t>(configTICK_RATE_HZ)); } void TimerController::StopTimer() { xTimerStop(timerAppTimer, 0); timerRunning = false; + overtime = false; } -bool TimerController::IsRunning() { - return timerRunning; +void TimerController::StopAlerting() { + if (systemTask != nullptr) { + systemTask->PushMessage(System::Messages::StopRinging); + } } + void TimerController::OnTimerEnd() { - timerRunning = false; - if(systemTask != nullptr) + overtime = true; + if (systemTask != nullptr) { systemTask->PushMessage(System::Messages::OnTimerDone); + } } void TimerController::Register(Pinetime::System::SystemTask* systemTask) { diff --git a/src/components/timer/TimerController.h b/src/components/timer/TimerController.h index e44d3d9..8542987 100644 --- a/src/components/timer/TimerController.h +++ b/src/components/timer/TimerController.h @@ -11,20 +11,22 @@ namespace Pinetime { class SystemTask; } namespace Controllers { - + class TimerController { public: TimerController() = default; - + void Init(); - void StartTimer(uint32_t duration); - void StopTimer(); - - uint32_t GetTimeRemaining(); - - bool IsRunning(); + void StopAlerting(); + int32_t GetSecondsRemaining(); + bool IsOvertime() { + return overtime; + } + bool IsRunning() { + return timerRunning; + } void OnTimerEnd(); @@ -35,6 +37,7 @@ namespace Pinetime { TimerHandle_t timerAppTimer; TickType_t endTicks; bool timerRunning = false; + bool overtime = false; }; } }
\ No newline at end of file |
