diff options
| author | Michele Bini <michele.bini@gmail.com> | 2022-04-16 14:04:52 (GMT) |
|---|---|---|
| committer | Michele Bini <michele.bini@gmail.com> | 2022-04-16 14:04:52 (GMT) |
| commit | 9311f4787551373406a66d726de2a5fdae6cfb99 (patch) | |
| tree | 56a782d733dee81ee1e45eb62148b846ce79b742 /src | |
| parent | 9f682f4132a71ca1fef0b567b1334031df382abb (diff) | |
Differentiate time adjustment (< 3h for example time zone change when crossing a border or because of daylight saving) and time setting (for example when the firmware is booted for the first time and the companion app sends the time)
Diffstat (limited to 'src')
| -rw-r--r-- | src/components/datetime/DateTimeController.cpp | 13 | ||||
| -rw-r--r-- | src/systemtask/Messages.h | 1 | ||||
| -rw-r--r-- | src/systemtask/SystemTask.cpp | 7 |
3 files changed, 19 insertions, 2 deletions
diff --git a/src/components/datetime/DateTimeController.cpp b/src/components/datetime/DateTimeController.cpp index 01e2859..76407f0 100644 --- a/src/components/datetime/DateTimeController.cpp +++ b/src/components/datetime/DateTimeController.cpp @@ -30,6 +30,7 @@ void DateTime::SetTime( /* .tm_year = */ year - 1900, }; tm.tm_isdst = -1; // Use DST value from local time zone + auto previousDateTime = currentDateTime; currentDateTime = std::chrono::time_point_cast<std::chrono::seconds>(std::chrono::system_clock::from_time_t(std::mktime(&tm))); NRF_LOG_INFO("%d %d %d ", day, month, year); @@ -40,7 +41,17 @@ void DateTime::SetTime( NRF_LOG_INFO("* %d %d %d ", this->hour, this->minute, this->second); NRF_LOG_INFO("* %d %d %d ", this->day, ((int)this->month), this->year); - systemTask->PushMessage(System::Messages::OnNewTime); + decltype(currentDateTime - previousDateTime) timeDifference; + + if (currentDateTime > previousDateTime) { + timeDifference = currentDateTime - previousDateTime; + } else { + timeDifference = previousDateTime - currentDateTime; + } + + using namespace std::chrono_literals; + + systemTask->PushMessage(timeDifference < 3h ? System::Messages::OnAdjustTime : System::Messages::OnNewTime); } void DateTime::UpdateTime(uint32_t systickCounter) { diff --git a/src/systemtask/Messages.h b/src/systemtask/Messages.h index 86e26c1..95fca52 100644 --- a/src/systemtask/Messages.h +++ b/src/systemtask/Messages.h @@ -7,6 +7,7 @@ namespace Pinetime { GoToRunning, TouchWakeUp, OnNewTime, + OnAdjustTime, OnNewNotification, OnTimerDone, OnNewCall, diff --git a/src/systemtask/SystemTask.cpp b/src/systemtask/SystemTask.cpp index 2f9c4f0..4765b93 100644 --- a/src/systemtask/SystemTask.cpp +++ b/src/systemtask/SystemTask.cpp @@ -291,9 +291,14 @@ void SystemTask::Work() { heartRateApp.PushMessage(Pinetime::Applications::HeartRateTask::Messages::GoToSleep); break; case Messages::OnNewTime: + case Messages::OnAdjustTime: ReloadIdleTimer(); displayApp.PushMessage(Pinetime::Applications::Display::Messages::UpdateDateTime); - alarmController.RescheduleAlarm(); + if (message == Messages::OnAdjustTime) { + alarmController.RescheduleAlarm(); + } else { + alarmController.ScheduleAlarm(); + } break; case Messages::OnNewNotification: if (settingsController.GetNotificationStatus() == Pinetime::Controllers::Settings::Notification::ON) { |
