From 47acab10746e9a63059b68a408e9799ddee49afc Mon Sep 17 00:00:00 2001 From: Michele Bini Date: Tue, 7 Jun 2022 00:32:23 +0200 Subject: use tick-based duration type for computation diff --git a/src/components/alarm/AlarmController.cpp b/src/components/alarm/AlarmController.cpp index fa21879..4131f3f 100644 --- a/src/components/alarm/AlarmController.cpp +++ b/src/components/alarm/AlarmController.cpp @@ -20,6 +20,12 @@ #include "app_timer.h" #include "task.h" #include +#include +#include + +namespace { + typedef std::chrono::duration< int64_t, std::ratio<1, configTICK_RATE_HZ> > ticks_t; +} using namespace Pinetime::Controllers; using namespace std::chrono_literals; @@ -45,17 +51,18 @@ void AlarmController::SetAlarmTime(uint8_t alarmHr, uint8_t alarmMin) { } void AlarmController::OnAdjustTime() { - - if (state != AlarmState::Set) { return; } + if (state != AlarmState::Set) { + return; + } xTimerStop(alarmTimer, 0); auto now = dateTimeController.CurrentDateTime(); - if (now > alarmTime) { + if (now >= alarmTime) { xTimerChangePeriod(alarmTimer, 1, 0); } else { - auto mSecToAlarm = std::chrono::duration_cast(alarmTime - now).count(); - xTimerChangePeriod(alarmTimer, APP_TIMER_TICKS(mSecToAlarm), 0); + auto ticksToAlarm = std::chrono::duration_cast(alarmTime - now).count(); + xTimerChangePeriod(alarmTimer, ++ticksToAlarm, 0); } xTimerStart(alarmTimer, 0); @@ -94,8 +101,8 @@ void AlarmController::ScheduleAlarm() { // now can convert back to a time_point alarmTime = std::chrono::system_clock::from_time_t(std::mktime(tmAlarmTime)); - auto mSecToAlarm = std::chrono::duration_cast(alarmTime - now).count(); - xTimerChangePeriod(alarmTimer, APP_TIMER_TICKS(mSecToAlarm), 0); + auto ticksToAlarm = std::chrono::duration_cast(alarmTime - now).count(); + xTimerChangePeriod(alarmTimer, ticksToAlarm, 0); xTimerStart(alarmTimer, 0); state = AlarmState::Set; -- cgit v0.10.2