Basic GPS wrapper

This commit is contained in:
2026-03-22 22:52:34 +01:00
parent 17328168b1
commit 364c711a04

60
src/modules/gps/gps.h Normal file
View File

@@ -0,0 +1,60 @@
#pragma once
#include "TinyGPSPlus.h"
#include "modules/logger/system_logger.h"
#include "flags.h"
class gps
{
private:
TinyGPSPlus *_gps;
HardwareSerial *_data_stream;
system_logger *_logger = nullptr;
bool _lock_valid = false;
unsigned long _last_lock = 0;
public:
gps(HardwareSerial *data_stream);
gps(HardwareSerial *data_stream, system_logger *logger);
~gps();
int parse_task(unsigned long timeout_ms = 500);
int init();
};
gps::gps(HardwareSerial *data_stream) {
_data_stream = data_stream;
_gps = new TinyGPSPlus();
}
gps::gps(HardwareSerial *data_stream, system_logger *logger) {
_data_stream = data_stream;
_gps = new TinyGPSPlus();
_logger = logger;
}
gps::~gps() {
_data_stream = nullptr;
delete _gps;
}
int gps::init() {
_data_stream->begin(9600);
return 0;
}
int gps::parse_task(unsigned long timeout_ms) {
unsigned long timeout = millis() + timeout_ms;
while (_data_stream->available() > 0) {
if (_gps->encode(_data_stream->read())) {
_lock_valid = true;
_last_lock = millis();
}
if (millis() > timeout) {
#ifdef DEBUG
if (_logger != nullptr) {
_logger->debug("GPS Parser timed out, exiting task");
}
#endif
return 1;
}
}
return 0;
}