2018 revision to classic DataBus AVC code.

Dependencies:   LSM303DLM Servo SerialGraphicLCD L3G4200D IncrementalEncoder SimpleShell

Revision:
43:9a285515f33a
Child:
44:0d72a8a1288a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/GPS/GPS.h	Thu Jan 03 19:07:20 2019 +0000
@@ -0,0 +1,60 @@
+#ifndef __GPS_H
+#define __GPS_H
+
+/** uBlox GPS UBX Protocol Reader
+ * Parses uBlox GPS binary protocol
+ * 
+ * @author Wayne Holder; Ported to mbed by Michael Shimniok
+ */
+#include "mbed.h"
+
+class GPS {
+public:
+    GPS(): _callback(0) {}
+
+    /**
+     * Parse one character of protocol
+     * @param c is the character to parse
+     * @return 1 when entire packet of data obtained, 0 otherwise
+     */    
+    virtual int parse(char c) = 0;
+
+    void subscribe(Callback<void()> cb) {
+        _callback = cb;
+    }
+
+    /** Read the latest data from GPS
+     * @param lat latitude in degrees
+     * @param lon longitude in degrees
+     * @param course heading/course in degrees
+     * @param speed speed m/s
+     * @param hdop horizontal dilution of precision
+     * @param svcount is the number of sattelites being tracked
+     * @return all parameters
+     */
+    void read(double& lat, double& lon, float& course, float& speed, float& hdop, int& svcount) {
+        lat = latest.lat;
+        lon = latest.lon;
+        course = latest.course;
+        speed = latest.speed;
+        hdop = latest.hdop;
+        svcount = latest.svcount;
+    }   
+
+protected:
+    typedef struct {
+        double lat;
+        double lon;
+        float course;
+        float speed;
+        float hdop;
+        int svcount;
+    } gps_data_t;
+
+    gps_data_t latest;
+    gps_data_t tmp;
+
+    Callback<void()> _callback;
+};
+
+#endif