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.cpp32
1 files changed, 23 insertions, 9 deletions
diff --git a/src/components/timer/TimerController.cpp b/src/components/timer/TimerController.cpp
index eeee61f..55b7d56 100644
--- a/src/components/timer/TimerController.cpp
+++ b/src/components/timer/TimerController.cpp
@@ -3,9 +3,11 @@
using namespace Pinetime::Controllers;
-void TimerCallback(TimerHandle_t xTimer) {
- auto* controller = static_cast<TimerController*>(pvTimerGetTimerID(xTimer));
- controller->OnTimerEnd();
+namespace {
+ void TimerCallback(TimerHandle_t xTimer) {
+ auto* controller = static_cast<TimerController*>(pvTimerGetTimerID(xTimer));
+ controller->OnTimerEnd();
+ }
}
void TimerController::Init(Pinetime::System::SystemTask* systemTask) {
@@ -16,25 +18,37 @@ void TimerController::Init(Pinetime::System::SystemTask* systemTask) {
void TimerController::StartTimer(uint32_t duration) {
xTimerChangePeriod(timer, pdMS_TO_TICKS(duration), 0);
xTimerStart(timer, 0);
+ timerRunning = true;
+ overtime = false;
}
-uint32_t TimerController::GetTimeRemaining() {
+int32_t TimerController::GetSecondsRemaining() {
if (IsRunning()) {
- TickType_t remainingTime = xTimerGetExpiryTime(timer) - xTaskGetTickCount();
- return (remainingTime * 1000 / configTICK_RATE_HZ);
+ int32_t remainingTime = xTimerGetExpiryTime(timer) - xTaskGetTickCount();
+ return remainingTime / configTICK_RATE_HZ;
}
return 0;
}
void TimerController::StopTimer() {
xTimerStop(timer, 0);
+ timerRunning = false;
+ if (overtime) {
+ StopAlerting();
+ overtime = false;
+ }
}
-bool TimerController::IsRunning() {
- return (xTimerIsTimerActive(timer) == pdTRUE);
+void TimerController::StopAlerting() {
+ if (systemTask != nullptr) {
+ systemTask->PushMessage(System::Messages::StopRinging);
+ }
}
void TimerController::OnTimerEnd() {
- systemTask->PushMessage(System::Messages::OnTimerDone);
+ overtime = true;
+ if (systemTask != nullptr) {
+ systemTask->PushMessage(System::Messages::OnTimerDone);
+ }
}