Example program to demonstrate the use of the GnssSerial class.

Dependencies:   gnss

Revision:
1:3c41bde6d0bc
Parent:
0:5eb7846b73b4
Child:
6:881e2bbf29e4
diff -r 5eb7846b73b4 -r 3c41bde6d0bc main.cpp
--- a/main.cpp	Tue Jun 06 08:30:05 2017 +0000
+++ b/main.cpp	Tue Jun 06 21:06:04 2017 +0100
@@ -17,14 +17,14 @@
 #include "mbed.h"
 #include "gnss.h"
 
-#define _CHECK_TALKER(s) ((buffer[3] == s[0]) && (buffer[4] == s[1]) && (buffer[5] == s[2]))
+#define CHECK_TALKER(s) ((buffer[3] == s[0]) && (buffer[4] == s[1]) && (buffer[5] == s[2]))
 
 // LEDs
 DigitalOut ledRed(LED1, 1);
 DigitalOut ledGreen(LED2, 1);
 DigitalOut ledBlue(LED3, 1);
 
-/* This example program for the u-blox C030 board instantiates
+/* This example program for the u-blox C030 and C027 boards instantiates
  * the gnss interface and waits for time/position to be received from a satellite.
  * Progress may be monitored with a serial terminal running at 9600 baud.
  * The LED on the C030 board will turn green when this program is
@@ -41,74 +41,77 @@
     char buffer[256];
     char link[128] = "";
     
-    // Initialise GNSS
-    gnss.init();
-
-    printf ("Waiting for GNSS to receive...\n");
-    while (1) {
-        ledGreen = 1;
-        ledRed = 1;
-        ledBlue = 1;
+    printf ("Starting up...\n");
+    if (gnss.init()) {
+        printf ("Waiting for GNSS to receive something...\n");
+        while (1) {            
+            gnssReturnCode = gnss.getMessage(buffer, sizeof(buffer));
+            if (gnssReturnCode > 0) {
+                ledGreen = 0;
+                ledBlue = 1;
+                ledRed = 1;
+                length = LENGTH(gnssReturnCode);
+                
+                printf("NMEA: %.*s\n", length - 2, buffer);
         
-        gnssReturnCode = gnss.getMessage(buffer, sizeof(buffer));
-        if (gnssReturnCode > 0) {
-            ledGreen = 0;
-            length = LENGTH(gnssReturnCode);
-            
-            printf("NMEA: %.*s\n", length - 2, buffer);
-    
-            if ((PROTOCOL(gnssReturnCode) == GnssParser::NMEA) && (length > 6)) {
-                // talker is $GA=Galileo $GB=Beidou $GL=Glonass $GN=Combined $GP=GNSS
-                if ((buffer[0] == '$') || buffer[1] == 'G') {
-                  if (_CHECK_TALKER("GLL")) {
-                        double latitude = 0, longitude = 0;
-                        char ch;
-                        
-                        if (gnss.getNmeaAngle(1, buffer, length, latitude) && 
-                            gnss.getNmeaAngle(3, buffer, length, longitude) && 
-                            gnss.getNmeaItem(6, buffer, length, ch) && ch == 'A')
-                        {
-                            ledBlue = 0;
-                            ledRed = 0;
-                            ledGreen = 0;
+                if ((PROTOCOL(gnssReturnCode) == GnssParser::NMEA) && (length > 6)) {
+                    // Talker is $GA=Galileo $GB=Beidou $GL=Glonass $GN=Combined $GP=GNSS
+                    if ((buffer[0] == '$') || buffer[1] == 'G') {
+                      if (CHECK_TALKER("GLL")) {
+                            double latitude = 0, longitude = 0;
+                            char ch;
                             
-                            printf("GNSS: location is %.5f %.5f.\n", latitude,
-                                   longitude); 
-                            sprintf(link, "I am here!\n"
-                                          "https://maps.google.com/?q=%.5f,%.5f\n",
-                                          latitude, longitude); 
-                        }
-                    } else if (_CHECK_TALKER("GGA") || _CHECK_TALKER("GNS") ) {
-                        double altitude = 0; 
-                        const char *timeString = NULL;
-                        
-                         // altitude msl [m]
-                        if (gnss.getNmeaItem(9, buffer, length, altitude)) {
-                            printf("GNSS: altitude is %.1f m.\n", altitude); 
-                        }
-    
-                        // Retrieve the time
-                        timeString = gnss.findNmeaItemPos(1, buffer, buffer +
-                                                          length);
-                        if (timeString != NULL) {
-                            ledBlue = 0;
-                            ledRed = 1;
-                            ledGreen = 1;
+                            if (gnss.getNmeaAngle(1, buffer, length, latitude) && 
+                                gnss.getNmeaAngle(3, buffer, length, longitude) && 
+                                gnss.getNmeaItem(6, buffer, length, ch) && (ch == 'A')) {
+                                ledBlue = 0;
+                                ledRed = 0;
+                                ledGreen = 0;
+                                
+                                printf("\nGNSS: location is %.5f %.5f.\n\n", latitude, longitude); 
+                                sprintf(link, "I am here!\n"
+                                              "https://maps.google.com/?q=%.5f,%.5f\n",
+                                              latitude, longitude); 
+                            }
+                        } else if (CHECK_TALKER("GGA") || CHECK_TALKER("GNS")) {
+                            double altitude = 0; 
+                            const char *timeString = NULL;
                             
-                            printf("GNSS: time is %.6s.\n", timeString);
-                        }
-                    } else if (_CHECK_TALKER("VTG")) {
-                        double speed = 0; 
-                        
-                        // speed [km/h]
-                        if (gnss.getNmeaItem(7, buffer, length, speed)) {
-                            printf("GNSS: speed is %.1f km/h.\n", speed);
+                             // Altitude
+                            if (gnss.getNmeaItem(9, buffer, length, altitude)) {
+                                printf("\nGNSS: altitude is %.1f m.\n\n", altitude); 
+                            }
+        
+                            // Time
+                            timeString = gnss.findNmeaItemPos(1, buffer, buffer + length);
+                            if (timeString != NULL) {
+                                ledBlue = 0;
+                                ledRed = 1;
+                                ledGreen = 1;
+                                
+                                printf("\nGNSS: time is %.6s.\n\n", timeString);
+                            }
+                        } else if (CHECK_TALKER("VTG")) {
+                            double speed = 0; 
+                            
+                            // Speed
+                            if (gnss.getNmeaItem(7, buffer, length, speed)) {
+                                printf("\nGNSS: speed is %.1f km/h.\n\n", speed);
+                            }
                         }
                     }
                 }
             }
         }
+    } else {
+        printf("Unable to initialise GNSS.\n");
     }
+    
+    ledRed = 0;
+    ledGreen = 1;
+    ledBlue = 1;
+    printf("Should never get here.\n");
+    MBED_ASSERT(false);
 }
 
 // End Of File
\ No newline at end of file