Selaa lähdekoodia

Added an abstraction layer to work on RTC lib trim again

tags/v1.3.0^2
Bertrand Lemasle 6 vuotta sitten
vanhempi
commit
d9b8c61fb8
6 muutettua tiedostoa jossa 137 lisäystä ja 38 poistoa
  1. +22
    -21
      .vscode/c_cpp_properties.json
  2. +6
    -3
      gpstracker.code-workspace
  3. +13
    -13
      src/Rtc.cpp
  4. +43
    -0
      src/RtcAbstraction.cpp
  5. +52
    -0
      src/RtcAbstraction.h
  6. +1
    -1
      src/Time2.h

+ 22
- 21
.vscode/c_cpp_properties.json Näytä tiedosto

@@ -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 Näytä tiedosto

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


+ 13
- 13
src/Rtc.cpp Näytä tiedosto

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


+ 43
- 0
src/RtcAbstraction.cpp Näytä tiedosto

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

+ 52
- 0
src/RtcAbstraction.h Näytä tiedosto

@@ -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 <uDS3231.h>
#else
#include <MD_DS3231.h>
#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

+ 1
- 1
src/Time2.h Näytä tiedosto

@@ -1,7 +1,7 @@
#pragma once
#include <Arduino.h>
#include <uDS3231.h>
#include "RtcAbstraction.h"
namespace utils {
namespace time {


Ladataan…
Peruuta
Tallenna