diff options
Diffstat (limited to 'src/components/timer/TimerController.cpp')
| -rw-r--r-- | src/components/timer/TimerController.cpp | 54 |
1 files changed, 16 insertions, 38 deletions
diff --git a/src/components/timer/TimerController.cpp b/src/components/timer/TimerController.cpp index 31635a5..eeee61f 100644 --- a/src/components/timer/TimerController.cpp +++ b/src/components/timer/TimerController.cpp @@ -1,62 +1,40 @@ -// -// Created by florian on 16.05.21. -// - #include "components/timer/TimerController.h" #include "systemtask/SystemTask.h" -#include "task.h" using namespace Pinetime::Controllers; -namespace { - void TimerEnd(TimerHandle_t xTimer) { - auto controller = static_cast<Pinetime::Controllers::TimerController*>(pvTimerGetTimerID(xTimer)); - controller->OnTimerEnd(); - } +void TimerCallback(TimerHandle_t xTimer) { + auto* controller = static_cast<TimerController*>(pvTimerGetTimerID(xTimer)); + controller->OnTimerEnd(); } -void TimerController::Init(System::SystemTask* systemTask) { +void TimerController::Init(Pinetime::System::SystemTask* systemTask) { this->systemTask = systemTask; - timerAppTimer = xTimerCreate("timerAppTm", 1, pdFALSE, this, TimerEnd); + timer = xTimerCreate("Timer", 1, pdFALSE, this, TimerCallback); } void TimerController::StartTimer(uint32_t duration) { - xTimerStop(timerAppTimer, 0); - auto currentTicks = xTaskGetTickCount(); - TickType_t durationTicks = APP_TIMER_TICKS(duration); - xTimerChangePeriod(timerAppTimer, durationTicks, 0); - xTimerStart(timerAppTimer, 0); - endTicks = currentTicks + durationTicks; - timerRunning = true; + xTimerChangePeriod(timer, pdMS_TO_TICKS(duration), 0); + xTimerStart(timer, 0); } uint32_t TimerController::GetTimeRemaining() { - if (!timerRunning) { - return 0; - } - auto currentTicks = xTaskGetTickCount(); - - TickType_t deltaTicks = 0; - if (currentTicks > endTicks) { - deltaTicks = 0xffffffff - currentTicks; - deltaTicks += (endTicks + 1); - } else { - deltaTicks = endTicks - currentTicks; + if (IsRunning()) { + TickType_t remainingTime = xTimerGetExpiryTime(timer) - xTaskGetTickCount(); + return (remainingTime * 1000 / configTICK_RATE_HZ); } - - return (static_cast<TickType_t>(deltaTicks) / static_cast<TickType_t>(configTICK_RATE_HZ)) * 1000; + return 0; } void TimerController::StopTimer() { - xTimerStop(timerAppTimer, 0); - timerRunning = false; + xTimerStop(timer, 0); } bool TimerController::IsRunning() { - return timerRunning; + return (xTimerIsTimerActive(timer) == pdTRUE); } + void TimerController::OnTimerEnd() { - timerRunning = false; - if (systemTask != nullptr) - systemTask->PushMessage(System::Messages::OnTimerDone); + systemTask->PushMessage(System::Messages::OnTimerDone); } + |
