Bmag incl gps rettelse

Dependencies:   mbed WDT MODSERIAL BME280

Committer:
MAA
Date:
Thu Mar 23 10:40:22 2017 +0000
Revision:
9:ddc774114729
Parent:
8:d6287c33b54a
Child:
10:eb026e023a3c
Fejlmeddelelser og generel info ang?ende usb pen status tilf?jet til display

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MAA 0:b3313c5ffca3 1 #include "main.h"
MAA 0:b3313c5ffca3 2
MAA 9:ddc774114729 3 //change GPSACQTIMELIMITINSECONDS to change the duration in seconds, allowed for the gps to get gps fix.
MAA 9:ddc774114729 4 //After this duration, an error indication will occur if fix is not present.
MAA 8:d6287c33b54a 5 #define GPSACQTIMELIMITINSECONDS 60
MAA 8:d6287c33b54a 6
MAA 8:d6287c33b54a 7 //change BARCODE string inside double quotes to barcode of BMAG equipment
MAA 8:d6287c33b54a 8 char BARCODE[6] = "12345";
MAA 8:d6287c33b54a 9
MAA 8:d6287c33b54a 10
MAA 0:b3313c5ffca3 11 //Global GPS variables
MAA 0:b3313c5ffca3 12 bool GPS_Data_Rdy = false;
MAA 0:b3313c5ffca3 13 bool GPS_Data_Valid = false;
MAA 0:b3313c5ffca3 14 bool GGA_Fix_Present = false;
MAA 5:11782a2008c2 15 bool firstLineWritten = false;
MAA 6:6d1683c8b26b 16 bool fileNameUpdated = false;
MAA 7:872984a67d5b 17 bool lastErrStatus = true;
MAA 7:872984a67d5b 18 bool firstErrsWritten = false;
MAA 8:d6287c33b54a 19 char tmpGpsRxString[128];
MAA 8:d6287c33b54a 20 int missingGpsCnt = 0;
MAA 8:d6287c33b54a 21 int GpsCntWithoutMagData = 0;
MAA 7:872984a67d5b 22
MAA 0:b3313c5ffca3 23
MAA 8:d6287c33b54a 24 string INTERPRETERID = "";
MAA 8:d6287c33b54a 25 char interpreterTmpID[10];
MAA 8:d6287c33b54a 26
MAA 6:6d1683c8b26b 27 //global system variables
MAA 0:b3313c5ffca3 28 bool run = true;
MAA 8:d6287c33b54a 29 bool toggler = true;
MAA 8:d6287c33b54a 30 int togglecount = 0;
MAA 8:d6287c33b54a 31 bool magMissingPrompt = false;
MAA 0:b3313c5ffca3 32
MAA 8:d6287c33b54a 33 //global BMAG variables
MAA 8:d6287c33b54a 34 bool BMAG_Data_Rdy = false;
MAA 8:d6287c33b54a 35 char tmpBMAGRxString[128];
MAA 8:d6287c33b54a 36 char magnTarr[15];
MAA 8:d6287c33b54a 37
MAA 8:d6287c33b54a 38
MAA 8:d6287c33b54a 39
MAA 8:d6287c33b54a 40 //batteryvoltage
MAA 8:d6287c33b54a 41 char batteryvoltagearr[5];
MAA 8:d6287c33b54a 42 string batteryvoltage;
MAA 0:b3313c5ffca3 43
MAA 5:11782a2008c2 44 //Write to file prototype
MAA 6:6d1683c8b26b 45 bool writeToUsb(string line, FILE * f);
MAA 5:11782a2008c2 46
MAA 0:b3313c5ffca3 47 int main(void){
MAA 7:872984a67d5b 48
MAA 7:872984a67d5b 49 //initializing watchdog, timeout 10 seconds
MAA 6:6d1683c8b26b 50 Watchdog wd;
MAA 8:d6287c33b54a 51 wd.init(10.0);
MAA 8:d6287c33b54a 52
MAA 8:d6287c33b54a 53 //Led outputs
MAA 8:d6287c33b54a 54 DigitalOut redLed(p24);
MAA 8:d6287c33b54a 55 DigitalOut greenLed(p23);
MAA 8:d6287c33b54a 56
MAA 8:d6287c33b54a 57 redLed = 0;
MAA 8:d6287c33b54a 58 greenLed = 0;
MAA 0:b3313c5ffca3 59
MAA 8:d6287c33b54a 60 //Display init
MAA 8:d6287c33b54a 61 OpenDisplay();
MAA 8:d6287c33b54a 62
MAA 8:d6287c33b54a 63 //init of battery strings
MAA 8:d6287c33b54a 64 memset(batteryvoltagearr,'\0',5);
MAA 8:d6287c33b54a 65 batteryvoltage = "";
MAA 8:d6287c33b54a 66
MAA 8:d6287c33b54a 67 //Analog battery reading
MAA 8:d6287c33b54a 68 AnalogIn battery(A5);
MAA 8:d6287c33b54a 69
MAA 4:c70ef089a3fd 70 string currentFilename, nextFilename;
MAA 4:c70ef089a3fd 71
MAA 5:11782a2008c2 72 currentFilename = "/usb/tempFile.sps";
MAA 5:11782a2008c2 73
MAA 0:b3313c5ffca3 74 //Initializing string buffer for GPS data
MAA 0:b3313c5ffca3 75 string GPS_String_Buff;
MAA 0:b3313c5ffca3 76 GPS_String_Buff.resize(128);
MAA 0:b3313c5ffca3 77 memset(tmpGpsRxString,'\0',128);
MAA 0:b3313c5ffca3 78
MAA 8:d6287c33b54a 79 //Initializing string buffer for BMAG data
MAA 8:d6287c33b54a 80 string BMAG_String_Buff;
MAA 8:d6287c33b54a 81 BMAG_String_Buff.resize(128);
MAA 8:d6287c33b54a 82 memset(tmpBMAGRxString,'\0',128);
MAA 8:d6287c33b54a 83
MAA 2:39c4a85dc2a4 84 //debug comm setup
MAA 0:b3313c5ffca3 85 dbg.baud(115200);
MAA 6:6d1683c8b26b 86 dbg.printf("Init...\r\n");
MAA 0:b3313c5ffca3 87
MAA 0:b3313c5ffca3 88 //setting up USB device
MAA 0:b3313c5ffca3 89 USBHostMSD msd("usb");
MAA 0:b3313c5ffca3 90
MAA 9:ddc774114729 91 //USB message
MAA 9:ddc774114729 92 ClearDisp();
MAA 9:ddc774114729 93 DispReturn();
MAA 9:ddc774114729 94 DispLine("Mounting");
MAA 9:ddc774114729 95 DispLocate(1,2);
MAA 9:ddc774114729 96 DispLine("USB pen");
MAA 9:ddc774114729 97
MAA 0:b3313c5ffca3 98 while(!msd.connect()){
MAA 0:b3313c5ffca3 99 dbg.printf("Trying to connect to usb flash disk\r\n");
MAA 6:6d1683c8b26b 100 wait_ms(500);
MAA 0:b3313c5ffca3 101 }
MAA 0:b3313c5ffca3 102
MAA 0:b3313c5ffca3 103 //Opening a file on usb disk
MAA 5:11782a2008c2 104 FILE * fp = fopen(currentFilename.c_str(), "a");
MAA 4:c70ef089a3fd 105 wait_ms(100);
MAA 0:b3313c5ffca3 106
MAA 2:39c4a85dc2a4 107 //initializing SPS generation
MAA 2:39c4a85dc2a4 108 SPS spsGen;
MAA 6:6d1683c8b26b 109
MAA 6:6d1683c8b26b 110 //GPS communication init
MAA 6:6d1683c8b26b 111 gps.baud(9600);
MAA 6:6d1683c8b26b 112 gps.attach(&rxCallback, MODSERIAL::RxIrq);
MAA 6:6d1683c8b26b 113
MAA 8:d6287c33b54a 114 //BMAG communication init
MAA 8:d6287c33b54a 115 bmag.baud(115200);
MAA 8:d6287c33b54a 116 bmag.attach(&bmagrxCallback, MODSERIAL::RxIrq);
MAA 8:d6287c33b54a 117
MAA 6:6d1683c8b26b 118 //Start comms with the GPS, Enabling GPRMC and GPGGA
MAA 6:6d1683c8b26b 119 gps.printf("$PMTK314,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0*28\r\n");
MAA 6:6d1683c8b26b 120
MAA 7:872984a67d5b 121 dbg.printf("Init.... Done!\r\n");
MAA 8:d6287c33b54a 122
MAA 8:d6287c33b54a 123 //init interpreterid
MAA 8:d6287c33b54a 124 int barcodeint = atoi(BARCODE);
MAA 8:d6287c33b54a 125 memset(interpreterTmpID,'\0',10);
MAA 8:d6287c33b54a 126 sprintf(interpreterTmpID,"%4x", barcodeint);
MAA 8:d6287c33b54a 127 INTERPRETERID.assign(interpreterTmpID);
MAA 7:872984a67d5b 128
MAA 5:11782a2008c2 129 //infinite loop running after initialization
MAA 0:b3313c5ffca3 130 while(run) {
MAA 0:b3313c5ffca3 131
MAA 8:d6287c33b54a 132
MAA 6:6d1683c8b26b 133 //if the gps rx buffer is full, flush the buffer
MAA 6:6d1683c8b26b 134 if(gps.rxBufferFull()){
MAA 6:6d1683c8b26b 135 gps.rxBufferFlush();
MAA 6:6d1683c8b26b 136 }
MAA 6:6d1683c8b26b 137
MAA 7:872984a67d5b 138
MAA 8:d6287c33b54a 139 if(bmag.rxBufferFull()){
MAA 8:d6287c33b54a 140 bmag.rxBufferFlush();
MAA 8:d6287c33b54a 141 }
MAA 8:d6287c33b54a 142
MAA 8:d6287c33b54a 143 if(BMAG_Data_Rdy){
MAA 8:d6287c33b54a 144 magMissingPrompt = false;
MAA 0:b3313c5ffca3 145
MAA 8:d6287c33b54a 146 bmag.move(tmpBMAGRxString, bmag.rxBufferGetCount());
MAA 8:d6287c33b54a 147
MAA 8:d6287c33b54a 148 //copy c_string to string
MAA 8:d6287c33b54a 149 BMAG_String_Buff.assign(tmpBMAGRxString);
MAA 8:d6287c33b54a 150
MAA 8:d6287c33b54a 151 //clear tmpRxBuffer
MAA 8:d6287c33b54a 152 memset(tmpBMAGRxString,'\0',128);
MAA 8:d6287c33b54a 153
MAA 8:d6287c33b54a 154 magParser.parseBMAGString(BMAG_String_Buff);
MAA 8:d6287c33b54a 155
MAA 8:d6287c33b54a 156 GpsCntWithoutMagData = 0;
MAA 8:d6287c33b54a 157
MAA 8:d6287c33b54a 158 //update filename when date is available with gga fix
MAA 6:6d1683c8b26b 159 if(!fileNameUpdated && GGA_Fix_Present){
MAA 6:6d1683c8b26b 160 spsGen.generateSpsFilename(gpsNMEA.currentDATEFromGPRMC);
MAA 6:6d1683c8b26b 161 nextFilename.assign(spsGen.getSpsFileName());
MAA 6:6d1683c8b26b 162 fclose(fp);
MAA 6:6d1683c8b26b 163 currentFilename.assign(nextFilename);
MAA 6:6d1683c8b26b 164 nextFilename = "";
MAA 6:6d1683c8b26b 165
MAA 6:6d1683c8b26b 166 fopen(currentFilename.c_str(), "a");
MAA 6:6d1683c8b26b 167
MAA 7:872984a67d5b 168 fileNameUpdated = true;
MAA 7:872984a67d5b 169
MAA 7:872984a67d5b 170 //add header to top of file
MAA 7:872984a67d5b 171 writeToUsb(spsGen.getHeaderString(), fp);
MAA 6:6d1683c8b26b 172
MAA 8:d6287c33b54a 173 }
MAA 6:6d1683c8b26b 174
MAA 7:872984a67d5b 175 //if date has changed, ensure new file creation.
MAA 7:872984a67d5b 176 spsGen.generateSpsFilename(gpsNMEA.currentDATEFromGPRMC);
MAA 7:872984a67d5b 177 if(currentFilename != spsGen.getSpsFileName()){
MAA 7:872984a67d5b 178 fileNameUpdated = false;
MAA 7:872984a67d5b 179 }
MAA 8:d6287c33b54a 180
MAA 8:d6287c33b54a 181 //read battery voltage
MAA 8:d6287c33b54a 182 sprintf(batteryvoltagearr, "%0.1f",(0.00036621652)*battery.read_u16());
MAA 8:d6287c33b54a 183 batteryvoltage.assign(batteryvoltagearr);
MAA 8:d6287c33b54a 184
MAA 8:d6287c33b54a 185 if(toggler && missingGpsCnt < GPSACQTIMELIMITINSECONDS){
MAA 8:d6287c33b54a 186 //show battery voltage and gps fix status for 10 seconds
MAA 8:d6287c33b54a 187 ClearDisp();
MAA 8:d6287c33b54a 188 DispReturn();
MAA 8:d6287c33b54a 189 DispLine("VB: ");
MAA 8:d6287c33b54a 190 DispLine(batteryvoltagearr);
MAA 8:d6287c33b54a 191 DispLocate(1,2);
MAA 8:d6287c33b54a 192 DispLine("GPS: ");
MAA 8:d6287c33b54a 193 if(GGA_Fix_Present){
MAA 8:d6287c33b54a 194 DispLine("Ok");
MAA 8:d6287c33b54a 195 }
MAA 8:d6287c33b54a 196 if(!GGA_Fix_Present){
MAA 8:d6287c33b54a 197 DispLine("No");
MAA 8:d6287c33b54a 198 }
MAA 8:d6287c33b54a 199 togglecount += 1;
MAA 8:d6287c33b54a 200
MAA 8:d6287c33b54a 201 if(togglecount >= 10){
MAA 8:d6287c33b54a 202 toggler = false;
MAA 8:d6287c33b54a 203 togglecount = 0;
MAA 8:d6287c33b54a 204 }
MAA 8:d6287c33b54a 205
MAA 8:d6287c33b54a 206 }
MAA 8:d6287c33b54a 207
MAA 8:d6287c33b54a 208 if(!toggler && missingGpsCnt < GPSACQTIMELIMITINSECONDS){
MAA 8:d6287c33b54a 209 //show magnT reading for 10 seconds
MAA 8:d6287c33b54a 210 memset(magnTarr, '\0', 15);
MAA 8:d6287c33b54a 211 ClearDisp();
MAA 8:d6287c33b54a 212 DispReturn();
MAA 8:d6287c33b54a 213 DispLine("nT: ");
MAA 8:d6287c33b54a 214 DispLocate(1,2);
MAA 8:d6287c33b54a 215
MAA 8:d6287c33b54a 216 sprintf(magnTarr, "%s",magParser.getMagNTStr().c_str());
MAA 8:d6287c33b54a 217
MAA 8:d6287c33b54a 218 DispLine(magnTarr);
MAA 8:d6287c33b54a 219
MAA 8:d6287c33b54a 220 togglecount += 1;
MAA 8:d6287c33b54a 221
MAA 8:d6287c33b54a 222 if(togglecount >= 10){
MAA 8:d6287c33b54a 223 toggler = true;
MAA 8:d6287c33b54a 224 togglecount = 0;
MAA 8:d6287c33b54a 225 }
MAA 8:d6287c33b54a 226
MAA 8:d6287c33b54a 227 }
MAA 8:d6287c33b54a 228
MAA 8:d6287c33b54a 229
MAA 8:d6287c33b54a 230 if(missingGpsCnt > GPSACQTIMELIMITINSECONDS){
MAA 8:d6287c33b54a 231 //show gps fix missing error on display
MAA 8:d6287c33b54a 232 ClearDisp();
MAA 8:d6287c33b54a 233 DispReturn();
MAA 8:d6287c33b54a 234 DispLine("Err! Set");
MAA 8:d6287c33b54a 235 DispLocate(1,2);
MAA 8:d6287c33b54a 236 DispLine("mag time");
MAA 8:d6287c33b54a 237
MAA 8:d6287c33b54a 238
MAA 8:d6287c33b54a 239 }
MAA 8:d6287c33b54a 240
MAA 8:d6287c33b54a 241 //generate default sps string
MAA 8:d6287c33b54a 242 spsGen.UpdateCurrentString(TAG, IDENTIFIERID, GROUP, gpsNMEA.currentDATEFromGPRMC, gpsNMEA.currentUTCFromGPRMC, TIMEZONE, ENCODING, SOURCEIDENTIFICATION, INTERPRETERID, DATALINEVERSION, FWSRCVERSION, FWIVERSION, BARCODE,gpsNMEA.currentLatitude, gpsNMEA.currentLongitude, GGA_Fix_Present, batteryvoltage, magParser.getMagTimeStr(), magParser.getMagNTStr(), magParser.getMagSq(), &dbg);
MAA 8:d6287c33b54a 243
MAA 8:d6287c33b54a 244 //write data strings to sps file
MAA 8:d6287c33b54a 245 if(GGA_Fix_Present){
MAA 8:d6287c33b54a 246
MAA 8:d6287c33b54a 247 missingGpsCnt = 0;
MAA 8:d6287c33b54a 248
MAA 8:d6287c33b54a 249 if(!firstLineWritten){
MAA 8:d6287c33b54a 250 writeToUsb(spsGen.getHeaderString(), fp);
MAA 8:d6287c33b54a 251 firstLineWritten = true;
MAA 8:d6287c33b54a 252 }
MAA 8:d6287c33b54a 253
MAA 8:d6287c33b54a 254 writeToUsb(spsGen.getCurrentString(), fp);
MAA 8:d6287c33b54a 255
MAA 8:d6287c33b54a 256 if(!lastErrStatus && firstErrsWritten){
MAA 8:d6287c33b54a 257 spsGen.UpdateCurrentErrString("ERRE", IDENTIFIERID, GROUP, gpsNMEA.currentDATEFromGPRMC, gpsNMEA.currentUTCFromGPRMC, TIMEZONE, ENCODING, SOURCEIDENTIFICATION, INTERPRETERID, DATALINEVERSION, FWSRCVERSION, FWIVERSION, gpsNMEA.currentLatitude, gpsNMEA.currentLongitude, GGA_Fix_Present, magParser.getMagTimeStr(), magParser.getMagNTStr(), magParser.getMagSq(), &dbg);
MAA 8:d6287c33b54a 258 writeToUsb(spsGen.getCurrentErrString(), fp);
MAA 8:d6287c33b54a 259 lastErrStatus = true;
MAA 8:d6287c33b54a 260 firstErrsWritten = false;
MAA 8:d6287c33b54a 261 firstLineWritten = false;
MAA 8:d6287c33b54a 262 }
MAA 8:d6287c33b54a 263 }
MAA 8:d6287c33b54a 264
MAA 8:d6287c33b54a 265 if(!GGA_Fix_Present){
MAA 8:d6287c33b54a 266
MAA 8:d6287c33b54a 267 if(missingGpsCnt <= GPSACQTIMELIMITINSECONDS){
MAA 8:d6287c33b54a 268 missingGpsCnt += 1;
MAA 8:d6287c33b54a 269 }
MAA 8:d6287c33b54a 270
MAA 8:d6287c33b54a 271 if(!firstLineWritten){
MAA 8:d6287c33b54a 272 writeToUsb(spsGen.getHeaderString(), fp);
MAA 8:d6287c33b54a 273 firstLineWritten = true;
MAA 8:d6287c33b54a 274 }
MAA 8:d6287c33b54a 275
MAA 8:d6287c33b54a 276 if(lastErrStatus && !firstErrsWritten){
MAA 8:d6287c33b54a 277 spsGen.UpdateCurrentErrString("ERRS", IDENTIFIERID, GROUP, gpsNMEA.currentDATEFromGPRMC, gpsNMEA.currentUTCFromGPRMC, TIMEZONE, ENCODING, SOURCEIDENTIFICATION, INTERPRETERID, DATALINEVERSION, FWSRCVERSION, FWIVERSION, gpsNMEA.currentLatitude, gpsNMEA.currentLongitude, GGA_Fix_Present, magParser.getMagTimeStr(), magParser.getMagNTStr(), magParser.getMagSq(), &dbg);
MAA 8:d6287c33b54a 278 writeToUsb(spsGen.getCurrentErrString(), fp);
MAA 8:d6287c33b54a 279 lastErrStatus = false;
MAA 8:d6287c33b54a 280 firstErrsWritten = true;
MAA 8:d6287c33b54a 281 }
MAA 8:d6287c33b54a 282
MAA 8:d6287c33b54a 283 }
MAA 8:d6287c33b54a 284
MAA 8:d6287c33b54a 285 BMAG_Data_Rdy = false;
MAA 8:d6287c33b54a 286 }
MAA 8:d6287c33b54a 287
MAA 8:d6287c33b54a 288 if(GpsCntWithoutMagData > 20 && !magMissingPrompt){
MAA 8:d6287c33b54a 289
MAA 8:d6287c33b54a 290 //show error if mag data not present
MAA 8:d6287c33b54a 291 ClearDisp();
MAA 8:d6287c33b54a 292 DispReturn();
MAA 8:d6287c33b54a 293 DispLine("Mag data");
MAA 8:d6287c33b54a 294 DispLocate(1,2);
MAA 8:d6287c33b54a 295 DispLine("missing!");
MAA 8:d6287c33b54a 296
MAA 8:d6287c33b54a 297 redLed = 1;
MAA 8:d6287c33b54a 298 greenLed = 0;
MAA 8:d6287c33b54a 299 magMissingPrompt = true;
MAA 8:d6287c33b54a 300 }
MAA 8:d6287c33b54a 301
MAA 8:d6287c33b54a 302 if(GPS_Data_Rdy){
MAA 8:d6287c33b54a 303
MAA 8:d6287c33b54a 304 if(GpsCntWithoutMagData < 200){
MAA 8:d6287c33b54a 305
MAA 8:d6287c33b54a 306 GpsCntWithoutMagData += 1;
MAA 8:d6287c33b54a 307
MAA 8:d6287c33b54a 308 }
MAA 8:d6287c33b54a 309
MAA 7:872984a67d5b 310
MAA 0:b3313c5ffca3 311 gps.scanf("%s", &tmpGpsRxString);
MAA 0:b3313c5ffca3 312
MAA 0:b3313c5ffca3 313 //copy c_string to string
MAA 0:b3313c5ffca3 314 GPS_String_Buff.assign(tmpGpsRxString);
MAA 0:b3313c5ffca3 315
MAA 0:b3313c5ffca3 316 //clear tmpRxBuffer
MAA 0:b3313c5ffca3 317 memset(tmpGpsRxString,'\0',128);
MAA 0:b3313c5ffca3 318
MAA 0:b3313c5ffca3 319 //printing GPS string buffer
MAA 0:b3313c5ffca3 320 dbg.printf(GPS_String_Buff.c_str());
MAA 0:b3313c5ffca3 321 dbg.printf("\r\n");
MAA 5:11782a2008c2 322
MAA 0:b3313c5ffca3 323 //Validate CRC
MAA 5:11782a2008c2 324 GPS_Data_Valid = gpsNMEA.ValidateData(GPS_String_Buff);
MAA 0:b3313c5ffca3 325
MAA 0:b3313c5ffca3 326 //store valid string, either gga or rmc
MAA 0:b3313c5ffca3 327 if(GPS_Data_Valid){
MAA 2:39c4a85dc2a4 328 gpsNMEA.StoreString(GPS_String_Buff/*, &dbg*/);
MAA 0:b3313c5ffca3 329 }
MAA 0:b3313c5ffca3 330
MAA 5:11782a2008c2 331 //Get gga fix flag
MAA 2:39c4a85dc2a4 332 GGA_Fix_Present = gpsNMEA.GGAFixVerification();
MAA 0:b3313c5ffca3 333
MAA 7:872984a67d5b 334 //Assign value to error flag
MAA 7:872984a67d5b 335 spsGen.setErrStatus(GGA_Fix_Present);
MAA 7:872984a67d5b 336
MAA 0:b3313c5ffca3 337 //Clearing RX buffer.
MAA 0:b3313c5ffca3 338 GPS_String_Buff = "";
MAA 0:b3313c5ffca3 339 GPS_String_Buff.resize(128);
MAA 0:b3313c5ffca3 340
MAA 5:11782a2008c2 341 //parse current date
MAA 5:11782a2008c2 342 gpsNMEA.ParseCurrentDateFromGPRMC();
MAA 2:39c4a85dc2a4 343
MAA 5:11782a2008c2 344 //parse current time
MAA 5:11782a2008c2 345 gpsNMEA.ParseCurrentUTCFromGPRMC();
MAA 3:38eabaa92552 346
MAA 5:11782a2008c2 347 //parse gps coordinates
MAA 5:11782a2008c2 348 gpsNMEA.ParseCurrentLatitudeFromGPRMC();
MAA 5:11782a2008c2 349 gpsNMEA.ParseCurrentLongitudeFromGPRMC();
MAA 2:39c4a85dc2a4 350
MAA 0:b3313c5ffca3 351 //clearing flags
MAA 0:b3313c5ffca3 352 GPS_Data_Valid = false;
MAA 5:11782a2008c2 353 GPS_Data_Rdy = false;
MAA 8:d6287c33b54a 354
MAA 8:d6287c33b54a 355
MAA 8:d6287c33b54a 356
MAA 7:872984a67d5b 357
MAA 8:d6287c33b54a 358 if(!GGA_Fix_Present && GpsCntWithoutMagData < 20){
MAA 8:d6287c33b54a 359 //Missing GGA fix LED indicator
MAA 8:d6287c33b54a 360 greenLed = 0;
MAA 8:d6287c33b54a 361 redLed = 1;
MAA 7:872984a67d5b 362 }
MAA 7:872984a67d5b 363
MAA 7:872984a67d5b 364
MAA 8:d6287c33b54a 365 if(GGA_Fix_Present && GpsCntWithoutMagData < 20){
MAA 7:872984a67d5b 366
MAA 8:d6287c33b54a 367 //GGA fix LED indicator
MAA 8:d6287c33b54a 368 greenLed = 1;
MAA 8:d6287c33b54a 369 redLed = 0;
MAA 8:d6287c33b54a 370
MAA 8:d6287c33b54a 371 }
MAA 7:872984a67d5b 372
MAA 7:872984a67d5b 373
MAA 5:11782a2008c2 374 }
MAA 5:11782a2008c2 375
MAA 0:b3313c5ffca3 376 //If connection to USB flash disk is lost, reconnect to the flash disk
MAA 0:b3313c5ffca3 377 if(!msd.connected()){
MAA 9:ddc774114729 378
MAA 9:ddc774114729 379 //USB message
MAA 9:ddc774114729 380 ClearDisp();
MAA 9:ddc774114729 381 DispReturn();
MAA 9:ddc774114729 382 DispLine("USB pen");
MAA 9:ddc774114729 383 DispLocate(1,2);
MAA 9:ddc774114729 384 DispLine("Missing!");
MAA 9:ddc774114729 385
MAA 0:b3313c5ffca3 386 //reestablish usb connection
MAA 0:b3313c5ffca3 387 while(!msd.connect()){
MAA 0:b3313c5ffca3 388 dbg.printf("Trying to reconnect to usb flash disk\r\n");
MAA 6:6d1683c8b26b 389 wait_ms(200);
MAA 6:6d1683c8b26b 390 msd.connect();
MAA 0:b3313c5ffca3 391 }
MAA 0:b3313c5ffca3 392
MAA 0:b3313c5ffca3 393 //Reopening a file on usb disk
MAA 5:11782a2008c2 394 fp = fopen(currentFilename.c_str(), "a");
MAA 7:872984a67d5b 395
MAA 7:872984a67d5b 396 writeToUsb("\r\n", fp);
MAA 7:872984a67d5b 397 writeToUsb(spsGen.getHeaderString(), fp);
MAA 7:872984a67d5b 398
MAA 0:b3313c5ffca3 399
MAA 0:b3313c5ffca3 400 }
MAA 0:b3313c5ffca3 401
MAA 5:11782a2008c2 402
MAA 2:39c4a85dc2a4 403 //kick / feed watchdog
MAA 2:39c4a85dc2a4 404 wd.kick();
MAA 5:11782a2008c2 405
MAA 5:11782a2008c2 406 }
MAA 5:11782a2008c2 407
MAA 0:b3313c5ffca3 408 return 0;
MAA 0:b3313c5ffca3 409 }
MAA 0:b3313c5ffca3 410
MAA 0:b3313c5ffca3 411 //Thanks to MODSERIAL!
MAA 0:b3313c5ffca3 412 // Called everytime a new character goes into
MAA 0:b3313c5ffca3 413 // the RX buffer. Test that character for \n
MAA 0:b3313c5ffca3 414 // Note, rxGetLastChar() gets the last char that
MAA 0:b3313c5ffca3 415 // we received but it does NOT remove it from
MAA 0:b3313c5ffca3 416 // the RX buffer.
MAA 0:b3313c5ffca3 417 void rxCallback(MODSERIAL_IRQ_INFO *q) {
MAA 0:b3313c5ffca3 418 MODSERIAL *serial = q->serial;
MAA 6:6d1683c8b26b 419 if (serial->rxGetLastChar() == '\n') {
MAA 0:b3313c5ffca3 420 GPS_Data_Rdy = true;
MAA 0:b3313c5ffca3 421 }
MAA 5:11782a2008c2 422 }
MAA 5:11782a2008c2 423
MAA 8:d6287c33b54a 424 //Thanks to MODSERIAL!
MAA 8:d6287c33b54a 425 // Called everytime a new character goes into
MAA 8:d6287c33b54a 426 // the RX buffer. Test that character for \r and buffer char count
MAA 8:d6287c33b54a 427 // Note, rxGetLastChar() gets the last char that
MAA 8:d6287c33b54a 428 // we received but it does NOT remove it from
MAA 8:d6287c33b54a 429 // the RX buffer.
MAA 8:d6287c33b54a 430 void bmagrxCallback(MODSERIAL_IRQ_INFO *q) {
MAA 8:d6287c33b54a 431 MODSERIAL *serial = q->serial;
MAA 8:d6287c33b54a 432 if ((serial->rxBufferGetCount() > 20) && (serial->rxGetLastChar() == '\r')) {
MAA 8:d6287c33b54a 433 BMAG_Data_Rdy = true;
MAA 8:d6287c33b54a 434 }
MAA 8:d6287c33b54a 435 }
MAA 8:d6287c33b54a 436
MAA 7:872984a67d5b 437 //Write to file
MAA 6:6d1683c8b26b 438 bool writeToUsb(string line, FILE * f){
MAA 5:11782a2008c2 439
MAA 5:11782a2008c2 440 if (f != NULL) {
MAA 6:6d1683c8b26b 441
MAA 5:11782a2008c2 442 fprintf(f, "\r\n");
MAA 8:d6287c33b54a 443 fprintf(f, line.c_str());
MAA 8:d6287c33b54a 444
MAA 6:6d1683c8b26b 445 }
MAA 6:6d1683c8b26b 446
MAA 5:11782a2008c2 447 if(f == NULL){
MAA 5:11782a2008c2 448 return false;
MAA 5:11782a2008c2 449 }
MAA 5:11782a2008c2 450
MAA 5:11782a2008c2 451 return true;
MAA 5:11782a2008c2 452 }
MAA 5:11782a2008c2 453