49 lines
747 B
C
49 lines
747 B
C
|
|
#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);
|
||
|
|
};
|
||
|
|
|