Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of MTS-Cellular by
Diff: Cellular/EasyIP.cpp
- Revision:
- 78:fc9d2b983744
- Parent:
- 76:6eeffc10739d
- Child:
- 81:b0a720f7deae
--- a/Cellular/EasyIP.cpp Tue Jul 28 16:18:45 2015 +0000 +++ b/Cellular/EasyIP.cpp Mon Aug 17 21:05:41 2015 +0000 @@ -3,6 +3,7 @@ #include "MTSText.h" #include "MTSLog.h" #include "CellUtils.h" +#include <string> using namespace mts; @@ -14,6 +15,7 @@ dtr = NULL; resetLine = NULL; echoMode = true; + gpsEnabled = false; pppConnected = false; socketMode = TCP; socketOpened = false; @@ -680,3 +682,126 @@ } return status; } + +bool EasyIP::GPSenable() { +//The HE910 returns an ERROR if you try to enable when it is already enabled. +// That's why we need to check if GPS is enabled before enabling it. + if(GPSenabled()) { + logInfo("GPS was already enabled."); + return true; + } +//The LE910-NAG requires AT$GPSSLSR=2,3 to enable GPS but can use AT$GPSP=0 to disable it. + if(type == MTSMC_LAT1){ + Code code = sendBasicCommand("AT$GPSSLSR=2,3", 2000); + if (code == MTS_SUCCESS) { + gpsEnabled = true; + logInfo("GPS enabled."); + return true; + } else { + logError("Enable GPS failed!"); + return false; + } + } else { + Code code = sendBasicCommand("AT$GPSP=1", 2000); + if (code == MTS_SUCCESS) { + gpsEnabled = true; + logInfo("GPS enabled."); + return true; + } else { + logError("Enable GPS failed."); + return false; + } + } +} + +bool EasyIP::GPSdisable() { +// The HE910 returns an ERROR if you try to disable when it is already disabled. +// That's why we need to check if GPS is disabled before disabling it. + if(!GPSenabled()) { + logInfo("GPS was already disabled."); + return true; + } + Code code = sendBasicCommand("AT$GPSP=0", 2000); + if (code == MTS_SUCCESS) { + gpsEnabled = false; + logInfo("GPS disabled."); + return true; + } else { + logError("Disable GPS failed."); + return false; + } +} + +bool EasyIP::GPSenabled() { + std::string reply = sendCommand("AT$GPSP?", 1000); + if(reply.find("1") != std::string::npos) { + gpsEnabled = true; + return true; + } else { + gpsEnabled = false; + return false; + } +} + +Cellular::gpsData EasyIP::GPSgetPosition(){ + enum gpsFields{time, latitude, longitude, hdop, altitude, fix, cog, kmhr, knots, date, satellites, numOfFields }; + Cellular::gpsData position; + if(!gpsEnabled) { + logError("GPS is disabled... can't get position."); + position.success = false; + return position; + } + // Get the position information in string format. + std::string gps = sendCommand("AT$GPSACP?", 1000); + if(gps.find("OK") != std::string::npos) { + position.success = true; + // Remove echoed AT$GPSACP and leading non position characters. + gps.erase(0,22); + // Remove trailing CR/LF, CR/LF, OK and CR/LF. + gps.erase(gps.end()-8, gps.end()); + // Split remaining data and load into corresponding structure fields. + std::vector<std::string> gpsParts = Text::split(gps, ','); + // Check size. + if(gpsParts.size() != numOfFields) { + logError("Expected %d fields but there are %d fields in \"%s\"", numOfFields, gpsParts.size(), gps.c_str()); + position.success = false; + return position; + } + position.latitude = gpsParts[latitude]; + position.longitude = gpsParts[longitude]; + position.hdop = atof(gpsParts[hdop].c_str()); + position.altitude = atof(gpsParts[altitude].c_str()); + position.fix = atoi(gpsParts[fix].c_str()); + position.cog = gpsParts[cog]; + position.kmhr = atof(gpsParts[kmhr].c_str()); + position.knots = atof(gpsParts[knots].c_str()); + position.satellites = atoi(gpsParts[satellites].c_str()); + if((gpsParts[date].size() == 6) && (gpsParts[time].size() == 10)) { + position.timestamp = gpsParts[date].substr(4,2) + "/" + gpsParts[date].substr(2,2) + + "/" + gpsParts[date].substr(0,2) + ", " + gpsParts[time].substr(0,2) + + ":" + gpsParts[time].substr(2,2) + ":" + gpsParts[time].substr(4,6); + } + return position; + } else { + position.success = false; + logError("NO \"OK\" returned from GPS position command \"AT$GPSACP?\"."); + return position; + } +} + +bool EasyIP::GPSgotFix() { + if(!gpsEnabled) { + logError("GPS is disabled... can't get fix."); + return false; + } + Cellular::gpsData position = GPSgetPosition(); + if(!position.success) { + return false; + } else if(position.fix < 2){ + logWarning("No GPS fix. GPS fix can take a few minutes. Check GPS antenna attachment and placement."); + return false; + } else { + logInfo("Got GPS fix."); + return true; + } +} \ No newline at end of file