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

Files at this revision

API Documentation at this revision

Comitter:
Mike Fiore
Date:
Mon Dec 14 08:58:14 2015 -0600
Parent:
7:bd1013ba8afd
Child:
9:a4d4ab3b0f23
Commit message:
comment out log messages

Changed in this revision

GPSPARSER.cpp Show annotated file Show diff for this revision Revisions of this file
GPSPARSER.h Show annotated file Show diff for this revision Revisions of this file
--- a/GPSPARSER.cpp	Mon Dec 07 11:45:56 2015 -0600
+++ b/GPSPARSER.cpp	Mon Dec 14 08:58:14 2015 -0600
@@ -60,9 +60,9 @@
     if (GPSPARSER::initGps() == 0) {
         _gps_detected = true;
         _getSentenceThread.signal_set(START_THREAD);
-        printf("Started Nema Sentence Thread\r\n");
+        //printf("Started Nema Sentence Thread\r\n");
     } else {
-        printf("No GPS detected\r\n");
+        //printf("No GPS detected\r\n");
         _fix_status = 0;
     }
 
@@ -88,10 +88,10 @@
     uint8_t ret = 0;
 
     _gps_uart->rxClear();
-    printf("Starting initGPS \r\n");
+    //printf("Starting initGPS \r\n");
 
     _gps_uart->write(init_gps,16);
-    printf("wrote control data\r\n");
+    //printf("wrote control data\r\n");
 
     do {
         osDelay(10);
@@ -104,38 +104,38 @@
             _gps_uart->read(chk_char,20);
         } while ((chk_char != 0xA0) && (!_gps_uart->rxEmpty()));
 
-        printf ("found 0xA0 or rx empty\r\n");
+        //printf ("found 0xA0 or rx empty\r\n");
 
         if (chk_char == 0xA0) {
             _gps_uart->read(chk_char,15);
             if (chk_char != 0xA1) {
-                printf( "initGPS  failed no message\r\n");
+                //printf( "initGPS  failed no message\r\n");
                 ret = 1;
             } else {
-                printf("message received\r\n");
+                //printf("message received\r\n");
                 _gps_uart->read(chk_char);
                 _gps_uart->read(chk_char);
-                printf("message size - %x\r\n",chk_char);
+                //printf("message size - %x\r\n",chk_char);
                 _gps_uart->read(chk_char);
                 if (chk_char != 0x83) {
-                    printf("initGPS failed not ack message\r\n");
+                    //printf("initGPS failed not ack message\r\n");
                     ret = 1;
                 } else {
-                    printf("ACK message received\r\n");
+                    //printf("ACK message received\r\n");
                     _gps_uart->read(chk_char);
-                    printf("config message acknowledged - ID - %x\r\n",chk_char);
+                    //printf("config message acknowledged - ID - %x\r\n",chk_char);
                 }
             }
         } else {
-            printf("rx empty \r\n");
+            //printf("rx empty \r\n");
             ret = 1;
         }
     } else {
-        printf("No readable characters\r\n");
+        //printf("No readable characters\r\n");
         ret = 1;
     }
 
-    printf("initGps done\r\n");
+    //printf("initGps done\r\n");
     return ret;
 }
 
@@ -155,7 +155,7 @@
     char cksum_str[2];
 
     _getSentenceThread.signal_wait(START_THREAD);
-    printf("Got thread start\r\n");
+    //printf("Got thread start\r\n");
     if (_led) {
         _tick.attach(this, &GPSPARSER::blinker, 0.5);
         _tick_running = true;
@@ -202,12 +202,12 @@
                         else if (strncmp (nema_str,"ZDA",3) == 0)
                             parseZDA(nema_str);
                         else
-                            printf("Unknown NEMA String Type\r\n");
+                            //printf("Unknown NEMA String Type\r\n");
                     else
-                        printf("NEMA String checksum error %x != %x\r\n",nema_cksum,calc_cksum);
+                        //printf("NEMA String checksum error %x != %x\r\n",nema_cksum,calc_cksum);
                 }
             } else
-                printf("RX empty before all data read\r\n");
+                //printf("RX empty before all data read\r\n");
         }
 
         if (_led) {
@@ -236,6 +236,8 @@
     char* token_str;
     uint8_t ret = 0;
 
+    _mutex.lock();
+
     token_str = strtok(nema_buf, ",");
 // skip timestamp
     token_str = strtok(NULL, ",");
@@ -255,6 +257,8 @@
     token_str = strtok(NULL, ",");
     _msl_altitude = atoi(token_str);
 
+    _mutex.unlock();
+
     return ret;
 }
 
@@ -263,6 +267,8 @@
     char* token_str;
     uint8_t ret = 0;
 
+    _mutex.lock();
+
     token_str = strtok(nema_buf, ",");
     token_str = strtok(NULL, ",");
 // read fix status
