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
Diff: aconnoHelpers/aconnoHelpers.cpp
- Revision:
- 8:2bf886335fd0
- Child:
- 9:f943c09d9173
--- /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); +}