GPS NEMA String parser library. Only supports SkyTraq Venus chip at this time.

Dependents:   MTDOT-EVB-LinkCheck-AL MTDOT-BOX-EVB-Factory-Firmware-LIB-108 TelitSensorToCloud mDot_sensor_to_cloud ... more

Revision:
7:bd1013ba8afd
Parent:
6:2050b4795b66
Child:
8:5fa40fa372e2
--- a/GPSPARSER.cpp	Fri Dec 04 16:40:41 2015 -0600
+++ b/GPSPARSER.cpp	Mon Dec 07 11:45:56 2015 -0600
@@ -34,7 +34,8 @@
 GPSPARSER::GPSPARSER(MTSSerial *uart, NCP5623B* led)
     : _getSentenceThread(&GPSPARSER::startSentenceThread,this),
       _led(led),
-      _led_state(0)
+      _led_state(0),
+      _tick_running(false)
 {
     _gps_uart = uart;
     _gps_uart->baud(9600);    //set GPS baud rate here
@@ -59,7 +60,6 @@
     if (GPSPARSER::initGps() == 0) {
         _gps_detected = true;
         _getSentenceThread.signal_set(START_THREAD);
-        _led_timer.start();
         printf("Started Nema Sentence Thread\r\n");
     } else {
         printf("No GPS detected\r\n");
@@ -156,6 +156,10 @@
 
     _getSentenceThread.signal_wait(START_THREAD);
     printf("Got thread start\r\n");
+    if (_led) {
+        _tick.attach(this, &GPSPARSER::blinker, 0.5);
+        _tick_running = true;
+    }
 
     do {
         if (_gps_uart->readable() > 80) {
@@ -208,11 +212,16 @@
 
         if (_led) {
             if (_fix_status >= 2) {
+                if (_tick_running) {
+                    _tick.detach();
+                    _tick_running = false;
+                }
                 _led->setPWM(NCP5623B::LED_3, 8);
-            } else if (_led_timer.read_ms() > 1000) {
-                _led_timer.reset();
-                _led_state = (_led_state == 0) ? 8 : 0;
-                _led->setPWM(NCP5623B::LED_3, _led_state);
+            } else {
+                if (! _tick_running) {
+                    _tick.attach(this, &GPSPARSER::blinker, 0.5);
+                    _tick_running = true;
+                }
             }
         }
 
@@ -428,3 +437,8 @@
     return _msl_altitude;
 }
 
+void GPSPARSER::blinker() {
+    _led_state = (_led_state == 0) ? 8 : 0;
+    _led->setPWM(NCP5623B::LED_3, _led_state);
+}
+