summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/components/alarm/AlarmController.cpp21
1 files changed, 14 insertions, 7 deletions
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 <chrono>
+#include <ratio>
+#include <cstdint>
+
+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<std::chrono::milliseconds>(alarmTime - now).count();
- xTimerChangePeriod(alarmTimer, APP_TIMER_TICKS(mSecToAlarm), 0);
+ auto ticksToAlarm = std::chrono::duration_cast<ticks_t>(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<std::chrono::milliseconds>(alarmTime - now).count();
- xTimerChangePeriod(alarmTimer, APP_TIMER_TICKS(mSecToAlarm), 0);
+ auto ticksToAlarm = std::chrono::duration_cast<ticks_t>(alarmTime - now).count();
+ xTimerChangePeriod(alarmTimer, ticksToAlarm, 0);
xTimerStart(alarmTimer, 0);
state = AlarmState::Set;