diff --git a/src/components/timer/TimerController.cpp b/src/components/timer/TimerController.cpp index ea945213..5e7f1eed 100644 --- a/src/components/timer/TimerController.cpp +++ b/src/components/timer/TimerController.cpp @@ -13,17 +13,17 @@ void TimerController::Init(Pinetime::System::SystemTask* systemTask) { timer = xTimerCreate("Timer", 1, pdFALSE, this, TimerCallback); } -void TimerController::StartTimer(uint32_t duration) { - xTimerChangePeriod(timer, pdMS_TO_TICKS(duration), 0); +void TimerController::StartTimer(std::chrono::milliseconds duration) { + xTimerChangePeriod(timer, pdMS_TO_TICKS(duration.count()), 0); xTimerStart(timer, 0); } -uint32_t TimerController::GetTimeRemaining() { +std::chrono::milliseconds TimerController::GetTimeRemaining() { if (IsRunning()) { TickType_t remainingTime = xTimerGetExpiryTime(timer) - xTaskGetTickCount(); - return (remainingTime * 1000 / configTICK_RATE_HZ); + return std::chrono::milliseconds(remainingTime * 1000 / configTICK_RATE_HZ); } - return 0; + return std::chrono::milliseconds(0); } void TimerController::StopTimer() { diff --git a/src/components/timer/TimerController.h b/src/components/timer/TimerController.h index 20f07e82..1c2e44b6 100644 --- a/src/components/timer/TimerController.h +++ b/src/components/timer/TimerController.h @@ -3,6 +3,8 @@ #include #include +#include + namespace Pinetime { namespace System { class SystemTask; @@ -16,11 +18,11 @@ namespace Pinetime { void Init(System::SystemTask* systemTask); - void StartTimer(uint32_t duration); + void StartTimer(std::chrono::milliseconds duration); void StopTimer(); - uint32_t GetTimeRemaining(); + std::chrono::milliseconds GetTimeRemaining(); bool IsRunning(); diff --git a/src/displayapp/screens/Timer.cpp b/src/displayapp/screens/Timer.cpp index 136d6b52..9d5b2fa9 100644 --- a/src/displayapp/screens/Timer.cpp +++ b/src/displayapp/screens/Timer.cpp @@ -104,9 +104,9 @@ void Timer::UpdateMask() { void Timer::Refresh() { if (timerController.IsRunning()) { - uint32_t seconds = timerController.GetTimeRemaining() / 1000; - minuteCounter.SetValue(seconds / 60); - secondCounter.SetValue(seconds % 60); + auto secondsRemaining = std::chrono::duration_cast(timerController.GetTimeRemaining()); + minuteCounter.SetValue(secondsRemaining.count() / 60); + secondCounter.SetValue(secondsRemaining.count() % 60); } else if (buttonPressing && xTaskGetTickCount() > pressTime + pdMS_TO_TICKS(150)) { lv_label_set_text_static(txtPlayPause, "Reset"); maskPosition += 15; @@ -133,13 +133,14 @@ void Timer::SetTimerStopped() { void Timer::ToggleRunning() { if (timerController.IsRunning()) { - uint32_t seconds = timerController.GetTimeRemaining() / 1000; - minuteCounter.SetValue(seconds / 60); - secondCounter.SetValue(seconds % 60); + auto secondsRemaining = std::chrono::duration_cast(timerController.GetTimeRemaining()); + minuteCounter.SetValue(secondsRemaining.count() / 60); + secondCounter.SetValue(secondsRemaining.count() % 60); timerController.StopTimer(); SetTimerStopped(); } else if (secondCounter.GetValue() + minuteCounter.GetValue() > 0) { - timerController.StartTimer((secondCounter.GetValue() + minuteCounter.GetValue() * 60) * 1000); + auto timerDuration = std::chrono::minutes(minuteCounter.GetValue()) + std::chrono::seconds(secondCounter.GetValue()); + timerController.StartTimer(timerDuration); Refresh(); SetTimerRunning(); }