summaryrefslogtreecommitdiff
path: root/src/components/timer/TimerController.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/components/timer/TimerController.cpp')
-rw-r--r--src/components/timer/TimerController.cpp54
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);
}
+