#pragma once #include 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); };