From d9b8c61fb8cb45fa6d33b65283ffe8ecab34aae6 Mon Sep 17 00:00:00 2001 From: Bertrand Lemasle Date: Wed, 21 Nov 2018 21:36:20 +1300 Subject: [PATCH 1/4] Added an abstraction layer to work on RTC lib trim again --- .vscode/c_cpp_properties.json | 43 +++++++++++++++-------------- gpstracker.code-workspace | 9 ++++-- src/Rtc.cpp | 26 +++++++++--------- src/RtcAbstraction.cpp | 43 +++++++++++++++++++++++++++++ src/RtcAbstraction.h | 52 +++++++++++++++++++++++++++++++++++ src/Time2.h | 2 +- 6 files changed, 137 insertions(+), 38 deletions(-) create mode 100644 src/RtcAbstraction.cpp create mode 100644 src/RtcAbstraction.h diff --git a/.vscode/c_cpp_properties.json b/.vscode/c_cpp_properties.json index 230d27d..988dfac 100644 --- a/.vscode/c_cpp_properties.json +++ b/.vscode/c_cpp_properties.json @@ -1,22 +1,23 @@ -{ - "configurations": [ - { - "name": "Win32", - "includePath": [ - "${workspaceFolder}/src/**", - "${workspaceFolder}/../libraries/SIM808", - "${workspaceFolder}/../libraries/uDS3231", - "${workspaceFolder}/../libraries/E24", - "${workspaceFolder}/../libraries/Low-Power", - "${workspaceFolder}/../libraries/ArduinoLog", - "${config:arduino.path}/tools/**", - "${config:arduino.path}/hardware/arduino/avr/**", - "${config:arduino.path}/hardware/tools/avr/avr/include/**" - ], - "intelliSenseMode": "clang-x64", - "cStandard": "c11", - "cppStandard": "c++11" - } - ], - "version": 4 +{ + "configurations": [ + { + "name": "Win32", + "includePath": [ + "${workspaceFolder}/src/**", + "${workspaceFolder}/../libraries/SIM808", + "${workspaceFolder}/../libraries/MD_DS3231", + "${workspaceFolder}/../libraries/uDS3231", + "${workspaceFolder}/../libraries/E24", + "${workspaceFolder}/../libraries/Low-Power", + "${workspaceFolder}/../libraries/ArduinoLog", + "${config:arduino.path}/tools/**", + "${config:arduino.path}/hardware/arduino/avr/**", + "${config:arduino.path}/hardware/tools/avr/avr/include/**" + ], + "intelliSenseMode": "clang-x64", + "cStandard": "c11", + "cppStandard": "c++11" + } + ], + "version": 4 } \ No newline at end of file diff --git a/gpstracker.code-workspace b/gpstracker.code-workspace index 1f9a02e..bdb9aa3 100644 --- a/gpstracker.code-workspace +++ b/gpstracker.code-workspace @@ -6,9 +6,6 @@ { "path": "../libraries/SIM808" }, - { - "path": "../libraries/uDS3231" - }, { "path": "../libraries/E24" }, @@ -17,6 +14,12 @@ }, { "path": "../libraries/ArduinoLog" + }, + { + "path": "C:/Users/bertr/Documents/Projects/Development/Arduino/libraries/MD_DS3231" + }, + { + "path": "C:/Users/bertr/Documents/Projects/Development/Arduino/libraries/uDS3231" } ], "settings": { diff --git a/src/Rtc.cpp b/src/Rtc.cpp index 43e38ff..13d7fc3 100644 --- a/src/Rtc.cpp +++ b/src/Rtc.cpp @@ -4,26 +4,26 @@ #include "Logging.h" #include -#include #define LOGGER_NAME "Rtc" using namespace utils; namespace rtc { + RTC_A_CLASS RTC_A; void setup() { VERBOSE("setup"); hardware::i2c::powerOn(); - RTC.control(DS3231_12H, DS3231_OFF); //24 hours clock - RTC.control(DS3231_A1_INT_ENABLE, DS3231_OFF); //Alarm 1 OFF - RTC.control(DS3231_INT_ENABLE, DS3231_ON); //INTCN ON + RTC_A.control(DS3231_12H, DS3231_OFF); //24 hours clock + RTC_A.control(DS3231_A1_INT_ENABLE, DS3231_OFF); //Alarm 1 OFF + RTC_A.control(DS3231_INT_ENABLE, DS3231_ON); //INTCN ON hardware::i2c::powerOff(); } int16_t getTemperature() { hardware::i2c::powerOn(); - float temperature = RTC.readTempRegister(); + float temperature = RTC_A.readTempRegister(); hardware::i2c::powerOff(); return static_cast(temperature * 100); @@ -31,7 +31,7 @@ namespace rtc { bool isAccurate() { hardware::i2c::powerOn(); - bool accurate = RTC.status(DS3231_HALTED_FLAG) == DS3231_OFF; + bool accurate = RTC_A.status(DS3231_HALTED_FLAG) == DS3231_OFF; hardware::i2c::powerOff(); return accurate; @@ -45,7 +45,7 @@ namespace rtc { void getTime(tmElements_t &time) { hardware::i2c::powerOn(); - RTC.readTime(time); + RTC_A.readTime(time); hardware::i2c::powerOff(); VERBOSE_FORMAT("getTime", "%d/%d/%d %d:%d:%d", tmYearToCalendar(time.Year), time.Month, time.Day, time.Hour, time.Minute, time.Second); @@ -55,8 +55,8 @@ namespace rtc { VERBOSE_FORMAT("setTime", "%d/%d/%d %d:%d:%d", tmYearToCalendar(time.Year), time.Month, time.Day, time.Hour, time.Minute, time.Second); hardware::i2c::powerOn(); - RTC.writeTime(time); - RTC.control(DS3231_HALTED_FLAG, DS3231_OFF); + RTC_A.writeTime(time); + RTC_A.control(DS3231_HALTED_FLAG, DS3231_OFF); hardware::i2c::powerOff(); } @@ -72,11 +72,11 @@ namespace rtc { void setAlarm(const tmElements_t &time) { hardware::i2c::powerOn(); - RTC.writeAlarm1(DS3231_ALM_HMS, time); + RTC_A.writeAlarm1(DS3231_ALM_HMS, time); - RTC.control(DS3231_A1_FLAG, DS3231_OFF); //reset Alarm 1 flag - RTC.control(DS3231_A1_INT_ENABLE, DS3231_ON); //Alarm 1 ON - RTC.control(DS3231_INT_ENABLE, DS3231_ON); //INTCN ON + RTC_A.control(DS3231_A1_FLAG, DS3231_OFF); //reset Alarm 1 flag + RTC_A.control(DS3231_A1_INT_ENABLE, DS3231_ON); //Alarm 1 ON + RTC_A.control(DS3231_INT_ENABLE, DS3231_ON); //INTCN ON NOTICE_FORMAT("setAlarm", "Next alarm : %d:%d:%d", time.Hour, time.Minute, time.Second); diff --git a/src/RtcAbstraction.cpp b/src/RtcAbstraction.cpp new file mode 100644 index 0000000..80afb88 --- /dev/null +++ b/src/RtcAbstraction.cpp @@ -0,0 +1,43 @@ +#include "RtcAbstraction.h" + +void uDS3231_Ext::unpack(tmElements_t &time) { + time.Second = s; + time.Minute = m; + time.Hour = h; + time.Day = dd; + time.Month = mm; + time.Year = yyyy; +} + +void uDS3231_Ext::pack(const tmElements_t &time) { + s = time.Second; + m = time.Minute; + h = time.Hour; + dd = time.Day; + mm = time.Month; + yyyy = time.Year; +} + +boolean uDS3231_Ext::readTime(tmElements_t &time) { + bool result = MD_DS3231::readTime(); + unpack(time); + + return result; +} + +boolean uDS3231_Ext::writeTime(const tmElements_t &time) { + pack(time); + return MD_DS3231::writeTime(); +} + +boolean uDS3231_Ext::readAlarm1(almType_t &almType, tmElements_t &time) { + almType = MD_DS3231::getAlarm1Type(); + bool result = MD_DS3231::readAlarm1(); + + return result; +} + +boolean uDS3231_Ext::writeAlarm1(almType_t almType, const tmElements_t &time) { + pack(time); + return MD_DS3231::writeAlarm1(almType); +} \ No newline at end of file diff --git a/src/RtcAbstraction.h b/src/RtcAbstraction.h new file mode 100644 index 0000000..43e9974 --- /dev/null +++ b/src/RtcAbstraction.h @@ -0,0 +1,52 @@ +#pragma once + +/** + * \def USE_UDS3231 + * When defined, use the modified uDS3231 library instead of + * the stock MD_DS3231 one. + */ +//#define USE_UDS3231 + +#ifdef USE_UDS3231 +#include +#else +#include +#endif + +#ifndef USE_UDS3231 + +//convenience macros to convert to and from tm years +#define tmYearToCalendar(Y) ((Y) + 2000) // full four digit year +#define CalendarYrToTm(Y) ((Y) - 2000) + +typedef unsigned long timestamp_t; + +typedef struct tmElements_t { + uint8_t Second; + uint8_t Minute; + uint8_t Hour; + uint8_t Day; + uint8_t Month; + uint8_t Year; // year from 2000 +}; + +class uDS3231_Ext : public MD_DS3231 +{ +private: + void unpack(tmElements_t &time) + void pack(const tmElements_t &time); +public: + boolean readTime(tmElements_t &time); + boolean writeTime(const tmElements_t &time); + + boolean readAlarm1(almType_t &almType, tmElements_t &time); + boolean writeAlarm1(almType_t almType, const tmElements_t &time); +}; + +#define RTC_A_CLASS uDS3231_Ext + +#else + +#define RTC_A_CLASS uDS3231 + +#endif diff --git a/src/Time2.h b/src/Time2.h index 6f9947a..fa4f1f5 100644 --- a/src/Time2.h +++ b/src/Time2.h @@ -1,7 +1,7 @@ #pragma once #include -#include +#include "RtcAbstraction.h" namespace utils { namespace time { From 5831dca9a290e954a19d2a72cb965b218fa0285f Mon Sep 17 00:00:00 2001 From: Bertrand Lemasle Date: Fri, 23 Nov 2018 18:31:15 +1300 Subject: [PATCH 2/4] Applied changes from uDS3231 rewrite --- src/Core.cpp | 2 +- src/Debug.cpp | 2 +- src/Gps.cpp | 16 ++++---- src/MainUnit.cpp | 2 +- src/Rtc.cpp | 8 ++-- src/RtcAbstraction.cpp | 44 +++++++++++--------- src/RtcAbstraction.h | 83 ++++++++++++++++++------------------- src/Time2.cpp | 92 +++++++++++++++++++++--------------------- 8 files changed, 128 insertions(+), 121 deletions(-) diff --git a/src/Core.cpp b/src/Core.cpp index 965bbde..f67898f 100644 --- a/src/Core.cpp +++ b/src/Core.cpp @@ -139,7 +139,7 @@ namespace core { tmElements_t time; rtc::getTime(time); - currentTime = SLEEP_TIMING_TIME(time.Hour, time.Minute); + currentTime = SLEEP_TIMING_TIME(time.hour, time.minute); } for (uint8_t i = flash::getArraySize(config::defaultSleepTimings); i--;) { diff --git a/src/Debug.cpp b/src/Debug.cpp index 748bb0b..009091a 100644 --- a/src/Debug.cpp +++ b/src/Debug.cpp @@ -197,7 +197,7 @@ namespace debug { tmElements_t time; rtc::getTime(time); - NOTICE_FORMAT("getAndDisplayRtcTime", "%d/%d/%d %d:%d:%d %t %d", tmYearToCalendar(time.Year), time.Month, time.Day, time.Hour, time.Minute, time.Second, rtc::isAccurate(), rtc::getTemperature()); + NOTICE_FORMAT("getAndDisplayRtcTime", "%d/%d/%d %d:%d:%d %t %d", tmYearToCalendar(time.year), time.month, time.day, time.hour, time.minute, time.second, rtc::isAccurate(), rtc::getTemperature()); } void setRtcTime() { diff --git a/src/Gps.cpp b/src/Gps.cpp index 349d794..6902165 100644 --- a/src/Gps.cpp +++ b/src/Gps.cpp @@ -105,13 +105,13 @@ namespace gps { VERBOSE_FORMAT("getTime", "%s", timeStr); - time.Year = CalendarYrToTm(details::parseSubstring(buffer, timeStr + TIME_YEAR_OFFSET, 4)); - time.Month = details::parseSubstring(buffer, timeStr + TIME_MONTH_OFFSET, 2); - time.Day = details::parseSubstring(buffer, timeStr + TIME_DAY_OFFSET, 2); - time.Hour = details::parseSubstring(buffer, timeStr + TIME_HOUR_OFFSET, 2); - time.Minute = details::parseSubstring(buffer, timeStr + TIME_MINUTE_OFFSET, 2); - time.Second = details::parseSubstring(buffer, timeStr + TIME_SECOND_OFFSET, 2); - - NOTICE_FORMAT("getTime", "%d/%d/%d %d:%d:%d", tmYearToCalendar(time.Year), time.Month, time.Day, time.Hour, time.Minute, time.Second); + time.year = calendarYrToTm(details::parseSubstring(buffer, timeStr + TIME_YEAR_OFFSET, 4)); + time.month = details::parseSubstring(buffer, timeStr + TIME_MONTH_OFFSET, 2); + time.day = details::parseSubstring(buffer, timeStr + TIME_DAY_OFFSET, 2); + time.hour = details::parseSubstring(buffer, timeStr + TIME_HOUR_OFFSET, 2); + time.minute = details::parseSubstring(buffer, timeStr + TIME_MINUTE_OFFSET, 2); + time.second = details::parseSubstring(buffer, timeStr + TIME_SECOND_OFFSET, 2); + + NOTICE_FORMAT("getTime", "%d/%d/%d %d:%d:%d", tmYearToCalendar(time.year), time.month, time.day, time.hour, time.minute, time.second); } } \ No newline at end of file diff --git a/src/MainUnit.cpp b/src/MainUnit.cpp index 58fbc51..1455b8d 100644 --- a/src/MainUnit.cpp +++ b/src/MainUnit.cpp @@ -20,7 +20,7 @@ namespace mainunit { void wokeUp() { tmElements_t wokeUpTime; rtc::getTime(wokeUpTime); - VERBOSE_FORMAT("wokeUp", "%d:%d:%d", wokeUpTime.Hour, wokeUpTime.Minute, wokeUpTime.Second); + VERBOSE_FORMAT("wokeUp", "%d:%d:%d", wokeUpTime.hour, wokeUpTime.minute, wokeUpTime.second); hardware::sim808::simSerial.listen(); } diff --git a/src/Rtc.cpp b/src/Rtc.cpp index 13d7fc3..0f9e5d8 100644 --- a/src/Rtc.cpp +++ b/src/Rtc.cpp @@ -48,11 +48,11 @@ namespace rtc { RTC_A.readTime(time); hardware::i2c::powerOff(); - VERBOSE_FORMAT("getTime", "%d/%d/%d %d:%d:%d", tmYearToCalendar(time.Year), time.Month, time.Day, time.Hour, time.Minute, time.Second); + VERBOSE_FORMAT("getTime", "%d/%d/%d %d:%d:%d", tmYearToCalendar(time.year), time.month, time.day, time.hour, time.minute, time.second); } void setTime(const tmElements_t &time) { - VERBOSE_FORMAT("setTime", "%d/%d/%d %d:%d:%d", tmYearToCalendar(time.Year), time.Month, time.Day, time.Hour, time.Minute, time.Second); + VERBOSE_FORMAT("setTime", "%d/%d/%d %d:%d:%d", tmYearToCalendar(time.year), time.month, time.day, time.hour, time.minute, time.second); hardware::i2c::powerOn(); RTC_A.writeTime(time); @@ -72,13 +72,13 @@ namespace rtc { void setAlarm(const tmElements_t &time) { hardware::i2c::powerOn(); - RTC_A.writeAlarm1(DS3231_ALM_HMS, time); + WRITE_ALARM_1(time); RTC_A.control(DS3231_A1_FLAG, DS3231_OFF); //reset Alarm 1 flag RTC_A.control(DS3231_A1_INT_ENABLE, DS3231_ON); //Alarm 1 ON RTC_A.control(DS3231_INT_ENABLE, DS3231_ON); //INTCN ON - NOTICE_FORMAT("setAlarm", "Next alarm : %d:%d:%d", time.Hour, time.Minute, time.Second); + NOTICE_FORMAT("setAlarm", "Next alarm : %d:%d:%d", time.hour, time.minute, time.second); hardware::i2c::powerOff(); } diff --git a/src/RtcAbstraction.cpp b/src/RtcAbstraction.cpp index 80afb88..b7feca7 100644 --- a/src/RtcAbstraction.cpp +++ b/src/RtcAbstraction.cpp @@ -1,43 +1,49 @@ #include "RtcAbstraction.h" -void uDS3231_Ext::unpack(tmElements_t &time) { - time.Second = s; - time.Minute = m; - time.Hour = h; - time.Day = dd; - time.Month = mm; - time.Year = yyyy; +#ifndef USE_UDS3231 +#ifdef STOCK_MD_DS3231 + +void MDS3231_Ext::unpack(tmElements_t &time) { + time.second = s; + time.minute = m; + time.hour = h; + time.day = dd; + time.month = mm; + time.year = yyyy; } -void uDS3231_Ext::pack(const tmElements_t &time) { - s = time.Second; - m = time.Minute; - h = time.Hour; - dd = time.Day; - mm = time.Month; - yyyy = time.Year; +void MDS3231_Ext::pack(const tmElements_t &time) { + s = time.second; + m = time.minute; + h = time.hour; + dd = time.day; + mm = time.month; + yyyy = time.year; } -boolean uDS3231_Ext::readTime(tmElements_t &time) { +boolean MDS3231_Ext::readTime(tmElements_t &time) { bool result = MD_DS3231::readTime(); unpack(time); return result; } -boolean uDS3231_Ext::writeTime(const tmElements_t &time) { +boolean MDS3231_Ext::writeTime(const tmElements_t &time) { pack(time); return MD_DS3231::writeTime(); } -boolean uDS3231_Ext::readAlarm1(almType_t &almType, tmElements_t &time) { +boolean MDS3231_Ext::readAlarm1(alm1Type_t &almType, tmElements_t &time) { almType = MD_DS3231::getAlarm1Type(); bool result = MD_DS3231::readAlarm1(); return result; } -boolean uDS3231_Ext::writeAlarm1(almType_t almType, const tmElements_t &time) { +boolean MDS3231_Ext::writeAlarm1(alm1Type_t almType, const tmElements_t &time) { pack(time); return MD_DS3231::writeAlarm1(almType); -} \ No newline at end of file +} + +#endif +#endif \ No newline at end of file diff --git a/src/RtcAbstraction.h b/src/RtcAbstraction.h index 43e9974..28c9dfb 100644 --- a/src/RtcAbstraction.h +++ b/src/RtcAbstraction.h @@ -5,48 +5,49 @@ * When defined, use the modified uDS3231 library instead of * the stock MD_DS3231 one. */ -//#define USE_UDS3231 +// #define USE_UDS3231 +//#define STOCK_MD_DS3231 #ifdef USE_UDS3231 -#include -#else -#include -#endif - -#ifndef USE_UDS3231 - -//convenience macros to convert to and from tm years -#define tmYearToCalendar(Y) ((Y) + 2000) // full four digit year -#define CalendarYrToTm(Y) ((Y) - 2000) - -typedef unsigned long timestamp_t; - -typedef struct tmElements_t { - uint8_t Second; - uint8_t Minute; - uint8_t Hour; - uint8_t Day; - uint8_t Month; - uint8_t Year; // year from 2000 -}; - -class uDS3231_Ext : public MD_DS3231 -{ -private: - void unpack(tmElements_t &time) - void pack(const tmElements_t &time); -public: - boolean readTime(tmElements_t &time); - boolean writeTime(const tmElements_t &time); - - boolean readAlarm1(almType_t &almType, tmElements_t &time); - boolean writeAlarm1(almType_t almType, const tmElements_t &time); -}; - -#define RTC_A_CLASS uDS3231_Ext + #include + #define RTC_A_CLASS uDS3231 + #define WRITE_ALARM_1(t) RTC_A.writeAlarm1(DS3231_ALM_HMS, t) #else - -#define RTC_A_CLASS uDS3231 - -#endif + #ifdef STOCK_MD_DS3231 + #include + + typedef unsigned long timestamp_t; + + typedef struct tmElements_t { + uint8_t Second; + uint8_t Minute; + uint8_t Hour; + uint8_t Day; + uint8_t month; + uint8_t year; // year from 2000 + }; + + class MD_DS3231_Ext : public MD_DS3231 + { + private: + void unpack(tmElements_t &time); + void pack(const tmElements_t &time); + public: + boolean readTime(tmElements_t &time); + boolean writeTime(const tmElements_t &time); + + boolean readAlarm1(almType_t &almType, tmElements_t &time); + boolean writeAlarm1(almType_t almType, const tmElements_t &time); + }; + + #define RTC_A_CLASS MD_DS3231_Ext + #define WRITE_ALARM_1(t) RTC_A.writeAlarm1(DS3231_ALM_HMS, t) + #else + #include + #define RTC_A_CLASS MD_DS3231 + #define WRITE_ALARM_1(t) RTC_A.writeAlarm1(alm1Type_t::ALM_HMS, t) + + typedef unsigned long timestamp_t; + #endif +#endif \ No newline at end of file diff --git a/src/Time2.cpp b/src/Time2.cpp index fce361c..a150e87 100644 --- a/src/Time2.cpp +++ b/src/Time2.cpp @@ -1,47 +1,47 @@ -#include "Time2.h" - -/*==============================================================================*/ -/* Useful Constants */ -#define SECS_PER_MIN (60UL) -#define SECS_PER_HOUR (3600UL) -#define SECS_PER_DAY (SECS_PER_HOUR * 24UL) -#define DAYS_PER_WEEK (7UL) -#define SECS_PER_WEEK (SECS_PER_DAY * DAYS_PER_WEEK) -#define SECS_PER_YEAR (SECS_PER_WEEK * 52UL) -#define SECS_YR_2000 (946684800UL) // the time at the start of y2k - -/*==============================================================================*/ -/* Utility functions */ - -namespace utils { - namespace time { - - __attribute__((__optimize__("O2"))) - timestamp_t makeTimestamp(const tmElements_t &time) { - timestamp_t timestamp; - - timestamp += (time.Day - 1) * SECS_PER_DAY; - timestamp += time.Hour * SECS_PER_HOUR; - timestamp += time.Minute * SECS_PER_MIN; - timestamp += time.Second; - - return timestamp; - } - - __attribute__((__optimize__("O2"))) - void breakTime(timestamp_t timestamp, tmElements_t &time) { - time.Year = 0; - time.Month = 0; - - time.Day = 0; - time.Second = timestamp % 60; - timestamp /= 60; // now it is minutes - time.Minute = timestamp % 60; - timestamp /= 60; // now it is hours - time.Hour = timestamp % 24; - timestamp /= 24; // now it is days - time.Day = timestamp; //this is purely for indication / computation only as it might get over the number of days in a month - } - - } +#include "Time2.h" + +/*==============================================================================*/ +/* Useful Constants */ +#define SECS_PER_MIN (60UL) +#define SECS_PER_HOUR (3600UL) +#define SECS_PER_DAY (SECS_PER_HOUR * 24UL) +#define DAYS_PER_WEEK (7UL) +#define SECS_PER_WEEK (SECS_PER_DAY * DAYS_PER_WEEK) +#define SECS_PER_YEAR (SECS_PER_WEEK * 52UL) +#define SECS_YR_2000 (946684800UL) // the time at the start of y2k + +/*==============================================================================*/ +/* Utility functions */ + +namespace utils { + namespace time { + + __attribute__((__optimize__("O2"))) + timestamp_t makeTimestamp(const tmElements_t &time) { + timestamp_t timestamp; + + timestamp += (time.day - 1) * SECS_PER_DAY; + timestamp += time.hour * SECS_PER_HOUR; + timestamp += time.minute * SECS_PER_MIN; + timestamp += time.second; + + return timestamp; + } + + __attribute__((__optimize__("O2"))) + void breakTime(timestamp_t timestamp, tmElements_t &time) { + time.year = 0; + time.month = 0; + + time.day = 0; + time.second = timestamp % 60; + timestamp /= 60; // now it is minutes + time.minute = timestamp % 60; + timestamp /= 60; // now it is hours + time.hour = timestamp % 24; + timestamp /= 24; // now it is days + time.day = timestamp; //this is purely for indication / computation only as it might get over the number of days in a month + } + + } } \ No newline at end of file From 752a59c6b867588cf5d07fdcdfac8ef74a170da0 Mon Sep 17 00:00:00 2001 From: Bertrand Lemasle Date: Sun, 25 Nov 2018 19:40:43 +1300 Subject: [PATCH 3/4] Using patched MD_DS3231 instead of uDS3231 --- src/Debug.cpp | 2 +- src/Gps.cpp | 4 +-- src/Rtc.cpp | 4 +-- src/RtcAbstraction.cpp | 40 +++++++++++++-------------- src/RtcAbstraction.h | 63 +++++++++++++++++------------------------- src/Time2.h | 2 ++ src/config/System.h | 2 +- 7 files changed, 53 insertions(+), 64 deletions(-) diff --git a/src/Debug.cpp b/src/Debug.cpp index 009091a..9254119 100644 --- a/src/Debug.cpp +++ b/src/Debug.cpp @@ -197,7 +197,7 @@ namespace debug { tmElements_t time; rtc::getTime(time); - NOTICE_FORMAT("getAndDisplayRtcTime", "%d/%d/%d %d:%d:%d %t %d", tmYearToCalendar(time.year), time.month, time.day, time.hour, time.minute, time.second, rtc::isAccurate(), rtc::getTemperature()); + NOTICE_FORMAT("getAndDisplayRtcTime", "%d/%d/%d %d:%d:%d %t %d", time.year, time.month, time.day, time.hour, time.minute, time.second, rtc::isAccurate(), rtc::getTemperature()); } void setRtcTime() { diff --git a/src/Gps.cpp b/src/Gps.cpp index 6902165..9bb23af 100644 --- a/src/Gps.cpp +++ b/src/Gps.cpp @@ -105,13 +105,13 @@ namespace gps { VERBOSE_FORMAT("getTime", "%s", timeStr); - time.year = calendarYrToTm(details::parseSubstring(buffer, timeStr + TIME_YEAR_OFFSET, 4)); + time.year = details::parseSubstring(buffer, timeStr + TIME_YEAR_OFFSET, 4); time.month = details::parseSubstring(buffer, timeStr + TIME_MONTH_OFFSET, 2); time.day = details::parseSubstring(buffer, timeStr + TIME_DAY_OFFSET, 2); time.hour = details::parseSubstring(buffer, timeStr + TIME_HOUR_OFFSET, 2); time.minute = details::parseSubstring(buffer, timeStr + TIME_MINUTE_OFFSET, 2); time.second = details::parseSubstring(buffer, timeStr + TIME_SECOND_OFFSET, 2); - NOTICE_FORMAT("getTime", "%d/%d/%d %d:%d:%d", tmYearToCalendar(time.year), time.month, time.day, time.hour, time.minute, time.second); + NOTICE_FORMAT("getTime", "%d/%d/%d %d:%d:%d", time.year, time.month, time.day, time.hour, time.minute, time.second); } } \ No newline at end of file diff --git a/src/Rtc.cpp b/src/Rtc.cpp index 0f9e5d8..508411e 100644 --- a/src/Rtc.cpp +++ b/src/Rtc.cpp @@ -48,11 +48,11 @@ namespace rtc { RTC_A.readTime(time); hardware::i2c::powerOff(); - VERBOSE_FORMAT("getTime", "%d/%d/%d %d:%d:%d", tmYearToCalendar(time.year), time.month, time.day, time.hour, time.minute, time.second); + VERBOSE_FORMAT("getTime", "%d/%d/%d %d:%d:%d", time.year, time.month, time.day, time.hour, time.minute, time.second); } void setTime(const tmElements_t &time) { - VERBOSE_FORMAT("setTime", "%d/%d/%d %d:%d:%d", tmYearToCalendar(time.year), time.month, time.day, time.hour, time.minute, time.second); + VERBOSE_FORMAT("setTime", "%d/%d/%d %d:%d:%d", time.year, time.month, time.day, time.hour, time.minute, time.second); hardware::i2c::powerOn(); RTC_A.writeTime(time); diff --git a/src/RtcAbstraction.cpp b/src/RtcAbstraction.cpp index b7feca7..b3ece36 100644 --- a/src/RtcAbstraction.cpp +++ b/src/RtcAbstraction.cpp @@ -1,49 +1,47 @@ #include "RtcAbstraction.h" #ifndef USE_UDS3231 -#ifdef STOCK_MD_DS3231 - -void MDS3231_Ext::unpack(tmElements_t &time) { - time.second = s; - time.minute = m; - time.hour = h; - time.day = dd; - time.month = mm; - time.year = yyyy; + +void MD_DS3231_Ext::unpack(tmElements_t &time) { + time.second = MD_DS3231::s; + time.minute = MD_DS3231::m; + time.hour = MD_DS3231::h; + time.day = MD_DS3231::dd; + time.month = MD_DS3231::mm; + time.year = MD_DS3231::yyyy; } -void MDS3231_Ext::pack(const tmElements_t &time) { - s = time.second; - m = time.minute; - h = time.hour; - dd = time.day; - mm = time.month; - yyyy = time.year; +void MD_DS3231_Ext::pack(const tmElements_t &time) { + MD_DS3231::s = time.second; + MD_DS3231::m = time.minute; + MD_DS3231::h = time.hour; + MD_DS3231::dd = time.day; + MD_DS3231::mm = time.month; + MD_DS3231::yyyy = time.year; } -boolean MDS3231_Ext::readTime(tmElements_t &time) { +boolean MD_DS3231_Ext::readTime(tmElements_t &time) { bool result = MD_DS3231::readTime(); unpack(time); return result; } -boolean MDS3231_Ext::writeTime(const tmElements_t &time) { +boolean MD_DS3231_Ext::writeTime(const tmElements_t &time) { pack(time); return MD_DS3231::writeTime(); } -boolean MDS3231_Ext::readAlarm1(alm1Type_t &almType, tmElements_t &time) { +boolean MD_DS3231_Ext::readAlarm1(almType_t &almType, tmElements_t &time) { almType = MD_DS3231::getAlarm1Type(); bool result = MD_DS3231::readAlarm1(); return result; } -boolean MDS3231_Ext::writeAlarm1(alm1Type_t almType, const tmElements_t &time) { +boolean MD_DS3231_Ext::writeAlarm1(almType_t almType, const tmElements_t &time) { pack(time); return MD_DS3231::writeAlarm1(almType); } -#endif #endif \ No newline at end of file diff --git a/src/RtcAbstraction.h b/src/RtcAbstraction.h index 28c9dfb..ff5a6e1 100644 --- a/src/RtcAbstraction.h +++ b/src/RtcAbstraction.h @@ -6,7 +6,6 @@ * the stock MD_DS3231 one. */ // #define USE_UDS3231 -//#define STOCK_MD_DS3231 #ifdef USE_UDS3231 #include @@ -14,40 +13,30 @@ #define RTC_A_CLASS uDS3231 #define WRITE_ALARM_1(t) RTC_A.writeAlarm1(DS3231_ALM_HMS, t) #else - #ifdef STOCK_MD_DS3231 - #include - - typedef unsigned long timestamp_t; - - typedef struct tmElements_t { - uint8_t Second; - uint8_t Minute; - uint8_t Hour; - uint8_t Day; - uint8_t month; - uint8_t year; // year from 2000 - }; - - class MD_DS3231_Ext : public MD_DS3231 - { - private: - void unpack(tmElements_t &time); - void pack(const tmElements_t &time); - public: - boolean readTime(tmElements_t &time); - boolean writeTime(const tmElements_t &time); - - boolean readAlarm1(almType_t &almType, tmElements_t &time); - boolean writeAlarm1(almType_t almType, const tmElements_t &time); - }; - - #define RTC_A_CLASS MD_DS3231_Ext - #define WRITE_ALARM_1(t) RTC_A.writeAlarm1(DS3231_ALM_HMS, t) - #else - #include - #define RTC_A_CLASS MD_DS3231 - #define WRITE_ALARM_1(t) RTC_A.writeAlarm1(alm1Type_t::ALM_HMS, t) - - typedef unsigned long timestamp_t; - #endif + #include + + typedef struct tmElements_t { + uint8_t second = 0; + uint8_t minute = 0; + uint8_t hour = 0; + uint8_t day = 0; + uint8_t month = 0; + uint16_t year = 0; // year from 2000 + }; + + class MD_DS3231_Ext : public MD_DS3231 + { + private: + void unpack(tmElements_t &time); + void pack(const tmElements_t &time); + public: + boolean readTime(tmElements_t &time); + boolean writeTime(const tmElements_t &time); + + boolean readAlarm1(almType_t &almType, tmElements_t &time); + boolean writeAlarm1(almType_t almType, const tmElements_t &time); + }; + + #define RTC_A_CLASS MD_DS3231_Ext + #define WRITE_ALARM_1(t) RTC_A.writeAlarm1(DS3231_ALM_HMS, t) #endif \ No newline at end of file diff --git a/src/Time2.h b/src/Time2.h index fa4f1f5..50db9fb 100644 --- a/src/Time2.h +++ b/src/Time2.h @@ -3,6 +3,8 @@ #include #include "RtcAbstraction.h" +typedef unsigned long timestamp_t; + namespace utils { namespace time { diff --git a/src/config/System.h b/src/config/System.h index 9240bb1..331672c 100644 --- a/src/config/System.h +++ b/src/config/System.h @@ -20,7 +20,7 @@ \def VERSION Version string, only used for indicative purpose */ -#define VERSION "1.22" +#define VERSION "1.30" /** From 62b33ce260e039c00ffe3095ac1ec9e5d19734a2 Mon Sep 17 00:00:00 2001 From: Bertrand Lemasle Date: Sun, 25 Nov 2018 21:12:59 +1300 Subject: [PATCH 4/4] Changed parseSubstring to return uint16_t to avoid cast issue for year --- src/Gps.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Gps.cpp b/src/Gps.cpp index 9bb23af..3529cf1 100644 --- a/src/Gps.cpp +++ b/src/Gps.cpp @@ -19,9 +19,9 @@ namespace gps { namespace details { - uint8_t parseSubstring(char *buffer, char *start, uint8_t size) { + uint16_t parseSubstring(char *buffer, char *start, uint8_t size) { strlcpy(buffer, start, size + 1); - return static_cast(strtoul(buffer, NULL, 10)); + return static_cast(strtoul(buffer, NULL, 10)); } }