Bmag incl gps rettelse

Dependencies:   mbed WDT MODSERIAL BME280

Committer:
gert_lauritsen
Date:
Thu Jun 20 07:13:18 2019 +0000
Revision:
56:df9052e3808c
Parent:
21:325cb82f1838
change date stamp from gps, reads serialnumb from file.

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 */
gert_lauritsen 56:df9052e3808c 196 int strtoint(string Str, int index) {
gert_lauritsen 56:df9052e3808c 197 char value[3];
gert_lauritsen 56:df9052e3808c 198 value[0]=Str[index];
gert_lauritsen 56:df9052e3808c 199 value[1]=Str[index+1];
gert_lauritsen 56:df9052e3808c 200 return atoi(value);
gert_lauritsen 56:df9052e3808c 201 }
gert_lauritsen 56:df9052e3808c 202
MAA 4:c70ef089a3fd 203 void NMEA::ParseCurrentDateFromGPRMC(){
MAA 2:39c4a85dc2a4 204
MAA 2:39c4a85dc2a4 205 //Getting date from GPRMC string, assigning to tmpStr
MAA 4:c70ef089a3fd 206 getXFromNMEAString(9,currentGPRMCString);
gert_lauritsen 56:df9052e3808c 207
MAA 2:39c4a85dc2a4 208 currentDATEFromGPRMC = "";
MAA 2:39c4a85dc2a4 209 currentDATEFromGPRMC.resize(20);
gert_lauritsen 56:df9052e3808c 210 char tmpdate[20];
MAA 2:39c4a85dc2a4 211 //if date string is the expected length
MAA 2:39c4a85dc2a4 212 if(strlen(tmpStr.c_str()) == 6){
gert_lauritsen 56:df9052e3808c 213 int y=strtoint(tmpStr,4);
gert_lauritsen 56:df9052e3808c 214 int m=strtoint(tmpStr,2);
gert_lauritsen 56:df9052e3808c 215 int d=strtoint(tmpStr,0);
gert_lauritsen 56:df9052e3808c 216 struct tm t = { .tm_year=y, .tm_mon=m-1, .tm_mday=d };
gert_lauritsen 56:df9052e3808c 217 t.tm_mday += 1024*7; //rollover compentation
gert_lauritsen 56:df9052e3808c 218 mktime(&t);
gert_lauritsen 56:df9052e3808c 219 strftime (tmpdate,20,"%G/%m/%e",&t);
gert_lauritsen 56:df9052e3808c 220 for (int i=0; i<20; i++) currentDATEFromGPRMC[i]=tmpdate[i];
MAA 3:38eabaa92552 221 }
MAA 0:b3313c5ffca3 222 };
MAA 0:b3313c5ffca3 223
MAA 18:87f243168f05 224
MAA 18:87f243168f05 225 //! GGAFixVerification, returns gps fix indication.
MAA 18:87f243168f05 226 /*!
MAA 18:87f243168f05 227 GGAFixVerification verifies gga fix status in current GGA string.
MAA 18:87f243168f05 228
MAA 18:87f243168f05 229 \return boolean value indicating GGA fix if true, else false.
MAA 18:87f243168f05 230 */
MAA 3:38eabaa92552 231 bool NMEA::GGAFixVerification(){
MAA 3:38eabaa92552 232
MAA 0:b3313c5ffca3 233 //accessing the string after the sixth comma, which is the gga fix column
MAA 0:b3313c5ffca3 234
MAA 0:b3313c5ffca3 235 char commaCount = 0;
MAA 0:b3313c5ffca3 236 char index = 0;
MAA 5:11782a2008c2 237 char stringLength = strlen(currentGGAString.c_str());
MAA 0:b3313c5ffca3 238
MAA 5:11782a2008c2 239 while((commaCount < 7) && (currentGGAString[index] != '\0') && (index < stringLength) ){
MAA 0:b3313c5ffca3 240 if(currentGGAString[index] == ','){
MAA 0:b3313c5ffca3 241 commaCount += 1;
MAA 0:b3313c5ffca3 242 }
MAA 0:b3313c5ffca3 243
MAA 0:b3313c5ffca3 244
MAA 0:b3313c5ffca3 245 //if gga fix is 1 or 2, gga fix is sufficient, return true
MAA 0:b3313c5ffca3 246 if(commaCount == 6){
MAA 0:b3313c5ffca3 247 if(currentGGAString[index+1] == '1'){
MAA 0:b3313c5ffca3 248 return true;
MAA 0:b3313c5ffca3 249 }
MAA 0:b3313c5ffca3 250
MAA 0:b3313c5ffca3 251 if(currentGGAString[index+1] == '2'){
MAA 0:b3313c5ffca3 252 return true;
MAA 0:b3313c5ffca3 253 }
MAA 0:b3313c5ffca3 254
MAA 0:b3313c5ffca3 255 break;
MAA 0:b3313c5ffca3 256 }
MAA 0:b3313c5ffca3 257
MAA 0:b3313c5ffca3 258 index += 1;
MAA 0:b3313c5ffca3 259
MAA 0:b3313c5ffca3 260 }
MAA 3:38eabaa92552 261
MAA 3:38eabaa92552 262 return false;
MAA 3:38eabaa92552 263 };
MAA 3:38eabaa92552 264
MAA 18:87f243168f05 265 //! ParseCurrentLatitudeFromGPRMC, grabs current latitude from current GPRMC string.
MAA 18:87f243168f05 266 /*!
MAA 18:87f243168f05 267 Converts the latitude into decimaldegrees and stores the current latitude.
MAA 18:87f243168f05 268 */
MAA 4:c70ef089a3fd 269 void NMEA::ParseCurrentLatitudeFromGPRMC(){
MAA 0:b3313c5ffca3 270
MAA 4:c70ef089a3fd 271 north = false;
MAA 4:c70ef089a3fd 272 south = false;
MAA 4:c70ef089a3fd 273
MAA 4:c70ef089a3fd 274 memset(tmpArrDeg,'\0',7);
MAA 4:c70ef089a3fd 275 memset(tmpArrMin, '\0', 7);
MAA 4:c70ef089a3fd 276 memset(tmpLatitude, '\0', 15);
MAA 3:38eabaa92552 277 currentLatitude = "";
MAA 3:38eabaa92552 278 currentLatitude.resize(20);
MAA 3:38eabaa92552 279
MAA 4:c70ef089a3fd 280
MAA 4:c70ef089a3fd 281 //Getting Latitude from GPRMC string, assigning to tmpStr
MAA 4:c70ef089a3fd 282 getXFromNMEAString(3,currentGPRMCString);
MAA 4:c70ef089a3fd 283
MAA 4:c70ef089a3fd 284 tmpArrDeg[0] = tmpStr[0];
MAA 4:c70ef089a3fd 285 tmpArrDeg[1] = tmpStr[1];
MAA 3:38eabaa92552 286
MAA 4:c70ef089a3fd 287 tmpArrMin[0] = tmpStr[2];
MAA 4:c70ef089a3fd 288 tmpArrMin[1] = tmpStr[3];
MAA 4:c70ef089a3fd 289 tmpArrMin[2] = tmpStr[4];
MAA 4:c70ef089a3fd 290 tmpArrMin[3] = tmpStr[5];
MAA 4:c70ef089a3fd 291 tmpArrMin[4] = tmpStr[6];
MAA 4:c70ef089a3fd 292
MAA 3:38eabaa92552 293 //getting N/S
MAA 5:11782a2008c2 294 getXFromNMEAString(4,currentGPRMCString);
MAA 4:c70ef089a3fd 295 if(tmpStr[0] == 'N' || tmpStr[0] == 'n'){
MAA 4:c70ef089a3fd 296 north = true;
MAA 4:c70ef089a3fd 297 currentLatitude[0] = '+';
MAA 4:c70ef089a3fd 298 }
MAA 3:38eabaa92552 299
MAA 4:c70ef089a3fd 300 if(tmpStr[0] == 'S' || tmpStr[0] == 's'){
MAA 4:c70ef089a3fd 301 south = true;
MAA 4:c70ef089a3fd 302 currentLatitude[0] = '-';
MAA 4:c70ef089a3fd 303 }
MAA 4:c70ef089a3fd 304
MAA 3:38eabaa92552 305
MAA 4:c70ef089a3fd 306 latitudeDD = ((atof(tmpArrDeg) + (atof(tmpArrMin)/60)));
MAA 4:c70ef089a3fd 307
MAA 4:c70ef089a3fd 308 sprintf(tmpLatitude, "%0.6f",latitudeDD);
MAA 4:c70ef089a3fd 309 for(int i = 0; i < strlen(tmpLatitude); i++){
MAA 4:c70ef089a3fd 310 currentLatitude[i+1] = tmpLatitude[i];
MAA 4:c70ef089a3fd 311 }
MAA 3:38eabaa92552 312 };
MAA 3:38eabaa92552 313
MAA 18:87f243168f05 314 //! ParseCurrentLongitudeFromGPRMC, grabs current longitude from current GPRMC string.
MAA 18:87f243168f05 315 /*!
MAA 18:87f243168f05 316 Converts the longitude into decimaldegrees and stores the current longitude.
MAA 18:87f243168f05 317 */
MAA 4:c70ef089a3fd 318 void NMEA::ParseCurrentLongitudeFromGPRMC(){
MAA 4:c70ef089a3fd 319
MAA 4:c70ef089a3fd 320 east = false;
MAA 4:c70ef089a3fd 321 west = false;
MAA 4:c70ef089a3fd 322
MAA 4:c70ef089a3fd 323 memset(tmpArrDeg,'\0',7);
MAA 4:c70ef089a3fd 324 memset(tmpArrMin, '\0', 7);
MAA 4:c70ef089a3fd 325 memset(tmpLongitude, '\0', 15);
MAA 3:38eabaa92552 326 currentLongitude = "";
MAA 3:38eabaa92552 327 currentLongitude.resize(20);
MAA 3:38eabaa92552 328
MAA 4:c70ef089a3fd 329
MAA 4:c70ef089a3fd 330 //Getting Longitude from GPRMC string, assigning to tmpStr
MAA 4:c70ef089a3fd 331 getXFromNMEAString(5,currentGPRMCString);
MAA 4:c70ef089a3fd 332
MAA 4:c70ef089a3fd 333 tmpArrDeg[0] = tmpStr[0];
MAA 4:c70ef089a3fd 334 tmpArrDeg[1] = tmpStr[1];
MAA 4:c70ef089a3fd 335 tmpArrDeg[2] = tmpStr[2];
MAA 3:38eabaa92552 336
MAA 4:c70ef089a3fd 337 tmpArrMin[0] = tmpStr[3];
MAA 4:c70ef089a3fd 338 tmpArrMin[1] = tmpStr[4];
MAA 4:c70ef089a3fd 339 tmpArrMin[2] = tmpStr[5];
MAA 4:c70ef089a3fd 340 tmpArrMin[3] = tmpStr[6];
MAA 4:c70ef089a3fd 341 tmpArrMin[4] = tmpStr[7];
MAA 4:c70ef089a3fd 342 tmpArrMin[5] = tmpStr[8];
MAA 4:c70ef089a3fd 343 tmpArrMin[6] = tmpStr[9];
MAA 4:c70ef089a3fd 344
MAA 3:38eabaa92552 345 //getting E/W
MAA 5:11782a2008c2 346 getXFromNMEAString(6,currentGPRMCString);
MAA 4:c70ef089a3fd 347 if(tmpStr[0] == 'E' || tmpStr[0] == 'e'){
MAA 4:c70ef089a3fd 348 east = true;
MAA 4:c70ef089a3fd 349 currentLongitude[0] = '+';
MAA 4:c70ef089a3fd 350 }
MAA 4:c70ef089a3fd 351 if(tmpStr[0] == 'W' || tmpStr[0] == 'w'){
MAA 4:c70ef089a3fd 352 west = true;
MAA 4:c70ef089a3fd 353 currentLongitude[0] = '-';
MAA 4:c70ef089a3fd 354 }
MAA 4:c70ef089a3fd 355
MAA 4:c70ef089a3fd 356 longitudeDD = ((atof(tmpArrDeg) + (atof(tmpArrMin)/60)));
MAA 3:38eabaa92552 357
MAA 4:c70ef089a3fd 358 sprintf(tmpLongitude, "%0.6f",longitudeDD);
MAA 4:c70ef089a3fd 359 for(int i = 0; i < strlen(tmpLongitude); i++){
MAA 4:c70ef089a3fd 360 currentLongitude[i+1] = tmpLongitude[i];
MAA 4:c70ef089a3fd 361 }
MAA 4:c70ef089a3fd 362
MAA 2:39c4a85dc2a4 363 };
MAA 2:39c4a85dc2a4 364
MAA 18:87f243168f05 365
MAA 18:87f243168f05 366 //! getXFromNMEAString, grabs desired data column from NMEA string, stores it for further manipulation in tmpStr
MAA 18:87f243168f05 367 /*!
MAA 18:87f243168f05 368 \param desiredCommaCount integer designating which column to store
MAA 18:87f243168f05 369 \param stringToParse string parameter containing the NMEA string.
MAA 18:87f243168f05 370 */
MAA 4:c70ef089a3fd 371 void NMEA::getXFromNMEAString(int desiredCommaCount, string stringToParse){
MAA 2:39c4a85dc2a4 372
MAA 2:39c4a85dc2a4 373 //clearing tmpStr
MAA 2:39c4a85dc2a4 374 tmpStr = "";
MAA 3:38eabaa92552 375 tmpStr.resize(15);
MAA 5:11782a2008c2 376 char stringLength = strlen(stringToParse.c_str());
MAA 2:39c4a85dc2a4 377
MAA 2:39c4a85dc2a4 378 int commaCnt = 0;
MAA 2:39c4a85dc2a4 379 int index = 0;
MAA 2:39c4a85dc2a4 380 int idx = 0;
MAA 2:39c4a85dc2a4 381
MAA 5:11782a2008c2 382 while(commaCnt < (desiredCommaCount+1) && (index < stringLength)){
MAA 2:39c4a85dc2a4 383
MAA 2:39c4a85dc2a4 384 if(stringToParse[index] == ','){
MAA 2:39c4a85dc2a4 385 commaCnt += 1;
MAA 2:39c4a85dc2a4 386 }
MAA 2:39c4a85dc2a4 387
MAA 2:39c4a85dc2a4 388 if((commaCnt == desiredCommaCount) && (stringToParse[index] != ',')){
MAA 2:39c4a85dc2a4 389 tmpStr[idx] = stringToParse[index];
MAA 2:39c4a85dc2a4 390 idx += 1;
MAA 2:39c4a85dc2a4 391 }
MAA 2:39c4a85dc2a4 392
MAA 2:39c4a85dc2a4 393 index += 1;
MAA 2:39c4a85dc2a4 394 }
MAA 2:39c4a85dc2a4 395
MAA 21:325cb82f1838 396 };
MAA 21:325cb82f1838 397
MAA 21:325cb82f1838 398 //! getCurrentTime, getter method returning current time from gps
MAA 21:325cb82f1838 399 /*!
MAA 21:325cb82f1838 400 \return returns current time from gps in format "HH:MM:SS.FFF"
MAA 21:325cb82f1838 401 */
MAA 21:325cb82f1838 402 string NMEA::getCurrentTime(void){
MAA 21:325cb82f1838 403 return this->currentUTCFromGPRMC;
MAA 0:b3313c5ffca3 404 };