Bmag incl gps rettelse

Dependencies:   mbed WDT MODSERIAL BME280

Committer:
MAA
Date:
Wed Apr 19 11:45:58 2017 +0000
Revision:
18:87f243168f05
Parent:
5:11782a2008c2
Child:
21:325cb82f1838
Documentation of NMEA class added;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MAA 0:b3313c5ffca3 1 #include "NMEA.h"
MAA 0:b3313c5ffca3 2
MAA 18:87f243168f05 3 //! NMEA, default constructor
MAA 0:b3313c5ffca3 4 NMEA::NMEA(){
MAA 0:b3313c5ffca3 5
MAA 0:b3313c5ffca3 6 currentGGAString.resize(128);
MAA 0:b3313c5ffca3 7 currentGPRMCString.resize(128);
MAA 0:b3313c5ffca3 8 currentUTCFromGPRMC.resize(20);
MAA 0:b3313c5ffca3 9 currentDATEFromGPRMC.resize(10);
MAA 4:c70ef089a3fd 10 currentLongitude.resize(15);
MAA 4:c70ef089a3fd 11 currentLatitude.resize(15);
MAA 0:b3313c5ffca3 12
MAA 0:b3313c5ffca3 13 chkSumGps.resize(2);
MAA 4:c70ef089a3fd 14
MAA 4:c70ef089a3fd 15 memset(tmpArrDeg,'\0',7);
MAA 4:c70ef089a3fd 16 memset(tmpArrMin, '\0', 7);
MAA 4:c70ef089a3fd 17 memset(tmpLongitude, '\0', 15);
MAA 4:c70ef089a3fd 18 memset(tmpLatitude, '\0', 15);
MAA 0:b3313c5ffca3 19
MAA 4:c70ef089a3fd 20 iterationIndex = 0;
MAA 4:c70ef089a3fd 21 longitudeDD = 0.0;
MAA 4:c70ef089a3fd 22 latitudeDD = 0.0;
MAA 4:c70ef089a3fd 23
MAA 4:c70ef089a3fd 24 north = false;
MAA 4:c70ef089a3fd 25 south = false;
MAA 4:c70ef089a3fd 26 east = false;
MAA 4:c70ef089a3fd 27 west = false;
MAA 0:b3313c5ffca3 28 };
MAA 0:b3313c5ffca3 29
MAA 18:87f243168f05 30 //! ValidateData, method taking a text string for NMEA validation
MAA 18:87f243168f05 31 /*!
MAA 18:87f243168f05 32 ValidateData validates that the NMEA data string isn't corrupted.
MAA 18:87f243168f05 33 (Verification of crc)
MAA 18:87f243168f05 34
MAA 18:87f243168f05 35 \param cstStr An NMEA ascii string.
MAA 18:87f243168f05 36 \return boolean return value, true if crc corresponds to own calculated crc, else false.
MAA 18:87f243168f05 37 */
MAA 4:c70ef089a3fd 38 bool NMEA::ValidateData(string cstStr){
MAA 0:b3313c5ffca3 39
MAA 0:b3313c5ffca3 40 //Temporary variables used locally only
MAA 0:b3313c5ffca3 41 chkSum = 0;
MAA 0:b3313c5ffca3 42
MAA 0:b3313c5ffca3 43 //If for some reason the index is wrong, and the first character is not
MAA 0:b3313c5ffca3 44 //the beginning dollar sign of a gps string, return false at once.
MAA 0:b3313c5ffca3 45 if(cstStr[0] != '$'){
MAA 0:b3313c5ffca3 46 return false;
MAA 0:b3313c5ffca3 47 }
MAA 0:b3313c5ffca3 48
MAA 0:b3313c5ffca3 49 iterationIndex = 0;
MAA 0:b3313c5ffca3 50
MAA 0:b3313c5ffca3 51 //initializing calculated checksum
MAA 0:b3313c5ffca3 52 chkSumGps = " ";
MAA 0:b3313c5ffca3 53
MAA 0:b3313c5ffca3 54 //Calculating checksum to verify string integrity
MAA 0:b3313c5ffca3 55 for(char i = 1; i < cstStr.size(); i++){
MAA 0:b3313c5ffca3 56 //If at end of line for crc check, break
MAA 0:b3313c5ffca3 57 if(cstStr[i] == '*' || cstStr[i] == '\0'){
MAA 0:b3313c5ffca3 58 iterationIndex = i;
MAA 0:b3313c5ffca3 59 break;
MAA 0:b3313c5ffca3 60 }
MAA 0:b3313c5ffca3 61 //XOR crc calculation
MAA 0:b3313c5ffca3 62 chkSum ^= cstStr[i];
MAA 0:b3313c5ffca3 63
MAA 0:b3313c5ffca3 64 }
MAA 0:b3313c5ffca3 65
MAA 0:b3313c5ffca3 66 //Moving the checksum received into chkSumGps
MAA 0:b3313c5ffca3 67 iterationIndex++;
MAA 0:b3313c5ffca3 68 chkSumGps[0] = cstStr[iterationIndex];
MAA 0:b3313c5ffca3 69 iterationIndex++;
MAA 0:b3313c5ffca3 70 chkSumGps[1] = cstStr[iterationIndex];
MAA 0:b3313c5ffca3 71
MAA 0:b3313c5ffca3 72 GpsCheck = strtol(chkSumGps.c_str(), NULL ,16);
MAA 0:b3313c5ffca3 73
MAA 0:b3313c5ffca3 74 //Verify received and calculated crc equality
MAA 0:b3313c5ffca3 75 if(GpsCheck == chkSum){
MAA 0:b3313c5ffca3 76 return true;
MAA 0:b3313c5ffca3 77 }
MAA 0:b3313c5ffca3 78
MAA 0:b3313c5ffca3 79 //If unequal crc bytes found return false
MAA 0:b3313c5ffca3 80 return false;
MAA 0:b3313c5ffca3 81 };
MAA 0:b3313c5ffca3 82
MAA 18:87f243168f05 83 //! StoreString, method taking a text string as argument for further handling
MAA 18:87f243168f05 84 /*!
MAA 18:87f243168f05 85 StoreString, replaces current GPRMC or GGA string, with new valid GPRMC or GGA string.
MAA 0:b3313c5ffca3 86
MAA 18:87f243168f05 87 \param cstStr An NMEA ascii string.
MAA 18:87f243168f05 88 */
MAA 3:38eabaa92552 89 void NMEA::StoreString(string cstStr){
MAA 0:b3313c5ffca3 90 static std::string gga = "$GPGGA";
MAA 0:b3313c5ffca3 91 static std::string rmc = "$GPRMC";
MAA 0:b3313c5ffca3 92
MAA 0:b3313c5ffca3 93 //If received string is a GPGGA string
MAA 0:b3313c5ffca3 94 //copy GPGGA string to currentGGAString
MAA 0:b3313c5ffca3 95 if(cstStr.compare(0, 6, gga) == 0){
MAA 3:38eabaa92552 96
MAA 0:b3313c5ffca3 97 //replace current valid gga string with new valid gga string
MAA 3:38eabaa92552 98 currentGGAString.replace(0, 128, cstStr);
MAA 3:38eabaa92552 99
MAA 0:b3313c5ffca3 100 }
MAA 0:b3313c5ffca3 101
MAA 0:b3313c5ffca3 102 //If received string is a GPRMC string
MAA 0:b3313c5ffca3 103 //copy GPRMC string to currentGPRMCString
MAA 0:b3313c5ffca3 104 if(cstStr.compare(0, 6, rmc) == 0){
MAA 3:38eabaa92552 105
MAA 0:b3313c5ffca3 106 //replace current valid rmc string with new valid rmc string
MAA 0:b3313c5ffca3 107 currentGPRMCString.replace(0, 128, cstStr);
MAA 3:38eabaa92552 108
MAA 0:b3313c5ffca3 109 }
MAA 0:b3313c5ffca3 110
MAA 0:b3313c5ffca3 111 };
MAA 0:b3313c5ffca3 112
MAA 0:b3313c5ffca3 113
MAA 18:87f243168f05 114 //! ParseCurrentUTCFromGPRMC, grabs UTC timestamp from current stored GPRMC string.
MAA 18:87f243168f05 115 /*!
MAA 18:87f243168f05 116 ParseCurrentUTCFromGPRMC, grabs UTC timestamp from current stored GPRMC string.
MAA 18:87f243168f05 117 Stores the UTC timestamp in local text string.
MAA 18:87f243168f05 118
MAA 18:87f243168f05 119 Depending on the format it will be saved as:
MAA 18:87f243168f05 120 HH:MM:SS.FFF
MAA 18:87f243168f05 121 In this case FFF are read values fom the string.
MAA 18:87f243168f05 122 eg. 14:10:22.007
MAA 18:87f243168f05 123
MAA 18:87f243168f05 124 or
MAA 18:87f243168f05 125
MAA 18:87f243168f05 126 HH:MM:SS.FFF
MAA 18:87f243168f05 127 In this case FFF are predetermined values set to 0.
MAA 18:87f243168f05 128 eg. 14:10:22.000
MAA 18:87f243168f05 129 */
MAA 4:c70ef089a3fd 130 void NMEA::ParseCurrentUTCFromGPRMC(){
MAA 0:b3313c5ffca3 131
MAA 2:39c4a85dc2a4 132 //getting utc from GPRMC string, assign to tmpStr
MAA 4:c70ef089a3fd 133 getXFromNMEAString(1,currentGPRMCString);
MAA 2:39c4a85dc2a4 134
MAA 2:39c4a85dc2a4 135 currentUTCFromGPRMC = "";
MAA 2:39c4a85dc2a4 136 currentUTCFromGPRMC.resize(20);
MAA 2:39c4a85dc2a4 137
MAA 2:39c4a85dc2a4 138 //if time format == 10 characters
MAA 2:39c4a85dc2a4 139 if(strlen(tmpStr.c_str()) == 10){
MAA 2:39c4a85dc2a4 140
MAA 2:39c4a85dc2a4 141 //HH
MAA 2:39c4a85dc2a4 142 currentUTCFromGPRMC[0] = tmpStr[0];
MAA 2:39c4a85dc2a4 143 currentUTCFromGPRMC[1] = tmpStr[1];
MAA 2:39c4a85dc2a4 144 currentUTCFromGPRMC[2] = ':';
MAA 2:39c4a85dc2a4 145
MAA 2:39c4a85dc2a4 146 //MM
MAA 2:39c4a85dc2a4 147 currentUTCFromGPRMC[3] = tmpStr[2];
MAA 2:39c4a85dc2a4 148 currentUTCFromGPRMC[4] = tmpStr[3];
MAA 2:39c4a85dc2a4 149 currentUTCFromGPRMC[5] = ':';
MAA 2:39c4a85dc2a4 150
MAA 2:39c4a85dc2a4 151 //SS
MAA 2:39c4a85dc2a4 152 currentUTCFromGPRMC[6] = tmpStr[4];
MAA 2:39c4a85dc2a4 153 currentUTCFromGPRMC[7] = tmpStr[5];
MAA 2:39c4a85dc2a4 154 currentUTCFromGPRMC[8] = '.';
MAA 2:39c4a85dc2a4 155
MAA 2:39c4a85dc2a4 156 //FFF
MAA 2:39c4a85dc2a4 157 currentUTCFromGPRMC[9] = tmpStr[7];
MAA 2:39c4a85dc2a4 158 currentUTCFromGPRMC[10] = tmpStr[8];
MAA 2:39c4a85dc2a4 159 currentUTCFromGPRMC[11] = tmpStr[9];
MAA 2:39c4a85dc2a4 160 }
MAA 2:39c4a85dc2a4 161
MAA 2:39c4a85dc2a4 162 //if time format == 6 characters
MAA 2:39c4a85dc2a4 163 if(strlen(tmpStr.c_str()) == 6){
MAA 2:39c4a85dc2a4 164
MAA 2:39c4a85dc2a4 165 //HH
MAA 2:39c4a85dc2a4 166 currentUTCFromGPRMC[0] = tmpStr[0];
MAA 2:39c4a85dc2a4 167 currentUTCFromGPRMC[1] = tmpStr[1];
MAA 2:39c4a85dc2a4 168 currentUTCFromGPRMC[2] = ':';
MAA 2:39c4a85dc2a4 169
MAA 2:39c4a85dc2a4 170 //MM
MAA 2:39c4a85dc2a4 171 currentUTCFromGPRMC[3] = tmpStr[2];
MAA 2:39c4a85dc2a4 172 currentUTCFromGPRMC[4] = tmpStr[3];
MAA 2:39c4a85dc2a4 173 currentUTCFromGPRMC[5] = ':';
MAA 2:39c4a85dc2a4 174
MAA 2:39c4a85dc2a4 175 //SS
MAA 2:39c4a85dc2a4 176 currentUTCFromGPRMC[6] = tmpStr[4];
MAA 2:39c4a85dc2a4 177 currentUTCFromGPRMC[7] = tmpStr[5];
MAA 2:39c4a85dc2a4 178 currentUTCFromGPRMC[8] = '.';
MAA 2:39c4a85dc2a4 179
MAA 2:39c4a85dc2a4 180 //FFF
MAA 2:39c4a85dc2a4 181 currentUTCFromGPRMC[9] = '0';
MAA 2:39c4a85dc2a4 182 currentUTCFromGPRMC[10] = '0';
MAA 2:39c4a85dc2a4 183 currentUTCFromGPRMC[11] = '0';
MAA 2:39c4a85dc2a4 184 }
MAA 0:b3313c5ffca3 185
MAA 0:b3313c5ffca3 186 };
MAA 0:b3313c5ffca3 187
MAA 18:87f243168f05 188 //! ParseCurrentDateFromGPRMC, grabs current date from current GPRMC string.
MAA 18:87f243168f05 189 /*!
MAA 18:87f243168f05 190 ParseCurrentDateFromGPRMC, grabs current date from current GPRMC string.
MAA 18:87f243168f05 191 Stores the Date in a local text string.
MAA 18:87f243168f05 192
MAA 18:87f243168f05 193 will be stored in the format:
MAA 18:87f243168f05 194 YYYY/MM/DD
MAA 18:87f243168f05 195 */
MAA 4:c70ef089a3fd 196 void NMEA::ParseCurrentDateFromGPRMC(){
MAA 2:39c4a85dc2a4 197
MAA 2:39c4a85dc2a4 198 //Getting date from GPRMC string, assigning to tmpStr
MAA 4:c70ef089a3fd 199 getXFromNMEAString(9,currentGPRMCString);
MAA 0:b3313c5ffca3 200
MAA 2:39c4a85dc2a4 201 currentDATEFromGPRMC = "";
MAA 2:39c4a85dc2a4 202 currentDATEFromGPRMC.resize(20);
MAA 2:39c4a85dc2a4 203
MAA 2:39c4a85dc2a4 204 //if date string is the expected length
MAA 2:39c4a85dc2a4 205 if(strlen(tmpStr.c_str()) == 6){
MAA 2:39c4a85dc2a4 206
MAA 2:39c4a85dc2a4 207 //Year
MAA 2:39c4a85dc2a4 208 currentDATEFromGPRMC[0] = '2';
MAA 2:39c4a85dc2a4 209 currentDATEFromGPRMC[1] = '0';
MAA 2:39c4a85dc2a4 210 currentDATEFromGPRMC[2] = tmpStr[4];
MAA 2:39c4a85dc2a4 211 currentDATEFromGPRMC[3] = tmpStr[5];
MAA 2:39c4a85dc2a4 212 currentDATEFromGPRMC[4] = '/';
MAA 2:39c4a85dc2a4 213
MAA 2:39c4a85dc2a4 214 //Month
MAA 2:39c4a85dc2a4 215 currentDATEFromGPRMC[5] = tmpStr[2];
MAA 2:39c4a85dc2a4 216 currentDATEFromGPRMC[6] = tmpStr[3];
MAA 2:39c4a85dc2a4 217 currentDATEFromGPRMC[7] = '/';
MAA 2:39c4a85dc2a4 218
MAA 2:39c4a85dc2a4 219 //Date
MAA 2:39c4a85dc2a4 220 currentDATEFromGPRMC[8] = tmpStr[0];
MAA 2:39c4a85dc2a4 221 currentDATEFromGPRMC[9] = tmpStr[1];
MAA 3:38eabaa92552 222 }
MAA 0:b3313c5ffca3 223 };
MAA 0:b3313c5ffca3 224
MAA 18:87f243168f05 225
MAA 18:87f243168f05 226 //! GGAFixVerification, returns gps fix indication.
MAA 18:87f243168f05 227 /*!
MAA 18:87f243168f05 228 GGAFixVerification verifies gga fix status in current GGA string.
MAA 18:87f243168f05 229
MAA 18:87f243168f05 230 \return boolean value indicating GGA fix if true, else false.
MAA 18:87f243168f05 231 */
MAA 3:38eabaa92552 232 bool NMEA::GGAFixVerification(){
MAA 3:38eabaa92552 233
MAA 0:b3313c5ffca3 234 //accessing the string after the sixth comma, which is the gga fix column
MAA 0:b3313c5ffca3 235
MAA 0:b3313c5ffca3 236 char commaCount = 0;
MAA 0:b3313c5ffca3 237 char index = 0;
MAA 5:11782a2008c2 238 char stringLength = strlen(currentGGAString.c_str());
MAA 0:b3313c5ffca3 239
MAA 5:11782a2008c2 240 while((commaCount < 7) && (currentGGAString[index] != '\0') && (index < stringLength) ){
MAA 0:b3313c5ffca3 241 if(currentGGAString[index] == ','){
MAA 0:b3313c5ffca3 242 commaCount += 1;
MAA 0:b3313c5ffca3 243 }
MAA 0:b3313c5ffca3 244
MAA 0:b3313c5ffca3 245
MAA 0:b3313c5ffca3 246 //if gga fix is 1 or 2, gga fix is sufficient, return true
MAA 0:b3313c5ffca3 247 if(commaCount == 6){
MAA 0:b3313c5ffca3 248 if(currentGGAString[index+1] == '1'){
MAA 0:b3313c5ffca3 249 return true;
MAA 0:b3313c5ffca3 250 }
MAA 0:b3313c5ffca3 251
MAA 0:b3313c5ffca3 252 if(currentGGAString[index+1] == '2'){
MAA 0:b3313c5ffca3 253 return true;
MAA 0:b3313c5ffca3 254 }
MAA 0:b3313c5ffca3 255
MAA 0:b3313c5ffca3 256 break;
MAA 0:b3313c5ffca3 257 }
MAA 0:b3313c5ffca3 258
MAA 0:b3313c5ffca3 259 index += 1;
MAA 0:b3313c5ffca3 260
MAA 0:b3313c5ffca3 261 }
MAA 3:38eabaa92552 262
MAA 3:38eabaa92552 263 return false;
MAA 3:38eabaa92552 264 };
MAA 3:38eabaa92552 265
MAA 18:87f243168f05 266 //! ParseCurrentLatitudeFromGPRMC, grabs current latitude from current GPRMC string.
MAA 18:87f243168f05 267 /*!
MAA 18:87f243168f05 268 Converts the latitude into decimaldegrees and stores the current latitude.
MAA 18:87f243168f05 269 */
MAA 4:c70ef089a3fd 270 void NMEA::ParseCurrentLatitudeFromGPRMC(){
MAA 0:b3313c5ffca3 271
MAA 4:c70ef089a3fd 272 north = false;
MAA 4:c70ef089a3fd 273 south = false;
MAA 4:c70ef089a3fd 274
MAA 4:c70ef089a3fd 275 memset(tmpArrDeg,'\0',7);
MAA 4:c70ef089a3fd 276 memset(tmpArrMin, '\0', 7);
MAA 4:c70ef089a3fd 277 memset(tmpLatitude, '\0', 15);
MAA 3:38eabaa92552 278 currentLatitude = "";
MAA 3:38eabaa92552 279 currentLatitude.resize(20);
MAA 3:38eabaa92552 280
MAA 4:c70ef089a3fd 281
MAA 4:c70ef089a3fd 282 //Getting Latitude from GPRMC string, assigning to tmpStr
MAA 4:c70ef089a3fd 283 getXFromNMEAString(3,currentGPRMCString);
MAA 4:c70ef089a3fd 284
MAA 4:c70ef089a3fd 285 tmpArrDeg[0] = tmpStr[0];
MAA 4:c70ef089a3fd 286 tmpArrDeg[1] = tmpStr[1];
MAA 3:38eabaa92552 287
MAA 4:c70ef089a3fd 288 tmpArrMin[0] = tmpStr[2];
MAA 4:c70ef089a3fd 289 tmpArrMin[1] = tmpStr[3];
MAA 4:c70ef089a3fd 290 tmpArrMin[2] = tmpStr[4];
MAA 4:c70ef089a3fd 291 tmpArrMin[3] = tmpStr[5];
MAA 4:c70ef089a3fd 292 tmpArrMin[4] = tmpStr[6];
MAA 4:c70ef089a3fd 293
MAA 3:38eabaa92552 294 //getting N/S
MAA 5:11782a2008c2 295 getXFromNMEAString(4,currentGPRMCString);
MAA 4:c70ef089a3fd 296 if(tmpStr[0] == 'N' || tmpStr[0] == 'n'){
MAA 4:c70ef089a3fd 297 north = true;
MAA 4:c70ef089a3fd 298 currentLatitude[0] = '+';
MAA 4:c70ef089a3fd 299 }
MAA 3:38eabaa92552 300
MAA 4:c70ef089a3fd 301 if(tmpStr[0] == 'S' || tmpStr[0] == 's'){
MAA 4:c70ef089a3fd 302 south = true;
MAA 4:c70ef089a3fd 303 currentLatitude[0] = '-';
MAA 4:c70ef089a3fd 304 }
MAA 4:c70ef089a3fd 305
MAA 3:38eabaa92552 306
MAA 4:c70ef089a3fd 307 latitudeDD = ((atof(tmpArrDeg) + (atof(tmpArrMin)/60)));
MAA 4:c70ef089a3fd 308
MAA 4:c70ef089a3fd 309 sprintf(tmpLatitude, "%0.6f",latitudeDD);
MAA 4:c70ef089a3fd 310 for(int i = 0; i < strlen(tmpLatitude); i++){
MAA 4:c70ef089a3fd 311 currentLatitude[i+1] = tmpLatitude[i];
MAA 4:c70ef089a3fd 312 }
MAA 3:38eabaa92552 313 };
MAA 3:38eabaa92552 314
MAA 18:87f243168f05 315 //! ParseCurrentLongitudeFromGPRMC, grabs current longitude from current GPRMC string.
MAA 18:87f243168f05 316 /*!
MAA 18:87f243168f05 317 Converts the longitude into decimaldegrees and stores the current longitude.
MAA 18:87f243168f05 318 */
MAA 4:c70ef089a3fd 319 void NMEA::ParseCurrentLongitudeFromGPRMC(){
MAA 4:c70ef089a3fd 320
MAA 4:c70ef089a3fd 321 east = false;
MAA 4:c70ef089a3fd 322 west = false;
MAA 4:c70ef089a3fd 323
MAA 4:c70ef089a3fd 324 memset(tmpArrDeg,'\0',7);
MAA 4:c70ef089a3fd 325 memset(tmpArrMin, '\0', 7);
MAA 4:c70ef089a3fd 326 memset(tmpLongitude, '\0', 15);
MAA 3:38eabaa92552 327 currentLongitude = "";
MAA 3:38eabaa92552 328 currentLongitude.resize(20);
MAA 3:38eabaa92552 329
MAA 4:c70ef089a3fd 330
MAA 4:c70ef089a3fd 331 //Getting Longitude from GPRMC string, assigning to tmpStr
MAA 4:c70ef089a3fd 332 getXFromNMEAString(5,currentGPRMCString);
MAA 4:c70ef089a3fd 333
MAA 4:c70ef089a3fd 334 tmpArrDeg[0] = tmpStr[0];
MAA 4:c70ef089a3fd 335 tmpArrDeg[1] = tmpStr[1];
MAA 4:c70ef089a3fd 336 tmpArrDeg[2] = tmpStr[2];
MAA 3:38eabaa92552 337
MAA 4:c70ef089a3fd 338 tmpArrMin[0] = tmpStr[3];
MAA 4:c70ef089a3fd 339 tmpArrMin[1] = tmpStr[4];
MAA 4:c70ef089a3fd 340 tmpArrMin[2] = tmpStr[5];
MAA 4:c70ef089a3fd 341 tmpArrMin[3] = tmpStr[6];
MAA 4:c70ef089a3fd 342 tmpArrMin[4] = tmpStr[7];
MAA 4:c70ef089a3fd 343 tmpArrMin[5] = tmpStr[8];
MAA 4:c70ef089a3fd 344 tmpArrMin[6] = tmpStr[9];
MAA 4:c70ef089a3fd 345
MAA 3:38eabaa92552 346 //getting E/W
MAA 5:11782a2008c2 347 getXFromNMEAString(6,currentGPRMCString);
MAA 4:c70ef089a3fd 348 if(tmpStr[0] == 'E' || tmpStr[0] == 'e'){
MAA 4:c70ef089a3fd 349 east = true;
MAA 4:c70ef089a3fd 350 currentLongitude[0] = '+';
MAA 4:c70ef089a3fd 351 }
MAA 4:c70ef089a3fd 352 if(tmpStr[0] == 'W' || tmpStr[0] == 'w'){
MAA 4:c70ef089a3fd 353 west = true;
MAA 4:c70ef089a3fd 354 currentLongitude[0] = '-';
MAA 4:c70ef089a3fd 355 }
MAA 4:c70ef089a3fd 356
MAA 4:c70ef089a3fd 357 longitudeDD = ((atof(tmpArrDeg) + (atof(tmpArrMin)/60)));
MAA 3:38eabaa92552 358
MAA 4:c70ef089a3fd 359 sprintf(tmpLongitude, "%0.6f",longitudeDD);
MAA 4:c70ef089a3fd 360 for(int i = 0; i < strlen(tmpLongitude); i++){
MAA 4:c70ef089a3fd 361 currentLongitude[i+1] = tmpLongitude[i];
MAA 4:c70ef089a3fd 362 }
MAA 4:c70ef089a3fd 363
MAA 2:39c4a85dc2a4 364 };
MAA 2:39c4a85dc2a4 365
MAA 18:87f243168f05 366
MAA 18:87f243168f05 367 //! getXFromNMEAString, grabs desired data column from NMEA string, stores it for further manipulation in tmpStr
MAA 18:87f243168f05 368 /*!
MAA 18:87f243168f05 369 \param desiredCommaCount integer designating which column to store
MAA 18:87f243168f05 370 \param stringToParse string parameter containing the NMEA string.
MAA 18:87f243168f05 371 */
MAA 4:c70ef089a3fd 372 void NMEA::getXFromNMEAString(int desiredCommaCount, string stringToParse){
MAA 2:39c4a85dc2a4 373
MAA 2:39c4a85dc2a4 374 //clearing tmpStr
MAA 2:39c4a85dc2a4 375 tmpStr = "";
MAA 3:38eabaa92552 376 tmpStr.resize(15);
MAA 5:11782a2008c2 377 char stringLength = strlen(stringToParse.c_str());
MAA 2:39c4a85dc2a4 378
MAA 2:39c4a85dc2a4 379 int commaCnt = 0;
MAA 2:39c4a85dc2a4 380 int index = 0;
MAA 2:39c4a85dc2a4 381 int idx = 0;
MAA 2:39c4a85dc2a4 382
MAA 5:11782a2008c2 383 while(commaCnt < (desiredCommaCount+1) && (index < stringLength)){
MAA 2:39c4a85dc2a4 384
MAA 2:39c4a85dc2a4 385 if(stringToParse[index] == ','){
MAA 2:39c4a85dc2a4 386 commaCnt += 1;
MAA 2:39c4a85dc2a4 387 }
MAA 2:39c4a85dc2a4 388
MAA 2:39c4a85dc2a4 389 if((commaCnt == desiredCommaCount) && (stringToParse[index] != ',')){
MAA 2:39c4a85dc2a4 390 tmpStr[idx] = stringToParse[index];
MAA 2:39c4a85dc2a4 391 idx += 1;
MAA 2:39c4a85dc2a4 392 }
MAA 2:39c4a85dc2a4 393
MAA 2:39c4a85dc2a4 394 index += 1;
MAA 2:39c4a85dc2a4 395 }
MAA 2:39c4a85dc2a4 396
MAA 0:b3313c5ffca3 397 };