diff options
author | Riku Isokoski <riksu9000@gmail.com> | 2021-07-17 11:59:19 +0300 |
---|---|---|
committer | Riku Isokoski <riksu9000@gmail.com> | 2022-04-25 15:52:39 +0300 |
commit | b7b1af1c4c3c21f62bf9627d39a37924be541c16 (patch) | |
tree | b52cc00572142a0a868da0e4a239e392b22cdf13 /src/components | |
parent | 2e42b9000904fe56e2f8cff238a4d911f7648520 (diff) |
Replace app_timer with FreeRTOS timers
Diffstat (limited to 'src/components')
-rw-r--r-- | src/components/timer/TimerController.cpp | 62 | ||||
-rw-r--r-- | src/components/timer/TimerController.h | 26 |
2 files changed, 27 insertions, 61 deletions
diff --git a/src/components/timer/TimerController.cpp b/src/components/timer/TimerController.cpp index 79e44d6f..92f4e69f 100644 --- a/src/components/timer/TimerController.cpp +++ b/src/components/timer/TimerController.cpp @@ -1,69 +1,39 @@ -// -// Created by florian on 16.05.21. -// - #include "components/timer/TimerController.h" #include "systemtask/SystemTask.h" -#include "app_timer.h" -#include "task.h" using namespace Pinetime::Controllers; - -APP_TIMER_DEF(timerAppTimer); - -namespace { - void TimerEnd(void* p_context) { - auto* controller = static_cast<Pinetime::Controllers::TimerController*> (p_context); - if(controller != nullptr) - controller->OnTimerEnd(); - } +void TimerCallback(TimerHandle_t xTimer) { + auto* controller = static_cast<TimerController*>(pvTimerGetTimerID(xTimer)); + controller->OnTimerEnd(); } - -void TimerController::Init() { - app_timer_create(&timerAppTimer, APP_TIMER_MODE_SINGLE_SHOT, TimerEnd); +void TimerController::Init(Pinetime::System::SystemTask* systemTask) { + this->systemTask = systemTask; + timer = xTimerCreate("Timer", 0, pdFALSE, this, TimerCallback); } void TimerController::StartTimer(uint32_t duration) { - app_timer_stop(timerAppTimer); - auto currentTicks = xTaskGetTickCount(); - app_timer_start(timerAppTimer, APP_TIMER_TICKS(duration), this); - endTicks = currentTicks + APP_TIMER_TICKS(duration); - timerRunning = true; + xTimerChangePeriod(timer, pdMS_TO_TICKS(duration), 0); + xTimerStart(timer, 0); } uint32_t TimerController::GetTimeRemaining() { - if (!timerRunning) { - return 0; + if (IsRunning()) { + TickType_t remainingTime = xTimerGetExpiryTime(timer) - xTaskGetTickCount(); + return (remainingTime * 1000 / configTICK_RATE_HZ); } - 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; + return 0; } void TimerController::StopTimer() { - app_timer_stop(timerAppTimer); - timerRunning = false; + xTimerStop(timer, 0); } bool TimerController::IsRunning() { - return timerRunning; -} -void TimerController::OnTimerEnd() { - timerRunning = false; - if(systemTask != nullptr) - systemTask->PushMessage(System::Messages::OnTimerDone); + return (xTimerIsTimerActive(timer) == pdTRUE); } -void TimerController::Register(Pinetime::System::SystemTask* systemTask) { - this->systemTask = systemTask; +void TimerController::OnTimerEnd() { + systemTask->PushMessage(System::Messages::OnTimerDone); } diff --git a/src/components/timer/TimerController.h b/src/components/timer/TimerController.h index fa7bc90d..93d8afc6 100644 --- a/src/components/timer/TimerController.h +++ b/src/components/timer/TimerController.h @@ -1,37 +1,33 @@ #pragma once -#include <cstdint> -#include "app_timer.h" -#include "portmacro_cmsis.h" +#include <FreeRTOS.h> +#include <timers.h> namespace Pinetime { namespace System { class SystemTask; } namespace Controllers { - + class TimerController { public: TimerController() = default; - - void Init(); - + + void Init(System::SystemTask* systemTask); + void StartTimer(uint32_t duration); - + void StopTimer(); - + uint32_t GetTimeRemaining(); - + bool IsRunning(); void OnTimerEnd(); - void Register(System::SystemTask* systemTask); - private: System::SystemTask* systemTask = nullptr; - TickType_t endTicks; - bool timerRunning = false; + TimerHandle_t timer; }; } -}
\ No newline at end of file +} |