2020-02-06 15:39:21 +00:00
|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include <TinyGPS++.h>
|
|
|
|
#include "PeriodicTask.h"
|
|
|
|
#include "Observer.h"
|
2020-02-19 18:53:09 +00:00
|
|
|
#include "sys/time.h"
|
2020-02-06 15:39:21 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* A gps class that only reads from the GPS periodically (and FIXME - eventually keeps the gps powered down except when reading)
|
|
|
|
*
|
|
|
|
* When new data is available it will notify observers.
|
|
|
|
*/
|
|
|
|
class GPS : public PeriodicTask, public Observable, public TinyGPSPlus
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
GPS();
|
|
|
|
|
2020-02-19 18:53:09 +00:00
|
|
|
/// Return time since 1970 in secs. Until we have a GPS lock we will be returning time based at zero
|
|
|
|
uint32_t getTime();
|
|
|
|
|
|
|
|
/// Return time since 1970 in secs. If we don't have a GPS lock return zero
|
|
|
|
uint32_t getValidTime();
|
2020-02-06 16:18:20 +00:00
|
|
|
|
|
|
|
String getTimeStr();
|
2020-02-06 15:39:21 +00:00
|
|
|
|
|
|
|
void setup();
|
|
|
|
|
|
|
|
virtual void loop();
|
|
|
|
|
2020-02-21 18:20:47 +00:00
|
|
|
virtual void doTask();
|
2020-02-19 16:17:28 +00:00
|
|
|
|
2020-02-19 18:53:09 +00:00
|
|
|
/// If we haven't yet set our RTC this boot, set it from a GPS derived time
|
|
|
|
void perhapsSetRTC(const struct timeval *tv);
|
|
|
|
|
2020-02-19 16:17:28 +00:00
|
|
|
private:
|
|
|
|
void readFromRTC();
|
2020-02-06 15:39:21 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
extern GPS gps;
|