From 8432cbe8f8ac3dd269ce8dfb94d3fecb4f4592d3 Mon Sep 17 00:00:00 2001 From: FintasticMan Date: Thu, 3 Oct 2024 00:08:46 +0200 Subject: [PATCH 1/3] datetime: Set the default year to the year during compile --- .../datetime/DateTimeController.cpp | 20 +++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/src/components/datetime/DateTimeController.cpp b/src/components/datetime/DateTimeController.cpp index 7f58c9b3..102a4bce 100644 --- a/src/components/datetime/DateTimeController.cpp +++ b/src/components/datetime/DateTimeController.cpp @@ -7,16 +7,28 @@ using namespace Pinetime::Controllers; namespace { - char const* DaysStringShort[] = {"--", "MON", "TUE", "WED", "THU", "FRI", "SAT", "SUN"}; - char const* DaysStringShortLow[] = {"--", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"}; - char const* MonthsString[] = {"--", "JAN", "FEB", "MAR", "APR", "MAY", "JUN", "JUL", "AUG", "SEP", "OCT", "NOV", "DEC"}; - char const* MonthsStringLow[] = {"--", "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"}; + constexpr const char* const DaysStringShort[] = {"--", "MON", "TUE", "WED", "THU", "FRI", "SAT", "SUN"}; + constexpr const char* const DaysStringShortLow[] = {"--", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"}; + constexpr const char* const MonthsString[] = {"--", "JAN", "FEB", "MAR", "APR", "MAY", "JUN", "JUL", "AUG", "SEP", "OCT", "NOV", "DEC"}; + constexpr const char* const MonthsStringLow[] = + {"--", "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"}; + + constexpr int compileTimeAtoi(const char* str) { + int result = 0; + while (*str >= '0' && *str <= '9') { + result = result * 10 + *str - '0'; + str++; + } + return result; + } } DateTime::DateTime(Controllers::Settings& settingsController) : settingsController {settingsController} { mutex = xSemaphoreCreateMutex(); ASSERT(mutex != nullptr); xSemaphoreGive(mutex); + + SetTime(compileTimeAtoi(&__DATE__[7]), 0, 0, 0, 0, 0); } void DateTime::SetCurrentTime(std::chrono::time_point t) { From f6592efbe92137c330d879f9efb53719f4f828cc Mon Sep 17 00:00:00 2001 From: FintasticMan Date: Sun, 6 Oct 2024 01:56:57 +0200 Subject: [PATCH 2/3] datetime: Add comment explaining what the offset means --- src/components/datetime/DateTimeController.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/components/datetime/DateTimeController.cpp b/src/components/datetime/DateTimeController.cpp index 102a4bce..29183391 100644 --- a/src/components/datetime/DateTimeController.cpp +++ b/src/components/datetime/DateTimeController.cpp @@ -28,6 +28,7 @@ DateTime::DateTime(Controllers::Settings& settingsController) : settingsControll ASSERT(mutex != nullptr); xSemaphoreGive(mutex); + // __DATE__ is a string of the format "MMM DD YYYY", so an offset of 7 gives the start of the year SetTime(compileTimeAtoi(&__DATE__[7]), 0, 0, 0, 0, 0); } From 3882f48876894838c0ebc8f9cb3824e93f5467c7 Mon Sep 17 00:00:00 2001 From: FintasticMan Date: Mon, 7 Oct 2024 09:58:30 +0200 Subject: [PATCH 3/3] datetime: Fix null pointer dereference --- src/components/datetime/DateTimeController.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/components/datetime/DateTimeController.cpp b/src/components/datetime/DateTimeController.cpp index 29183391..7304dfd1 100644 --- a/src/components/datetime/DateTimeController.cpp +++ b/src/components/datetime/DateTimeController.cpp @@ -59,7 +59,9 @@ void DateTime::SetTime(uint16_t year, uint8_t month, uint8_t day, uint8_t hour, UpdateTime(previousSystickCounter, true); xSemaphoreGive(mutex); - systemTask->PushMessage(System::Messages::OnNewTime); + if (systemTask) { + systemTask->PushMessage(System::Messages::OnNewTime); + } } void DateTime::SetTimeZone(int8_t timezone, int8_t dst) {