SkyTEM BMAG / Mbed 2 deprecated BMAGThrRev

Dependencies:   mbed WDT MODSERIAL BME280

Committer:
MAA
Date:
Thu Mar 23 10:11:26 2017 +0000
Revision:
8:d6287c33b54a
Parent:
7:872984a67d5b
Child:
9:ddc774114729
BMAG klasse fungerende med dataopsamling fra BMAG.;

Who changed what in which revision?

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