mirror of
https://github.com/meshcore-dev/MeshCore.git
synced 2026-04-02 16:35:53 +00:00
80 lines
2.0 KiB
C++
80 lines
2.0 KiB
C++
#pragma once
|
|
|
|
#include "LocationProvider.h"
|
|
#include <MicroNMEA.h>
|
|
#include <RTClib.h>
|
|
|
|
#ifndef GPS_EN
|
|
#define GPS_EN (-1)
|
|
#endif
|
|
|
|
#ifndef GPS_RESET
|
|
#define GPS_RESET (-1)
|
|
#endif
|
|
|
|
#ifndef GPS_RESET_FORCE
|
|
#define GPS_RESET_FORCE LOW
|
|
#endif
|
|
|
|
class MicroNMEALocationProvider : public LocationProvider {
|
|
char _nmeaBuffer[100];
|
|
MicroNMEA nmea;
|
|
Stream* _gps_serial;
|
|
int _pin_reset;
|
|
int _pin_en;
|
|
|
|
public :
|
|
MicroNMEALocationProvider(Stream& ser, int pin_reset = GPS_RESET, int pin_en = GPS_EN) :
|
|
_gps_serial(&ser), nmea(_nmeaBuffer, sizeof(_nmeaBuffer)), _pin_reset(pin_reset), _pin_en(pin_en) {
|
|
if (_pin_reset != -1) {
|
|
pinMode(_pin_reset, OUTPUT);
|
|
digitalWrite(_pin_reset, GPS_RESET_FORCE);
|
|
}
|
|
if (_pin_en != -1) {
|
|
pinMode(_pin_en, OUTPUT);
|
|
digitalWrite(_pin_en, LOW);
|
|
}
|
|
}
|
|
|
|
void begin() override {
|
|
if (_pin_reset != -1) {
|
|
digitalWrite(_pin_reset, !GPS_RESET_FORCE);
|
|
}
|
|
if (_pin_en != -1) {
|
|
digitalWrite(_pin_en, HIGH);
|
|
}
|
|
}
|
|
|
|
void reset() override {
|
|
if (_pin_reset != -1) {
|
|
digitalWrite(_pin_reset, GPS_RESET_FORCE);
|
|
delay(100);
|
|
digitalWrite(_pin_reset, !GPS_RESET_FORCE);
|
|
}
|
|
}
|
|
|
|
void stop() override {
|
|
if (_pin_en != -1) {
|
|
digitalWrite(_pin_en, LOW);
|
|
}
|
|
}
|
|
|
|
long getLatitude() override { return nmea.getLatitude(); }
|
|
long getLongitude() override { return nmea.getLongitude(); }
|
|
bool isValid() override { return nmea.isValid(); }
|
|
|
|
long getTimestamp() override {
|
|
DateTime dt(nmea.getYear(), nmea.getMonth(),nmea.getDay(),nmea.getHour(),nmea.getMinute(),nmea.getSecond());
|
|
return dt.unixtime();
|
|
}
|
|
|
|
void loop() override {
|
|
while (_gps_serial->available()) {
|
|
char c = _gps_serial->read();
|
|
#ifdef GPS_NMEA_DEBUG
|
|
Serial.print(c);
|
|
#endif
|
|
nmea.process(c);
|
|
}
|
|
}
|
|
}; |