@@ -273,6 +279,9 @@
         token_str = strtok(NULL, ",");
         _satellite_prn[i] = atoi(token_str);
     }
+
+    _mutex.unlock();
+
     return ret;
 }
 
@@ -281,6 +290,8 @@
     char* token_str;
     uint8_t ret = 0;
 
+    _mutex.lock();
+
     token_str = strtok(nema_buf, ",");
 // skip number of sentences and sentence number for now
     token_str = strtok(NULL, ",");
@@ -289,6 +300,8 @@
     token_str = strtok(NULL, ",");
     _num_satellites = atoi(token_str);
 // add code to read satellite specs if needed
+    
+    _mutex.unlock();
 
     return ret;
 }
@@ -299,6 +312,8 @@
     char temp_str[6];
     uint8_t ret = 0;
 
+    _mutex.lock();
+
     token_str = strtok(nema_buf, ",");
 // read timestamp
     token_str = strtok(NULL, ",");
@@ -363,78 +378,134 @@
     strncpy(temp_str,token_str+4,2);
     _timestamp.tm_year = atoi(temp_str) + 100;
 
+    _mutex.unlock();
+
     return ret;
 }
 
 uint8_t GPSPARSER::parseVTG(char *nema_buf)
 {
     uint8_t ret = 0;
-    printf("ParseVTG****\r\n");
-    printf(nema_buf);
-    printf("\r\n");
+    //printf("ParseVTG****\r\n");
+    //printf(nema_buf);
+    //printf("\r\n");
     return ret;
 }
 
 uint8_t GPSPARSER::parseGLL(char *nema_buf)
 {
     uint8_t ret = 0;
-    printf("ParseGLL*****\r\n");
-    printf(nema_buf);
-    printf("\r\n");
+    //printf("ParseGLL*****\r\n");
+    //printf(nema_buf);
+    //printf("\r\n");
     return ret;
 }
 
 uint8_t GPSPARSER::parseZDA(char *nema_buf)
 {
     uint8_t ret = 0;
-    printf("ParseZDA******\r\n");
-    printf(nema_buf);
-    printf("\r\n");
+    //printf("ParseZDA******\r\n");
+    //printf(nema_buf);
+    //printf("\r\n");
     return ret;
 }
 
 bool GPSPARSER::gpsDetected(void)
 {
-    return _gps_detected;
+    bool detected;
+
+    _mutex.lock();
+    detected =  _gps_detected;
+    _mutex.unlock();
+
+    return detected;
 }
 
 GPSPARSER::longitude GPSPARSER::getLongitude(void)
 {
-    return _gps_longitude;
+    longitude lon;
+
+    _mutex.lock();
+    lon = _gps_longitude;
+    _mutex.unlock();
+
+    return lon;
 }
 
 GPSPARSER::latitude GPSPARSER::getLatitude(void)
 {
-    return _gps_latitude;
+    latitude lat;
+
+    _mutex.lock();
+    lat = _gps_latitude;
+    _mutex.unlock();
+
+    return lat;
 }
 
 struct tm GPSPARSER::getTimestamp(void) {
-    return _timestamp;
+    struct tm time;
+
+    _mutex.lock();
+    time = _timestamp;
+    _mutex.unlock();
+
+    return time;
 }
 
 bool GPSPARSER::getLockStatus(void)
 {
-    return _gps_status;
+    bool status;
+
+    _mutex.lock();
+    status = _gps_status;
+    _mutex.unlock();
+
+    return status;
 }
 
 uint8_t GPSPARSER::getFixStatus(void)
 {
-    return _fix_status;
+    uint8_t fix;
+
+    _mutex.lock();
+    fix = _fix_status;
+    _mutex.unlock();
+
+    return fix;
 }
 
 uint8_t GPSPARSER::getFixQuality(void)
 {
-    return _fix_quality;
+    uint8_t fix;
+
+    _mutex.lock();
+    fix = _fix_quality;
+    _mutex.unlock();
+
+    return fix;
 }
 
 uint8_t GPSPARSER::getNumSatellites(void)
 {
-    return _num_satellites;
+    uint8_t sats;
+
+    _mutex.lock();
+    sats = _num_satellites;
+    _mutex.unlock();
+
+    return sats;
 }
 
 int16_t GPSPARSER::getAltitude(void)
 {
-    return _msl_altitude;
+    int16_t alt;
+
+    _mutex.lock();
+    alt = _msl_altitude;
+    _mutex.unlock();
+
+    return alt;
 }
 
 void GPSPARSER::blinker() {
--- a/GPSPARSER.h	Mon Dec 07 11:45:56 2015 -0600
+++ b/GPSPARSER.h	Mon Dec 14 08:58:14 2015 -0600
@@ -155,6 +155,7 @@
     int8_t _led_state;
     Ticker _tick;
     bool _tick_running;
+    Mutex _mutex;
     
     /** Detect and initialize GPS device
      *  @return status of initialization