Bladeren bron

Merge branch 'trim-rtc-3'

tags/v1.3.0
Bertrand Lemasle 6 jaren geleden
bovenliggende
commit
2c4917f9b3
12 gewijzigde bestanden met toevoegingen van 195 en 100 verwijderingen
  1. +22
    -21
      .vscode/c_cpp_properties.json
  2. +6
    -3
      gpstracker.code-workspace
  3. +1
    -1
      src/Core.cpp
  4. +1
    -1
      src/Debug.cpp
  5. +9
    -9
      src/Gps.cpp
  6. +1
    -1
      src/MainUnit.cpp
  7. +16
    -16
      src/Rtc.cpp
  8. +47
    -0
      src/RtcAbstraction.cpp
  9. +42
    -0
      src/RtcAbstraction.h
  10. +46
    -46
      src/Time2.cpp
  11. +3
    -1
      src/Time2.h
  12. +1
    -1
      src/config/System.h

+ 22
- 21
.vscode/c_cpp_properties.json Bestand weergeven

@@ -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
}

+ 6
- 3
gpstracker.code-workspace Bestand weergeven

@@ -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": {


+ 1
- 1
src/Core.cpp Bestand weergeven

@@ -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--;) {


+ 1
- 1
src/Debug.cpp Bestand weergeven

@@ -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() {


+ 9
- 9
src/Gps.cpp Bestand weergeven

@@ -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<uint8_t>(strtoul(buffer, NULL, 10));
return static_cast<uint16_t>(strtoul(buffer, NULL, 10));
}
}
@@ -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);
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);
}
}

+ 1
- 1
src/MainUnit.cpp Bestand weergeven

@@ -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();
}


+ 16
- 16
src/Rtc.cpp Bestand weergeven

@@ -4,26 +4,26 @@
#include "Logging.h"
#include <Wire.h>
#include <uDS3231.h>
#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<int16_t>(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,18 +45,18 @@ 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);
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.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,13 +72,13 @@ namespace rtc {
void setAlarm(const tmElements_t &time) {
hardware::i2c::powerOn();
RTC.writeAlarm1(DS3231_ALM_HMS, time);
WRITE_ALARM_1(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);
NOTICE_FORMAT("setAlarm", "Next alarm : %d:%d:%d", time.hour, time.minute, time.second);
hardware::i2c::powerOff();
}


+ 47
- 0
src/RtcAbstraction.cpp Bestand weergeven

@@ -0,0 +1,47 @@
#include "RtcAbstraction.h"
#ifndef USE_UDS3231
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 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 MD_DS3231_Ext::readTime(tmElements_t &time) {
bool result = MD_DS3231::readTime();
unpack(time);
return result;
}
boolean MD_DS3231_Ext::writeTime(const tmElements_t &time) {
pack(time);
return MD_DS3231::writeTime();
}
boolean MD_DS3231_Ext::readAlarm1(almType_t &almType, tmElements_t &time) {
almType = MD_DS3231::getAlarm1Type();
bool result = MD_DS3231::readAlarm1();
return result;
}
boolean MD_DS3231_Ext::writeAlarm1(almType_t almType, const tmElements_t &time) {
pack(time);
return MD_DS3231::writeAlarm1(almType);
}
#endif

+ 42
- 0
src/RtcAbstraction.h Bestand weergeven

@@ -0,0 +1,42 @@
#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 <uDS3231.h>
#define RTC_A_CLASS uDS3231
#define WRITE_ALARM_1(t) RTC_A.writeAlarm1(DS3231_ALM_HMS, t)
#else
#include <MD_DS3231.h>
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

+ 46
- 46
src/Time2.cpp Bestand weergeven

@@ -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
}
}
}

+ 3
- 1
src/Time2.h Bestand weergeven

@@ -1,7 +1,9 @@
#pragma once
#include <Arduino.h>
#include <uDS3231.h>
#include "RtcAbstraction.h"
typedef unsigned long timestamp_t;
namespace utils {
namespace time {


+ 1
- 1
src/config/System.h Bestand weergeven

@@ -20,7 +20,7 @@
\def VERSION
Version string, only used for indicative purpose
*/
#define VERSION "1.22"
#define VERSION "1.30"
/**


Laden…
Annuleren
Opslaan