Bmag incl gps rettelse

Dependencies:   mbed WDT MODSERIAL BME280

Committer:
gert_lauritsen
Date:
Mon Jul 08 08:56:50 2019 +0000
Branch:
MbedBMAGThrRev
Revision:
63:168f5498a3c5
Parent:
61:52a6d0ffd8e5
add altitude to SPS

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