The program sends the current location over the cellular network.

Dependencies:   aconno_I2C ublox-at-cellular-interface gnss ublox-cellular-base Lis2dh12 ublox-cellular-base-n2xx ublox-at-cellular-interface-n2xx low-power-sleep

Fork of example-gnss by u-blox

Revision:
8:2bf886335fd0
Child:
9:f943c09d9173
diff -r 746ae478fdf7 -r 2bf886335fd0 aconnoHelpers/aconnoHelpers.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/aconnoHelpers/aconnoHelpers.cpp	Fri Nov 30 16:19:41 2018 +0100
@@ -0,0 +1,75 @@
+/**
+ * aconno helpers
+ * Set of general purpose fuctions used within aconno projects
+ *
+ */
+
+#include "mbed.h"
+#include "aconnoHelpers.h"
+#include "stdlib.h"
+#include "gnss.h"
+#include "aconnoConfig.h"
+
+bool getGPSData(char *location, GnssSerial *gnss)
+{
+	int gnssReturnCode;
+    int length;
+    char buffer[505];
+	bool gotLocationFlag = false;
+	
+	do
+	{
+		gnssReturnCode = gnss->getMessage(buffer, sizeof(buffer));
+		if (gnssReturnCode > 0)
+		{
+			// Msg from GNSS module received
+			length = LENGTH(gnssReturnCode);
+			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')) {
+							sprintf(location, "GNSS: location is %.5f %.5f.", latitude, longitude);
+							//printf("I am here: https://maps.google.com/?q=%.5f,%.5f\r\n\r\n",
+							//	   latitude, longitude);
+							printf("Got location!\r\n");
+							gotLocationFlag = true;
+						}
+					}
+					else if (CHECK_TALKER("GGA"))
+					{
+						double altitude = 0;
+						const char *timeString = NULL;
+						// Altitude
+						if (gnss->getNmeaItem(9, buffer, length, altitude))
+						{
+							printf("\r\nGNSS: altitude is %.1f m.\r\n", altitude);
+						}
+						// Time
+						timeString = gnss->findNmeaItemPos(1, buffer, buffer + length);
+						if (timeString != NULL) {
+							printf("\r\nGNSS: time is %.6s.\r\n\r\n", timeString);
+						}
+					}
+					else if (CHECK_TALKER("VTG"))
+					{
+						double speed = 0;
+						// Speed
+						if (gnss->getNmeaItem(7, buffer, length, speed))
+						{
+							printf("\r\nGNSS: speed is %.1f km/h.\r\n\r\n", speed);
+						}
+					}
+				}
+			}
+		}
+	}while(!gotLocationFlag);
+}