49 lines
747 B
C
Raw Normal View History

2025-11-09 19:19:17 +01:00
#pragma once
#include <Arduino.h>
struct GPSData {
float latitude; // in degrees, poistive is N
float longitude; // in degrees, positive is E
short altitude; // in meters from sea level
};
class GPSSerial {
private:
enum Field {
HEADER,
TIME,
LATITUDE,
LAT_INDICATOR,
LONGITUDE,
LONG_INDICATOR,
FIX_STATUS,
SAT_USED,
HDOP,
ALTITUDE,
ALT_UNIT,
ALTREF,
ALTREF_UNIT,
DIFFAGE,
DIFFSTATION,
CHECKSUM,
};
HardwareSerial* port;
char field_buffer[32];
unsigned char field_len;
Field field;
unsigned char checksum; // rolling checksum
bool read_field();
void update_checksum();
public:
GPSData data;
GPSSerial(HardwareSerial* hw_port) { port = hw_port; }
~GPSSerial();
bool is_data_ready(void);
};