@@ -1,6 +1,6 @@ | |||||
root = true | root = true | ||||
[*] | [*] | ||||
end_of_line = lf | end_of_line = crlf | ||||
indent_style = tab | indent_style = tab | ||||
trim_trailing_whitespace = true | trim_trailing_whitespace = true |
@@ -261,4 +261,7 @@ __pycache__/ | |||||
*.pyc | *.pyc | ||||
#VisualMicro | #VisualMicro | ||||
__vm/ | __vm/ | ||||
#Line endings unifier | |||||
.leu |
@@ -0,0 +1,14 @@ | |||||
#include "Core.h" | |||||
#define LOGGER_NAME "Core" | |||||
namespace core { | |||||
GPS_TRACKER_STATES state; | |||||
void setCurrentState(GPS_TRACKER_STATES s) { | |||||
state = s; | |||||
VERBOSE_FORMAT("setCurrentState", "%d, Free RAM : %d", state debug::freeRam()); | |||||
} | |||||
} |
@@ -0,0 +1,24 @@ | |||||
#pragma once | |||||
#include <Arduino.h> | |||||
#include "Debug.h" | |||||
enum class GPS_TRACKER_STATES : uint8_t | |||||
{ | |||||
SETUP = 0, | |||||
GET_POSITION = 1, | |||||
SAVE_POSITION = 2, | |||||
SEND_POSITION = 3, | |||||
SLEEP = 4 | |||||
}; | |||||
namespace core { | |||||
extern GPS_TRACKER_STATES state; | |||||
void setCurrentState(GPS_TRACKER_STATES s); | |||||
} |
@@ -1,8 +1,16 @@ | |||||
#include "Debug.h" | #include "Debug.h" | ||||
void waitForSerial() { | namespace debug { | ||||
#ifdef _DEBUG | void waitForSerial() { | ||||
while (!Serial); | while (!Serial); | ||||
Serial.begin(115200); | Serial.begin(115200); | ||||
#endif // _DEBUG | } | ||||
int freeRam() { | |||||
extern int __heap_start, *__brkval; | |||||
int v; | |||||
return (int)&v - (__brkval == 0 ? (int)&__heap_start : (int)__brkval); | |||||
} | |||||
} | } |
@@ -1,21 +1,28 @@ | |||||
#pragma once | #pragma once | ||||
#include <Arduino.h> | |||||
#ifdef _DEBUG | #ifdef _DEBUG | ||||
#include <ArduinoLog.h> | #include <ArduinoLog.h> | ||||
#define VERBOSE(f) Log.verbose(F("[" LOGGER_NAME "::" f "]\n")) | #define VERBOSE(f) Log.verbose(F("[" LOGGER_NAME "::" f "]\n")) | ||||
#define VERBOSE_MSG(f, msg) Log.verbose(F("[" LOGGER_NAME "::" f "] " msg "\n")) | #define VERBOSE_MSG(f, msg) Log.verbose(F("[" LOGGER_NAME "::" f "] " msg "\n")) | ||||
#define VERBOSE_FORMAT(f, msg, ...) Log.verbose(F["[" LOGGER_NAME "::" f "] " msg "\n"), __VA_ARGS__) | #define VERBOSE_FORMAT(f, msg, ...) Log.verbose(F("[" LOGGER_NAME "::" f "] " msg "\n"), __VA_ARGS__) | ||||
#else | #else | ||||
#define DISABLE_LOGGING 1 | #define DISABLE_LOGGING 1 | ||||
#define VERBOSE(f) | #define VERBOSE(f) | ||||
#define VERBOSE(f, msg) | #define VERBOSE_MSG(f, msg) | ||||
#define VERBOSE(f, msg, ...) | #define VERBOSE_FORMAT(f, msg, ...) | ||||
#endif | #endif | ||||
void waitForSerial(); | namespace debug { | ||||
void waitForSerial(); | |||||
int freeRam(); | |||||
} |
@@ -1,3 +1,29 @@ | |||||
#include "Gps.h" | #include "Gps.h" | ||||
#define LOGGER_NAME "Gps" | #define LOGGER_NAME "Gps" | ||||
namespace gps { | |||||
void powerOn() { | |||||
} | |||||
void powerOff() { | |||||
} | |||||
SIM808_GPS_STATUS acquireCurrentPosition() { | |||||
SIM808_GPS_STATUS currentStatus = SIM808_GPS_STATUS::OFF; | |||||
//TODO : do while (!timeout && < accurate_fix) | |||||
if (currentStatus > SIM808_GPS_STATUS::NO_FIX) { | |||||
lastStatus = currentStatus; | |||||
} | |||||
return currentStatus; | |||||
} | |||||
Time getTime() { | |||||
} | |||||
} |
@@ -1 +1,18 @@ | |||||
#pragma once | #pragma once | ||||
#include "Time.h" | |||||
#define GPS_POSITION_SIZE 128 | |||||
namespace gps { | |||||
char lastPosition[GPS_POSITION_SIZE]; | |||||
SIM808_GPS_STATUS lastStatus; | |||||
void powerOn(); | |||||
void powerOff(); | |||||
SIM808_GPS_STATUS acquireCurrentPosition(); | |||||
Time getTime(); | |||||
} |
@@ -5,9 +5,13 @@ | |||||
#include <SIM808.h> | #include <SIM808.h> | ||||
#include "Debug.h" | #include "Debug.h" | ||||
#include "Core.h" | |||||
#include "Gps.h" | #include "Gps.h" | ||||
#include "Network.h" | #include "Network.h" | ||||
#include "Rtc.h" | |||||
#include "Storage.h" | #include "Storage.h" | ||||
#include "Utils.h" | |||||
#define LOGGER_NAME "GpsTracker" | #define LOGGER_NAME "GpsTracker" | ||||
@@ -16,9 +20,9 @@ | |||||
#define SIM_PWR 9 | #define SIM_PWR 9 | ||||
#define SIM_STATUS 8 | #define SIM_STATUS 8 | ||||
#define IC_PWR A0 | #define RTC_PWR A0 | ||||
#define EEPROM_PWR A0 | |||||
#define SD_SS SS | #define SD_SS SS | ||||
#define SIM_RI 2 | #define SIM_RI 2 | ||||
#define RTC_WAKE 3 | #define RTC_WAKE 3 | ||||
@@ -1,12 +1,29 @@ | |||||
#include "GpsTracker.h" | #include "GpsTracker.h" | ||||
void setup() { | void setup() { | ||||
#ifdef _DEBUG | #ifdef _DEBUG | ||||
waitForSerial(); | debug::waitForSerial(); | ||||
Log.begin(LOG_LEVEL_VERBOSE, &Serial); | |||||
#endif | #endif | ||||
core::setCurrentState(GPS_TRACKER_STATES::SETUP); | |||||
rtc::powerOn(); | |||||
rtc::setup(); | |||||
rtc::powerOff(); | |||||
} | } | ||||
void loop() { | void loop() { | ||||
gps::powerOn(); | |||||
SIM808_GPS_STATUS gpsStatus = gps::acquireCurrentPosition(); | |||||
gps::powerOff(); | |||||
if (gpsStatus > SIM808_GPS_STATUS::NO_FIX) { | |||||
Time time = utils::parseTime(); | |||||
rtc::powerOn(); | |||||
rtc::setTime(time); | |||||
rtc::powerOff(); | |||||
} | |||||
} | } |
@@ -1,3 +1,9 @@ | |||||
#include "Network.h" | #include "Network.h" | ||||
#define LOGGER_NAME "Network" | #define LOGGER_NAME "Network" | ||||
namespace network { | |||||
void powerOn() {} | |||||
void powerOff() {} | |||||
} |
@@ -1 +1,6 @@ | |||||
#pragma once | #pragma once | ||||
namespace network { | |||||
void powerOn(); | |||||
void powerOff(); | |||||
} |
@@ -1,3 +1,58 @@ | |||||
#include "Rtc.h" | #include "Rtc.h" | ||||
#define LOGGER_NAME "Rtc" | #include <Wire.h> | ||||
#include <MD_DS3231.h> | |||||
#define LOGGER_NAME "Rtc" | |||||
namespace rtc { | |||||
void powerOn() { | |||||
digitalWrite(RTC_PWR, HIGH); | |||||
pinMode(RTC_PWR, OUTPUT); | |||||
Wire.begin(); | |||||
} | |||||
void powerOff() { | |||||
pinMode(RTC_PWR, INPUT); | |||||
digitalWrite(RTC_PWR, LOW); | |||||
//turn off i2c | |||||
TWCR &= ~(bit(TWEN) | bit(TWIE) | bit(TWEA)); | |||||
//disable i2c internal pull ups | |||||
digitalWrite(A4, LOW); | |||||
digitalWrite(A5, LOW); | |||||
} | |||||
void setup() { | |||||
RTC.control(DS3231_12H, DS3231_OFF); //24 hours clock | |||||
RTC.control(DS3231_INT_ENABLE, DS3231_ON); //INTCN ON | |||||
} | |||||
Time getTime() { | |||||
RTC.readTime(); | |||||
return { | |||||
RTC.yyyy, | |||||
RTC.mm, | |||||
RTC.dd, | |||||
RTC.h, | |||||
RTC.m, | |||||
RTC.s | |||||
}; | |||||
} | |||||
void setTime(Time time) { | |||||
RTC.yyyy = time.yyyy; | |||||
RTC.mm = time.mm; | |||||
RTC.dd = time.dd; | |||||
RTC.h = time.h; | |||||
RTC.m = time.m; | |||||
RTC.s = time.s; | |||||
RTC.writeTime(); | |||||
} | |||||
} |
@@ -1 +1,11 @@ | |||||
#pragma once | #pragma once | ||||
namespace rtc { | |||||
void powerOn(); | |||||
void powerOff(); | |||||
void setup(); | |||||
Time getTime(); | |||||
void setTime(Time time); | |||||
} |
@@ -0,0 +1,8 @@ | |||||
#include "Storage.h" | |||||
#define LOGGER_NAME "Storage" | |||||
namespace storage { | |||||
void powerOn() {} | |||||
void powerOff() {} | |||||
} |
@@ -1 +1,6 @@ | |||||
#pragma once | #pragma once | ||||
namespace storage { | |||||
void powerOn(); | |||||
void powerOff(); | |||||
} |
@@ -0,0 +1,10 @@ | |||||
#pragma once | |||||
struct Time { | |||||
uint16_t yyyy; | |||||
uint8_t mm; | |||||
uint8_t dd; | |||||
uint8_t h; | |||||
uint8_t m; | |||||
uint8_t s; | |||||
}; |
@@ -0,0 +1,8 @@ | |||||
#include "Utils.h" | |||||
#include "Gps.h" | |||||
namespace utils { | |||||
Time parseTime(); | |||||
} |
@@ -0,0 +1,7 @@ | |||||
#pragma once | |||||
#include "Time.h" | |||||
namespace utils { | |||||
Time parseTime(); | |||||
} |