diff options
| author | Michele Bini <michele.bini@gmail.com> | 2022-04-10 02:40:16 (GMT) |
|---|---|---|
| committer | Michele Bini <michele.bini@gmail.com> | 2022-04-10 02:40:16 (GMT) |
| commit | 9e5866fab5a7fc108f8d15265a69a681b2359d7c (patch) | |
| tree | 4b8ffa230bc4df64ed97d06fa0b21445a0976053 /src/components/timer/TimerController.cpp | |
| parent | 42d0d1ad338c55ca44f7f4cbb880c40e293b0d5c (diff) | |
Integrate hatmajster's timer code
Diffstat (limited to 'src/components/timer/TimerController.cpp')
| -rw-r--r-- | src/components/timer/TimerController.cpp | 36 |
1 files changed, 17 insertions, 19 deletions
diff --git a/src/components/timer/TimerController.cpp b/src/components/timer/TimerController.cpp index 79e44d6..d6f8ffd 100644 --- a/src/components/timer/TimerController.cpp +++ b/src/components/timer/TimerController.cpp @@ -9,18 +9,16 @@ 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) + auto* controller = static_cast<Pinetime::Controllers::TimerController*>(p_context); + if (controller != nullptr) controller->OnTimerEnd(); } } - void TimerController::Init() { app_timer_create(&timerAppTimer, APP_TIMER_MODE_SINGLE_SHOT, TimerEnd); } @@ -31,37 +29,37 @@ void TimerController::StartTimer(uint32_t duration) { app_timer_start(timerAppTimer, APP_TIMER_TICKS(duration), this); endTicks = currentTicks + APP_TIMER_TICKS(duration); 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() { app_timer_stop(timerAppTimer); 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) { |
