Bmag incl gps rettelse

Dependencies:   mbed WDT MODSERIAL BME280

Committer:
MAA
Date:
Tue Oct 10 10:39:59 2017 +0000
Branch:
MbedBMAGThrRev
Revision:
44:14ec59d2170c
Parent:
43:358e853ba2c9
Child:
45:27a34d0936de
Fw version 1.0.0.1; ; Fixed PTH communication issue due to 10 second interval re-initialisation.; ; Temporary mag data ticker added to test date change and file name change timing at midnight utc.; ; Added forced date check when clock passes midnight.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MAA 0:b3313c5ffca3 1 #include "main.h"
MAA 0:b3313c5ffca3 2
MAA 14:400ecb93c6a2 3 //please note that mbed library should be of revision 137 or before.
MAA 14:400ecb93c6a2 4
MAA 9:ddc774114729 5 //change GPSACQTIMELIMITINSECONDS to change the duration in seconds, allowed for the gps to get gps fix.
MAA 9:ddc774114729 6 //After this duration, an error indication will occur if fix is not present.
MAA 22:9f5955f051f5 7 #define GPSACQTIMELIMITINSECONDS 120
MAA 8:d6287c33b54a 8
MAA 13:45b333983206 9 //to change battery low indication change this value
MAA 13:45b333983206 10 #define BATTERYLOWLIMIT 10.5
MAA 13:45b333983206 11
MAA 8:d6287c33b54a 12 //change BARCODE string inside double quotes to barcode of BMAG equipment
MAA 44:14ec59d2170c 13 char BARCODE[6] = "11111";
MAA 8:d6287c33b54a 14
MAA 0:b3313c5ffca3 15 //Global GPS variables
MAA 34:c6c5e7ec9163 16 Timer t;
MAA 38:a1615de4ee64 17 bool ppsTick = false;
MAA 38:a1615de4ee64 18 char tmpHour[5];
MAA 38:a1615de4ee64 19 char tmpMinute[5];
MAA 38:a1615de4ee64 20 char tmpSecond[5];
MAA 34:c6c5e7ec9163 21 char time_buffer[32];
MAA 34:c6c5e7ec9163 22 bool RTC_set = false;
MAA 0:b3313c5ffca3 23 bool GPS_Data_Rdy = false;
MAA 0:b3313c5ffca3 24 bool GPS_Data_Valid = false;
MAA 23:2e914b705b99 25 bool GPS_Override_Active = false;
MAA 0:b3313c5ffca3 26 bool GGA_Fix_Present = false;
MAA 5:11782a2008c2 27 bool firstLineWritten = false;
MAA 6:6d1683c8b26b 28 bool fileNameUpdated = false;
MAA 7:872984a67d5b 29 bool lastErrStatus = true;
MAA 7:872984a67d5b 30 bool firstErrsWritten = false;
MAA 23:2e914b705b99 31 bool gpsStringsReceived = false;
MAA 8:d6287c33b54a 32 char tmpGpsRxString[128];
MAA 34:c6c5e7ec9163 33 char timer_ms[5];
MAA 34:c6c5e7ec9163 34 int secCount = 0;
MAA 8:d6287c33b54a 35 int missingGpsCnt = 0;
MAA 8:d6287c33b54a 36 int GpsCntWithoutMagData = 0;
MAA 10:eb026e023a3c 37 int magCntWithoutGpsData = 0;
MAA 24:099df3fa2b13 38 char missingGpsConnectionCounter = 0;
MAA 23:2e914b705b99 39 char gpsOverridePushButtonCounter = 0;
MAA 39:0aeb019323bf 40 int seconds;
MAA 39:0aeb019323bf 41 int minutes;
MAA 39:0aeb019323bf 42 int hours;
MAA 39:0aeb019323bf 43 char timeArr[10];
MAA 39:0aeb019323bf 44 string timeStr;
MAA 7:872984a67d5b 45
MAA 8:d6287c33b54a 46 string INTERPRETERID = "";
MAA 8:d6287c33b54a 47 char interpreterTmpID[10];
MAA 8:d6287c33b54a 48
MAA 6:6d1683c8b26b 49 //global system variables
MAA 43:358e853ba2c9 50 bool detachMag = false;
MAA 41:d7d77ddd32c6 51 bool tickerUpdated = false;
MAA 32:a8d74b3c9d6f 52 bool gpsRunning = false;
MAA 32:a8d74b3c9d6f 53 bool gpsCheckedAfter10Sec = false;
MAA 0:b3313c5ffca3 54 bool run = true;
MAA 8:d6287c33b54a 55 bool toggler = true;
MAA 24:099df3fa2b13 56 bool dispFlag = false;
MAA 24:099df3fa2b13 57 bool checkStateFlag = false;
MAA 39:0aeb019323bf 58 bool flushStrErr = false;
MAA 39:0aeb019323bf 59 char flushStr[200];
MAA 8:d6287c33b54a 60 int togglecount = 0;
MAA 40:45289e57887d 61 int fixPresentCnt = 0;
MAA 24:099df3fa2b13 62 ErrorState prevState = NONE;
MAA 24:099df3fa2b13 63 ErrorState presentState = NONE;
MAA 21:325cb82f1838 64
MAA 8:d6287c33b54a 65 //global BMAG variables
MAA 33:a7f044b3e057 66 string lastUTCTimestamp;
MAA 8:d6287c33b54a 67 bool BMAG_Data_Rdy = false;
MAA 10:eb026e023a3c 68 bool magTimeSetManually = false;
MAA 23:2e914b705b99 69 bool magStringsReceived = false;
MAA 8:d6287c33b54a 70 char tmpBMAGRxString[128];
MAA 8:d6287c33b54a 71 char magnTarr[15];
MAA 10:eb026e023a3c 72 int magTimePromptCount = 0;
MAA 10:eb026e023a3c 73 int timeSetManuallyCount = 0;
MAA 34:c6c5e7ec9163 74 int tmpTime = 0;
MAA 28:ed0d29f63b55 75 char tmpChar1[5];
MAA 28:ed0d29f63b55 76 char tmpChar2[5];
MAA 34:c6c5e7ec9163 77 int lastGPRMC_CNT = 0;
MAA 28:ed0d29f63b55 78 int timeDiffInt = 0;
MAA 28:ed0d29f63b55 79 int timeDiffStrLen = 0;
MAA 8:d6287c33b54a 80
MAA 28:ed0d29f63b55 81 //PTH vars
MAA 28:ed0d29f63b55 82 void getPthValues();
MAA 28:ed0d29f63b55 83 bool PTHValuesReadyFlag = false;
MAA 28:ed0d29f63b55 84 bool PTHSensorActive = false;
MAA 28:ed0d29f63b55 85 float PTH_Preassure = 0;
MAA 28:ed0d29f63b55 86 float PTH_Temperature = 0;
MAA 28:ed0d29f63b55 87 float PTH_Humidity = 0;
MAA 28:ed0d29f63b55 88 char PreassureArr[10] = "";
MAA 28:ed0d29f63b55 89 char TemperatureArr[10] = "";
MAA 28:ed0d29f63b55 90 char HumidityArr[10] = "";
MAA 28:ed0d29f63b55 91
MAA 8:d6287c33b54a 92 //batteryvoltage
MAA 8:d6287c33b54a 93 char batteryvoltagearr[5];
MAA 8:d6287c33b54a 94 string batteryvoltage;
MAA 0:b3313c5ffca3 95
MAA 34:c6c5e7ec9163 96 //time
MAA 34:c6c5e7ec9163 97 time_t t_of_day;
MAA 34:c6c5e7ec9163 98
MAA 5:11782a2008c2 99 //Write to file prototype
MAA 6:6d1683c8b26b 100 bool writeToUsb(string line, FILE * f);
MAA 5:11782a2008c2 101
MAA 32:a8d74b3c9d6f 102 //Gps available check prototype
MAA 32:a8d74b3c9d6f 103 void gpsAvailCheck(void);
MAA 32:a8d74b3c9d6f 104
MAA 34:c6c5e7ec9163 105
MAA 34:c6c5e7ec9163 106 //epoch time conversion
MAA 34:c6c5e7ec9163 107 time_t setMbedTime(string GPRMCDate, string GPRMCUtc, Serial * debug){
MAA 34:c6c5e7ec9163 108
MAA 34:c6c5e7ec9163 109 char tmpYear[6];
MAA 34:c6c5e7ec9163 110 char tmpMonth[5];
MAA 34:c6c5e7ec9163 111 char tmpDay[5];
MAA 34:c6c5e7ec9163 112 char tmpHour[5];
MAA 34:c6c5e7ec9163 113 char tmpMinute[5];
MAA 34:c6c5e7ec9163 114 char tmpSecond[5];
MAA 34:c6c5e7ec9163 115
MAA 34:c6c5e7ec9163 116 struct tm str_time;
MAA 34:c6c5e7ec9163 117
MAA 34:c6c5e7ec9163 118 memset(tmpYear,'\0',6);
MAA 34:c6c5e7ec9163 119 memset(tmpMonth,'\0',5);
MAA 34:c6c5e7ec9163 120 memset(tmpDay,'\0',5);
MAA 34:c6c5e7ec9163 121 memset(tmpHour,'\0',5);
MAA 34:c6c5e7ec9163 122 memset(tmpMinute,'\0',5);
MAA 34:c6c5e7ec9163 123 memset(tmpSecond,'\0',5);
MAA 34:c6c5e7ec9163 124
MAA 34:c6c5e7ec9163 125 snprintf(tmpYear, 6, "%s", GPRMCDate.substr(0, 4));
MAA 34:c6c5e7ec9163 126 snprintf(tmpMonth, 5, "%s", GPRMCDate.substr(5, 2));
MAA 34:c6c5e7ec9163 127 snprintf(tmpDay, 5, "%s", GPRMCDate.substr(8, 2));
MAA 34:c6c5e7ec9163 128
MAA 34:c6c5e7ec9163 129 snprintf(tmpHour, 5, "%s", GPRMCUtc.substr(0, 2));
MAA 34:c6c5e7ec9163 130 snprintf(tmpMinute, 5, "%s", GPRMCUtc.substr(3, 2));
MAA 34:c6c5e7ec9163 131 snprintf(tmpSecond, 5, "%s", GPRMCUtc.substr(6, 2));
MAA 34:c6c5e7ec9163 132
MAA 34:c6c5e7ec9163 133 str_time.tm_year = atoi(tmpYear) - 1900;
MAA 34:c6c5e7ec9163 134 str_time.tm_mon = atoi(tmpMonth) - 1; // Month, 0 - jan
MAA 34:c6c5e7ec9163 135 str_time.tm_mday = atoi(tmpDay); // Day of the month
MAA 34:c6c5e7ec9163 136 str_time.tm_hour = atoi(tmpHour);
MAA 34:c6c5e7ec9163 137 str_time.tm_min = atoi(tmpMinute);
MAA 34:c6c5e7ec9163 138 str_time.tm_sec = atoi(tmpSecond)+2;
MAA 34:c6c5e7ec9163 139 str_time.tm_isdst = 0; // Is DST on? 1 = yes, 0 = no, -1 = unknown
MAA 34:c6c5e7ec9163 140 t_of_day = mktime(&str_time);
MAA 34:c6c5e7ec9163 141
MAA 34:c6c5e7ec9163 142 debug->printf("-------------------------------\r\n");
MAA 34:c6c5e7ec9163 143 debug->printf("Setting time as seen below:\r\n");
MAA 34:c6c5e7ec9163 144 debug->printf("Year: %s\r\n", tmpYear);
MAA 34:c6c5e7ec9163 145 debug->printf("Month: %s\r\n", tmpMonth);
MAA 34:c6c5e7ec9163 146 debug->printf("Day: %s\r\n", tmpDay);
MAA 34:c6c5e7ec9163 147 debug->printf("Hour: %s\r\n", tmpHour);
MAA 34:c6c5e7ec9163 148 debug->printf("Minute: %s\r\n", tmpMinute);
MAA 34:c6c5e7ec9163 149 debug->printf("Second: %s\r\n", tmpSecond);
MAA 34:c6c5e7ec9163 150 debug->printf("-------------------------------\r\n");
MAA 34:c6c5e7ec9163 151 debug->printf("time since epoch in seconds:");
MAA 34:c6c5e7ec9163 152 debug->printf("%d", (unsigned long)t_of_day);
MAA 34:c6c5e7ec9163 153 debug->printf("\r\n");
MAA 34:c6c5e7ec9163 154 debug->printf("-------------------------------\r\n");
MAA 34:c6c5e7ec9163 155
MAA 34:c6c5e7ec9163 156 set_time((unsigned long)t_of_day);
MAA 34:c6c5e7ec9163 157
MAA 34:c6c5e7ec9163 158 RTC_set = true;
MAA 34:c6c5e7ec9163 159
MAA 34:c6c5e7ec9163 160
MAA 34:c6c5e7ec9163 161 return t_of_day;
MAA 34:c6c5e7ec9163 162 }
MAA 34:c6c5e7ec9163 163
MAA 34:c6c5e7ec9163 164
MAA 24:099df3fa2b13 165 //dispflag func
MAA 24:099df3fa2b13 166 void setDispFlag(void){
MAA 24:099df3fa2b13 167 dispFlag = true;
MAA 24:099df3fa2b13 168 }
MAA 23:2e914b705b99 169
MAA 24:099df3fa2b13 170 //set check state flag func
MAA 24:099df3fa2b13 171 void setCheckStateFlag(void){
MAA 24:099df3fa2b13 172 checkStateFlag = true;
MAA 24:099df3fa2b13 173 }
MAA 23:2e914b705b99 174
MAA 39:0aeb019323bf 175 //set time variables
MAA 39:0aeb019323bf 176 void setTime(int s, int m, int h){
MAA 39:0aeb019323bf 177 seconds = s;
MAA 39:0aeb019323bf 178 minutes = m;
MAA 39:0aeb019323bf 179 hours = h;
MAA 39:0aeb019323bf 180 }
MAA 39:0aeb019323bf 181
MAA 39:0aeb019323bf 182 //get time
MAA 39:0aeb019323bf 183 string getTime(void){
MAA 41:d7d77ddd32c6 184 memset(timeArr, '\0', 10);
MAA 39:0aeb019323bf 185 snprintf(timeArr, 10, "%.2d:%.2d:%.2d", hours, minutes, seconds);
MAA 39:0aeb019323bf 186 timeStr = timeArr;
MAA 39:0aeb019323bf 187 return timeStr;
MAA 39:0aeb019323bf 188 }
MAA 39:0aeb019323bf 189
MAA 39:0aeb019323bf 190 //pps tick
MAA 39:0aeb019323bf 191 void pps_Tick(){
MAA 39:0aeb019323bf 192 seconds += 1;
MAA 39:0aeb019323bf 193 if(seconds == 60){
MAA 39:0aeb019323bf 194 minutes += 1;
MAA 39:0aeb019323bf 195 seconds = 0;
MAA 39:0aeb019323bf 196 }
MAA 39:0aeb019323bf 197 if(minutes == 60){
MAA 39:0aeb019323bf 198 hours += 1;
MAA 39:0aeb019323bf 199 minutes = 0;
MAA 39:0aeb019323bf 200 }
MAA 39:0aeb019323bf 201 if(hours == 24){
MAA 43:358e853ba2c9 202 hours = 0;
MAA 44:14ec59d2170c 203 //prompt for date change when this happens.
MAA 44:14ec59d2170c 204
MAA 44:14ec59d2170c 205 fileNameUpdated = false;
MAA 39:0aeb019323bf 206 }
MAA 39:0aeb019323bf 207 }
MAA 39:0aeb019323bf 208
MAA 35:ccc79f4147f2 209 //timer reset // clock update
MAA 34:c6c5e7ec9163 210 void resetTimer(void){
MAA 39:0aeb019323bf 211 t.reset();
MAA 39:0aeb019323bf 212 pps_Tick();
MAA 34:c6c5e7ec9163 213 }
MAA 34:c6c5e7ec9163 214
MAA 44:14ec59d2170c 215 //test without mag data
MAA 44:14ec59d2170c 216 void testMagWithoutMag(void){
MAA 44:14ec59d2170c 217 ///used for test of date change
MAA 44:14ec59d2170c 218 BMAG_Data_Rdy = true;
MAA 44:14ec59d2170c 219 ///
MAA 44:14ec59d2170c 220 }
MAA 44:14ec59d2170c 221
MAA 43:358e853ba2c9 222 //bmag interrupt enable
MAA 43:358e853ba2c9 223 void bmagSerialInterruptEnable(void){
MAA 43:358e853ba2c9 224 //BMAG communication init
MAA 43:358e853ba2c9 225 bmag.baud(115200);
MAA 43:358e853ba2c9 226 bmag.attach(&bmagrxCallback, MODSERIAL::RxIrq);
MAA 43:358e853ba2c9 227 detachMag = true;
MAA 43:358e853ba2c9 228 }
MAA 43:358e853ba2c9 229
MAA 0:b3313c5ffca3 230 int main(void){
MAA 39:0aeb019323bf 231 //init pps timing variables
MAA 39:0aeb019323bf 232 seconds = 0;
MAA 39:0aeb019323bf 233 minutes = 0;
MAA 39:0aeb019323bf 234 hours = 0;
MAA 41:d7d77ddd32c6 235 memset(timeArr, '\0', 10);
MAA 39:0aeb019323bf 236 memset(flushStr,'\0',200);
MAA 39:0aeb019323bf 237
MAA 28:ed0d29f63b55 238 //init pth char arrays
MAA 28:ed0d29f63b55 239 memset(PreassureArr,'\0',10);
MAA 28:ed0d29f63b55 240 memset(TemperatureArr,'\0',10);
MAA 28:ed0d29f63b55 241 memset(HumidityArr,'\0',10);
MAA 34:c6c5e7ec9163 242 memset(timer_ms,'\0',5);
MAA 34:c6c5e7ec9163 243 memset(time_buffer,'\0',32);
MAA 28:ed0d29f63b55 244
MAA 28:ed0d29f63b55 245 t.start();
MAA 28:ed0d29f63b55 246
MAA 27:efd122db8855 247 EA_OLED();
MAA 27:efd122db8855 248
MAA 30:072e918663b8 249 //initializing watchdog, timeout 5 seconds
MAA 6:6d1683c8b26b 250 Watchdog wd;
MAA 30:072e918663b8 251 wd.init(5.0);
MAA 34:c6c5e7ec9163 252
MAA 34:c6c5e7ec9163 253 //PPS
MAA 41:d7d77ddd32c6 254 InterruptIn PPS(p12);
MAA 34:c6c5e7ec9163 255 PPS.rise(&resetTimer);
MAA 23:2e914b705b99 256
MAA 8:d6287c33b54a 257 //Led outputs
MAA 36:4d7a41f97ff5 258 DigitalOut redLed(p25);
MAA 8:d6287c33b54a 259 DigitalOut greenLed(p23);
MAA 8:d6287c33b54a 260
MAA 10:eb026e023a3c 261 //MagTime manually set by user input
MAA 10:eb026e023a3c 262 DigitalIn timeSetManuallyButton(p30);
MAA 10:eb026e023a3c 263 timeSetManuallyButton.mode(PullUp);
MAA 10:eb026e023a3c 264
MAA 8:d6287c33b54a 265 redLed = 0;
MAA 11:d3d26d0e71ea 266 greenLed = 0;
MAA 8:d6287c33b54a 267
MAA 30:072e918663b8 268 //init of battery string
MAA 8:d6287c33b54a 269 memset(batteryvoltagearr,'\0',5);
MAA 8:d6287c33b54a 270 batteryvoltage = "";
MAA 8:d6287c33b54a 271
MAA 8:d6287c33b54a 272 //Analog battery reading
MAA 8:d6287c33b54a 273 AnalogIn battery(A5);
MAA 8:d6287c33b54a 274
MAA 4:c70ef089a3fd 275 string currentFilename, nextFilename;
MAA 4:c70ef089a3fd 276
MAA 5:11782a2008c2 277 currentFilename = "/usb/tempFile.sps";
MAA 5:11782a2008c2 278
MAA 0:b3313c5ffca3 279 //Initializing string buffer for GPS data
MAA 0:b3313c5ffca3 280 string GPS_String_Buff;
MAA 0:b3313c5ffca3 281 GPS_String_Buff.resize(128);
MAA 0:b3313c5ffca3 282 memset(tmpGpsRxString,'\0',128);
MAA 0:b3313c5ffca3 283
MAA 8:d6287c33b54a 284 //Initializing string buffer for BMAG data
MAA 8:d6287c33b54a 285 string BMAG_String_Buff;
MAA 8:d6287c33b54a 286 BMAG_String_Buff.resize(128);
MAA 8:d6287c33b54a 287 memset(tmpBMAGRxString,'\0',128);
MAA 8:d6287c33b54a 288
MAA 2:39c4a85dc2a4 289 //debug comm setup
MAA 0:b3313c5ffca3 290 dbg.baud(115200);
MAA 6:6d1683c8b26b 291 dbg.printf("Init...\r\n");
MAA 28:ed0d29f63b55 292
MAA 28:ed0d29f63b55 293 //bme pth sensor init
MAA 28:ed0d29f63b55 294 if(!BME.init(BME280_i2c, 0x77)){
MAA 28:ed0d29f63b55 295 dbg.printf("BME280 init failed!\r\n");
MAA 28:ed0d29f63b55 296
MAA 28:ed0d29f63b55 297 }
MAA 28:ed0d29f63b55 298 if(!BME.start()){
MAA 28:ed0d29f63b55 299 dbg.printf("BME280 start failed!\r\n");
MAA 28:ed0d29f63b55 300 }
MAA 0:b3313c5ffca3 301
MAA 28:ed0d29f63b55 302 if(BME.is_ok()){
MAA 28:ed0d29f63b55 303 PTHSensorActive = true;
MAA 28:ed0d29f63b55 304 }
MAA 28:ed0d29f63b55 305
MAA 0:b3313c5ffca3 306 //setting up USB device
MAA 0:b3313c5ffca3 307 USBHostMSD msd("usb");
MAA 0:b3313c5ffca3 308
MAA 28:ed0d29f63b55 309 clear_display_waiting();
MAA 28:ed0d29f63b55 310
MAA 9:ddc774114729 311 //USB message
MAA 27:efd122db8855 312 l1 = "Mounting";
MAA 27:efd122db8855 313 l2 = "USB pen";
MAA 40:45289e57887d 314 thr_writelines.start(write_lines);
MAA 28:ed0d29f63b55 315 wait_ms(1000);
MAA 10:eb026e023a3c 316
MAA 0:b3313c5ffca3 317 while(!msd.connect()){
MAA 0:b3313c5ffca3 318 dbg.printf("Trying to connect to usb flash disk\r\n");
MAA 6:6d1683c8b26b 319 wait_ms(500);
MAA 0:b3313c5ffca3 320 }
MAA 0:b3313c5ffca3 321
MAA 0:b3313c5ffca3 322 //Opening a file on usb disk
MAA 34:c6c5e7ec9163 323 FILE * fp;
MAA 39:0aeb019323bf 324 FILE * e_fp;
MAA 34:c6c5e7ec9163 325 fp = fopen(currentFilename.c_str(), "a");
MAA 39:0aeb019323bf 326 e_fp = fopen("Errorlog.txt", "a");
MAA 4:c70ef089a3fd 327 wait_ms(100);
MAA 0:b3313c5ffca3 328
MAA 2:39c4a85dc2a4 329 //initializing SPS generation
MAA 2:39c4a85dc2a4 330 SPS spsGen;
MAA 6:6d1683c8b26b 331
MAA 6:6d1683c8b26b 332 //GPS communication init
MAA 6:6d1683c8b26b 333 gps.baud(9600);
MAA 6:6d1683c8b26b 334 gps.attach(&rxCallback, MODSERIAL::RxIrq);
MAA 32:a8d74b3c9d6f 335
MAA 28:ed0d29f63b55 336 clear_display_waiting();
MAA 28:ed0d29f63b55 337
MAA 27:efd122db8855 338 //GPS message
MAA 27:efd122db8855 339 l1 = "GPS";
MAA 27:efd122db8855 340 l2 = "Startup";
MAA 40:45289e57887d 341 thr_writelines.start(write_lines);
MAA 27:efd122db8855 342 wait_ms(1000);
MAA 10:eb026e023a3c 343
MAA 7:872984a67d5b 344 dbg.printf("Init.... Done!\r\n");
MAA 8:d6287c33b54a 345
MAA 8:d6287c33b54a 346 //init interpreterid
MAA 8:d6287c33b54a 347 int barcodeint = atoi(BARCODE);
MAA 8:d6287c33b54a 348 memset(interpreterTmpID,'\0',10);
MAA 8:d6287c33b54a 349 sprintf(interpreterTmpID,"%4x", barcodeint);
MAA 23:2e914b705b99 350 INTERPRETERID.assign(interpreterTmpID);
MAA 11:d3d26d0e71ea 351
MAA 11:d3d26d0e71ea 352 //Init Done!
MAA 27:efd122db8855 353 clear_display_waiting();
MAA 27:efd122db8855 354 l1 = "Init";
MAA 27:efd122db8855 355 l2 = "Done";
MAA 40:45289e57887d 356 thr_writelines.start(write_lines);
MAA 27:efd122db8855 357 wait_ms(1000);
MAA 11:d3d26d0e71ea 358
MAA 11:d3d26d0e71ea 359 //Init errorhandler
MAA 21:325cb82f1838 360 ErrorHandler dispTxtHandler(&batteryvoltage, &GGA_Fix_Present, &magParser, &gpsNMEA);
MAA 24:099df3fa2b13 361 dispTxtHandler.setErrorState(NONE);
MAA 23:2e914b705b99 362
MAA 24:099df3fa2b13 363 //init of display timer
MAA 24:099df3fa2b13 364 Ticker dispTicker;
MAA 27:efd122db8855 365 dispTicker.attach(&setDispFlag, 1.0);
MAA 23:2e914b705b99 366
MAA 24:099df3fa2b13 367 //init of state ticker
MAA 24:099df3fa2b13 368 Ticker stateTicker;
MAA 24:099df3fa2b13 369 stateTicker.attach(&setCheckStateFlag, 1.0);
MAA 23:2e914b705b99 370
MAA 43:358e853ba2c9 371 //init ticker for bmag interrupt enable timing
MAA 43:358e853ba2c9 372 Ticker magTicker;
MAA 43:358e853ba2c9 373 magTicker.attach(&bmagSerialInterruptEnable, 30.0);
MAA 43:358e853ba2c9 374
MAA 28:ed0d29f63b55 375 //BME280 pth ticker
MAA 28:ed0d29f63b55 376 Ticker PTHTicker;
MAA 28:ed0d29f63b55 377 PTHTicker.attach(&getPthValues, 11.0);
MAA 28:ed0d29f63b55 378
MAA 32:a8d74b3c9d6f 379 //gps available ticker
MAA 32:a8d74b3c9d6f 380 Ticker gpsAvailableTicker;
MAA 32:a8d74b3c9d6f 381 gpsAvailableTicker.attach(gpsAvailCheck, 10.0);
MAA 38:a1615de4ee64 382
MAA 44:14ec59d2170c 383 //test ticker emulating mag data 1Hz
MAA 44:14ec59d2170c 384 Ticker TestMagTicker;
MAA 44:14ec59d2170c 385
MAA 44:14ec59d2170c 386
MAA 38:a1615de4ee64 387 //clock freqency info
MAA 38:a1615de4ee64 388 dbg.printf("SystemCoreClock = %d Hz\r\n", SystemCoreClock);
MAA 32:a8d74b3c9d6f 389
MAA 30:072e918663b8 390 snprintf(PreassureArr, 10, "%s", "NaN");
MAA 30:072e918663b8 391 snprintf(TemperatureArr, 10, "%s", "NaN");
MAA 30:072e918663b8 392 snprintf(HumidityArr, 10, "%s", "NaN");
MAA 24:099df3fa2b13 393
MAA 5:11782a2008c2 394 //infinite loop running after initialization
MAA 0:b3313c5ffca3 395 while(run) {
MAA 0:b3313c5ffca3 396
MAA 43:358e853ba2c9 397 //disable continuous magtick detach
MAA 43:358e853ba2c9 398 if(detachMag){
MAA 43:358e853ba2c9 399 magTicker.detach();
MAA 44:14ec59d2170c 400 detachMag = false;
MAA 44:14ec59d2170c 401
MAA 44:14ec59d2170c 402 //for test without mag data
MAA 44:14ec59d2170c 403 TestMagTicker.attach(testMagWithoutMag, 1.0);
MAA 44:14ec59d2170c 404
MAA 43:358e853ba2c9 405 }
MAA 40:45289e57887d 406
MAA 24:099df3fa2b13 407 //display txt on disp
MAA 24:099df3fa2b13 408 if(dispFlag){
MAA 27:efd122db8855 409
MAA 24:099df3fa2b13 410 //get state to be displayed
MAA 24:099df3fa2b13 411 presentState = dispTxtHandler.getErrorState();
MAA 24:099df3fa2b13 412 //ensure that display is only cleared if the state to be displayed has changed.
MAA 24:099df3fa2b13 413 //this ensures that a minimum time duration is used to clear the display.
MAA 41:d7d77ddd32c6 414
MAA 41:d7d77ddd32c6 415 //thr_writelines.start(clear_display);
MAA 41:d7d77ddd32c6 416
MAA 27:efd122db8855 417
MAA 27:efd122db8855 418 //update display text
MAA 27:efd122db8855 419 l1 = dispTxtHandler.getLine1();
MAA 27:efd122db8855 420 l2 = dispTxtHandler.getLine2();
MAA 27:efd122db8855 421
MAA 41:d7d77ddd32c6 422
MAA 41:d7d77ddd32c6 423 thr_writelines.start(write_lines);
MAA 41:d7d77ddd32c6 424
MAA 27:efd122db8855 425
MAA 24:099df3fa2b13 426 //Ensure that next check will have the current state as previous state, as expected.
MAA 24:099df3fa2b13 427 prevState = presentState;
MAA 24:099df3fa2b13 428
MAA 24:099df3fa2b13 429 //clear display flag
MAA 24:099df3fa2b13 430 dispFlag = false;
MAA 24:099df3fa2b13 431 }
MAA 24:099df3fa2b13 432
MAA 24:099df3fa2b13 433 //check state / set state
MAA 24:099df3fa2b13 434 if(checkStateFlag){
MAA 24:099df3fa2b13 435
MAA 41:d7d77ddd32c6 436
MAA 32:a8d74b3c9d6f 437 //inform of missing GPS
MAA 32:a8d74b3c9d6f 438 if(gpsCheckedAfter10Sec && !gpsRunning){
MAA 32:a8d74b3c9d6f 439 dispTxtHandler.setErrorState(NO_GPS);
MAA 32:a8d74b3c9d6f 440 }
MAA 32:a8d74b3c9d6f 441
MAA 44:14ec59d2170c 442 if(gpsCheckedAfter10Sec){
MAA 32:a8d74b3c9d6f 443
MAA 44:14ec59d2170c 444 if(gpsRunning){
MAA 44:14ec59d2170c 445 gpsAvailableTicker.detach();
MAA 32:a8d74b3c9d6f 446 }
MAA 32:a8d74b3c9d6f 447
MAA 44:14ec59d2170c 448 if(!PTHSensorActive){
MAA 44:14ec59d2170c 449 //bme pth sensor init
MAA 44:14ec59d2170c 450 if(!BME.init(BME280_i2c, 0x77)){
MAA 44:14ec59d2170c 451 dbg.printf("BME280 init failed!\r\n");
MAA 44:14ec59d2170c 452 }
MAA 44:14ec59d2170c 453 if(!BME.start()){
MAA 44:14ec59d2170c 454 dbg.printf("BME280 start failed!\r\n");
MAA 44:14ec59d2170c 455 }
MAA 44:14ec59d2170c 456
MAA 44:14ec59d2170c 457 if(BME.is_ok()){
MAA 44:14ec59d2170c 458 PTHSensorActive = true;
MAA 44:14ec59d2170c 459 }
MAA 44:14ec59d2170c 460 }
MAA 44:14ec59d2170c 461
MAA 44:14ec59d2170c 462 gpsCheckedAfter10Sec = false;
MAA 32:a8d74b3c9d6f 463 }
MAA 32:a8d74b3c9d6f 464
MAA 24:099df3fa2b13 465 //missingGpsConnectionCounter gets cleared at every received gps string
MAA 26:68277a308839 466 if(!GPS_Override_Active && missingGpsConnectionCounter < 10){
MAA 24:099df3fa2b13 467
MAA 24:099df3fa2b13 468 missingGpsConnectionCounter += 1;
MAA 24:099df3fa2b13 469 }
MAA 24:099df3fa2b13 470
MAA 34:c6c5e7ec9163 471 if(gpsOverridePushButtonCounter > 1){
MAA 24:099df3fa2b13 472 GPS_Override_Active = true;
MAA 24:099df3fa2b13 473 }
MAA 24:099df3fa2b13 474
MAA 26:68277a308839 475
MAA 26:68277a308839 476 //pushbutton check gpsOverridePushButtonCounter
MAA 26:68277a308839 477 if(!timeSetManuallyButton){
MAA 26:68277a308839 478 gpsOverridePushButtonCounter += 1;
MAA 26:68277a308839 479 }
MAA 26:68277a308839 480
MAA 24:099df3fa2b13 481 if(missingGpsConnectionCounter > 30 && !GPS_Override_Active){
MAA 24:099df3fa2b13 482 dispTxtHandler.setErrorState(GPS_OVERRIDE_NEEDED);
MAA 24:099df3fa2b13 483
MAA 24:099df3fa2b13 484 redLed = 1;
MAA 24:099df3fa2b13 485 greenLed = 0;
MAA 24:099df3fa2b13 486
MAA 24:099df3fa2b13 487 }
MAA 24:099df3fa2b13 488
MAA 24:099df3fa2b13 489 if((toggler && magStringsReceived &&(missingGpsCnt < GPSACQTIMELIMITINSECONDS)) || (toggler && dispTxtHandler.getMagTimePromtStatus()) && magStringsReceived) {
MAA 24:099df3fa2b13 490 //show battery voltage and gps fix status for 10 seconds
MAA 24:099df3fa2b13 491 dispTxtHandler.setErrorState(DISPLAY_VBAT_FIX);
MAA 41:d7d77ddd32c6 492
MAA 41:d7d77ddd32c6 493 if(!tickerUpdated){
MAA 41:d7d77ddd32c6 494 dispTicker.detach();
MAA 41:d7d77ddd32c6 495 dispTicker.attach(&setDispFlag, 10.0);
MAA 41:d7d77ddd32c6 496 tickerUpdated = true;
MAA 41:d7d77ddd32c6 497
MAA 41:d7d77ddd32c6 498 }
MAA 41:d7d77ddd32c6 499
MAA 24:099df3fa2b13 500 togglecount += 1;
MAA 41:d7d77ddd32c6 501 if(togglecount >= 2) {
MAA 24:099df3fa2b13 502 toggler = false;
MAA 24:099df3fa2b13 503 togglecount = 0;
MAA 24:099df3fa2b13 504 }
MAA 24:099df3fa2b13 505
MAA 24:099df3fa2b13 506 }
MAA 24:099df3fa2b13 507
MAA 24:099df3fa2b13 508 if((!toggler && (missingGpsCnt < GPSACQTIMELIMITINSECONDS) && magStringsReceived) || (!toggler && dispTxtHandler.getMagTimePromtStatus()) && magStringsReceived) {
MAA 24:099df3fa2b13 509 //show magnT reading for 10 seconds
MAA 24:099df3fa2b13 510 dispTxtHandler.setErrorState(DISPLAY_MAG_MEASUREMENT);
MAA 24:099df3fa2b13 511
MAA 24:099df3fa2b13 512 togglecount += 1;
MAA 41:d7d77ddd32c6 513 if(togglecount >= 2) {
MAA 24:099df3fa2b13 514 toggler = true;
MAA 24:099df3fa2b13 515 togglecount = 0;
MAA 24:099df3fa2b13 516 }
MAA 24:099df3fa2b13 517 }
MAA 24:099df3fa2b13 518
MAA 24:099df3fa2b13 519
MAA 24:099df3fa2b13 520 //if battery voltage is below BATTERYLOW limit, initiate battery low error state
MAA 24:099df3fa2b13 521 if((0.00036621652)*battery.read_u16() < BATTERYLOWLIMIT){
MAA 24:099df3fa2b13 522 dispTxtHandler.setErrorState(BATTERY_LOW);
MAA 24:099df3fa2b13 523 redLed = 1;
MAA 24:099df3fa2b13 524 greenLed = 0;
MAA 24:099df3fa2b13 525 }
MAA 24:099df3fa2b13 526
MAA 24:099df3fa2b13 527 //if gga fix is not present for a prolonged period of time, prompt user
MAA 24:099df3fa2b13 528 if((missingGpsCnt > GPSACQTIMELIMITINSECONDS) && !dispTxtHandler.getMagTimePromtStatus()) {
MAA 24:099df3fa2b13 529
MAA 24:099df3fa2b13 530 //Prompt user to set mag time manually
MAA 24:099df3fa2b13 531 dispTxtHandler.setErrorState(NO_FIX);
MAA 24:099df3fa2b13 532 }
MAA 24:099df3fa2b13 533
MAA 24:099df3fa2b13 534 //if gps data is missing for more than 10 mag reading cycles
MAA 24:099df3fa2b13 535 if((magCntWithoutGpsData > 10) && !magTimeSetManually) {
MAA 24:099df3fa2b13 536 //show error indication of gps data missing
MAA 24:099df3fa2b13 537 dispTxtHandler.setErrorState(NO_GPS);
MAA 24:099df3fa2b13 538
MAA 24:099df3fa2b13 539 //set led error status
MAA 24:099df3fa2b13 540 redLed = 1;
MAA 24:099df3fa2b13 541 greenLed = 0;
MAA 24:099df3fa2b13 542
MAA 24:099df3fa2b13 543 GGA_Fix_Present = false;
MAA 24:099df3fa2b13 544
MAA 24:099df3fa2b13 545 //knaptryk check
MAA 24:099df3fa2b13 546 if(!timeSetManuallyButton){
MAA 24:099df3fa2b13 547 timeSetManuallyCount += 1;
MAA 24:099df3fa2b13 548 }
MAA 24:099df3fa2b13 549
MAA 24:099df3fa2b13 550 if(timeSetManuallyCount > 3){
MAA 24:099df3fa2b13 551 magTimeSetManually = true;
MAA 24:099df3fa2b13 552 }
MAA 24:099df3fa2b13 553
MAA 24:099df3fa2b13 554 }
MAA 24:099df3fa2b13 555
MAA 24:099df3fa2b13 556
MAA 24:099df3fa2b13 557 if(!GGA_Fix_Present && GpsCntWithoutMagData < 20){
MAA 24:099df3fa2b13 558 //Missing GGA fix LED indicator
MAA 24:099df3fa2b13 559 greenLed = 0;
MAA 24:099df3fa2b13 560 redLed = 1;
MAA 24:099df3fa2b13 561 }
MAA 24:099df3fa2b13 562
MAA 24:099df3fa2b13 563 if(GpsCntWithoutMagData > 20){
MAA 24:099df3fa2b13 564 //Missing MAG data prompt
MAA 24:099df3fa2b13 565 dispTxtHandler.setErrorState(NO_MAG_DATA);
MAA 24:099df3fa2b13 566 greenLed = 0;
MAA 24:099df3fa2b13 567 redLed = 1;
MAA 24:099df3fa2b13 568 }
MAA 24:099df3fa2b13 569
MAA 24:099df3fa2b13 570 if((GGA_Fix_Present && GpsCntWithoutMagData < 20) || (magTimeSetManually && GpsCntWithoutMagData < 20)){
MAA 24:099df3fa2b13 571 //GGA fix LED indicator / time set manually unless battery is low
MAA 24:099df3fa2b13 572 if(dispTxtHandler.getErrorState() != BATTERY_LOW){
MAA 24:099df3fa2b13 573 greenLed = 1;
MAA 24:099df3fa2b13 574 redLed = 0;
MAA 24:099df3fa2b13 575 }
MAA 24:099df3fa2b13 576 }
MAA 24:099df3fa2b13 577
MAA 24:099df3fa2b13 578 checkStateFlag = false;
MAA 24:099df3fa2b13 579 }
MAA 24:099df3fa2b13 580
MAA 39:0aeb019323bf 581 //if the gps rx buffer is full, get info to error file.
MAA 6:6d1683c8b26b 582 if(gps.rxBufferFull()){
MAA 39:0aeb019323bf 583 gps.move(flushStr, gps.rxBufferGetCount());
MAA 39:0aeb019323bf 584 flushStrErr = true;
MAA 39:0aeb019323bf 585 //remkark hvis dette sker i error fil
MAA 6:6d1683c8b26b 586 }
MAA 6:6d1683c8b26b 587
MAA 24:099df3fa2b13 588 //if the bmag rx buffer is full, flush the buffer.
MAA 8:d6287c33b54a 589 if(bmag.rxBufferFull()){
MAA 39:0aeb019323bf 590 bmag.move(flushStr, bmag.rxBufferGetCount());
MAA 39:0aeb019323bf 591 flushStrErr = true;
MAA 39:0aeb019323bf 592 //remkark hvis dette sker i error fil
MAA 8:d6287c33b54a 593 }
MAA 8:d6287c33b54a 594
MAA 21:325cb82f1838 595 //if bmag data string is available
MAA 21:325cb82f1838 596 if(BMAG_Data_Rdy) {
MAA 22:9f5955f051f5 597
MAA 34:c6c5e7ec9163 598 //reset last read ms val
MAA 34:c6c5e7ec9163 599 memset(timer_ms,'\0',5);
MAA 39:0aeb019323bf 600
MAA 39:0aeb019323bf 601 //read time since pps interrupt
MAA 34:c6c5e7ec9163 602 tmpTime = t.read_ms();
MAA 38:a1615de4ee64 603 snprintf (timer_ms, 5, "%d",tmpTime);
MAA 39:0aeb019323bf 604
MAA 39:0aeb019323bf 605 if(tmpTime > 1000){
MAA 39:0aeb019323bf 606 writeToUsb("timer abover 1000 ms\r\n", e_fp);
MAA 39:0aeb019323bf 607 }
MAA 38:a1615de4ee64 608
MAA 34:c6c5e7ec9163 609 if(RTC_set){
MAA 35:ccc79f4147f2 610
MAA 39:0aeb019323bf 611 string tmpTime = getTime();
MAA 35:ccc79f4147f2 612
MAA 34:c6c5e7ec9163 613
MAA 34:c6c5e7ec9163 614 //HH
MAA 35:ccc79f4147f2 615 gpsNMEA.currentUTCFromGPRMC[0] = tmpTime[0];
MAA 35:ccc79f4147f2 616 gpsNMEA.currentUTCFromGPRMC[1] = tmpTime[1];
MAA 34:c6c5e7ec9163 617
MAA 34:c6c5e7ec9163 618 //MM
MAA 35:ccc79f4147f2 619 gpsNMEA.currentUTCFromGPRMC[3] = tmpTime[3];
MAA 35:ccc79f4147f2 620 gpsNMEA.currentUTCFromGPRMC[4] = tmpTime[4];
MAA 34:c6c5e7ec9163 621
MAA 34:c6c5e7ec9163 622 //SS
MAA 35:ccc79f4147f2 623 gpsNMEA.currentUTCFromGPRMC[6] = tmpTime[6];
MAA 35:ccc79f4147f2 624 gpsNMEA.currentUTCFromGPRMC[7] = tmpTime[7];
MAA 30:072e918663b8 625 }
MAA 30:072e918663b8 626
MAA 35:ccc79f4147f2 627
MAA 34:c6c5e7ec9163 628 if(strlen(timer_ms) == 1){
MAA 30:072e918663b8 629 gpsNMEA.currentUTCFromGPRMC[9] = '0';
MAA 30:072e918663b8 630 gpsNMEA.currentUTCFromGPRMC[10] = '0';
MAA 34:c6c5e7ec9163 631 gpsNMEA.currentUTCFromGPRMC[11] = timer_ms[0];
MAA 34:c6c5e7ec9163 632 }
MAA 34:c6c5e7ec9163 633
MAA 34:c6c5e7ec9163 634 if(strlen(timer_ms) == 2){
MAA 34:c6c5e7ec9163 635 gpsNMEA.currentUTCFromGPRMC[9] = '0';
MAA 34:c6c5e7ec9163 636 gpsNMEA.currentUTCFromGPRMC[10] = timer_ms[0];
MAA 34:c6c5e7ec9163 637 gpsNMEA.currentUTCFromGPRMC[11] = timer_ms[1];
MAA 34:c6c5e7ec9163 638 }
MAA 33:a7f044b3e057 639
MAA 34:c6c5e7ec9163 640 if(strlen(timer_ms) == 3){
MAA 34:c6c5e7ec9163 641 gpsNMEA.currentUTCFromGPRMC[9] = timer_ms[0];
MAA 34:c6c5e7ec9163 642 gpsNMEA.currentUTCFromGPRMC[10] = timer_ms[1];
MAA 34:c6c5e7ec9163 643 gpsNMEA.currentUTCFromGPRMC[11] = timer_ms[2];
MAA 34:c6c5e7ec9163 644 }
MAA 34:c6c5e7ec9163 645
MAA 34:c6c5e7ec9163 646 if(strlen(timer_ms) > 3 || strlen(timer_ms) == 0){
MAA 34:c6c5e7ec9163 647 gpsNMEA.currentUTCFromGPRMC[9] = '0';
MAA 34:c6c5e7ec9163 648 gpsNMEA.currentUTCFromGPRMC[10] = '0';
MAA 34:c6c5e7ec9163 649 gpsNMEA.currentUTCFromGPRMC[11] = '0';
MAA 34:c6c5e7ec9163 650 }
MAA 34:c6c5e7ec9163 651
MAA 34:c6c5e7ec9163 652
MAA 24:099df3fa2b13 653 //change magStringsReceived flag to true when mag data is available
MAA 23:2e914b705b99 654 if(magStringsReceived == false){
MAA 23:2e914b705b99 655 magStringsReceived = true;
MAA 23:2e914b705b99 656 }
MAA 23:2e914b705b99 657
MAA 23:2e914b705b99 658 //if gps override is active reset magCntWithoutGpsData
MAA 23:2e914b705b99 659 if(GPS_Override_Active){
MAA 23:2e914b705b99 660 magCntWithoutGpsData = 0;
MAA 23:2e914b705b99 661 }
MAA 23:2e914b705b99 662
MAA 23:2e914b705b99 663 //if mag data is present but gps data is not and gps override is not active
MAA 23:2e914b705b99 664 if(magCntWithoutGpsData < 100 && !GPS_Override_Active) {
MAA 10:eb026e023a3c 665 magCntWithoutGpsData += 1;
MAA 10:eb026e023a3c 666 }
MAA 23:2e914b705b99 667
MAA 24:099df3fa2b13 668 //move bmag data from rxbuffer to temporary array
MAA 21:325cb82f1838 669 bmag.move(tmpBMAGRxString, bmag.rxBufferGetCount());
MAA 21:325cb82f1838 670
MAA 8:d6287c33b54a 671 //copy c_string to string
MAA 21:325cb82f1838 672 BMAG_String_Buff.assign(tmpBMAGRxString);
MAA 21:325cb82f1838 673
MAA 8:d6287c33b54a 674 //clear tmpRxBuffer
MAA 21:325cb82f1838 675 memset(tmpBMAGRxString,'\0',128);
MAA 21:325cb82f1838 676
MAA 21:325cb82f1838 677 //parse bmag string
MAA 21:325cb82f1838 678 magParser.parseBMAGString(BMAG_String_Buff);
MAA 21:325cb82f1838 679
MAA 21:325cb82f1838 680 //reset counter containing gps string count without mag data
MAA 8:d6287c33b54a 681 GpsCntWithoutMagData = 0;
MAA 21:325cb82f1838 682
MAA 10:eb026e023a3c 683 //update filename when date is available with gga fix
MAA 21:325cb82f1838 684 if(!fileNameUpdated && GGA_Fix_Present) {
MAA 6:6d1683c8b26b 685 spsGen.generateSpsFilename(gpsNMEA.currentDATEFromGPRMC);
MAA 6:6d1683c8b26b 686 nextFilename.assign(spsGen.getSpsFileName());
MAA 6:6d1683c8b26b 687 fclose(fp);
MAA 6:6d1683c8b26b 688 currentFilename.assign(nextFilename);
MAA 6:6d1683c8b26b 689 nextFilename = "";
MAA 21:325cb82f1838 690
MAA 34:c6c5e7ec9163 691 fp = fopen(currentFilename.c_str(), "a");
MAA 21:325cb82f1838 692
MAA 7:872984a67d5b 693 fileNameUpdated = true;
MAA 24:099df3fa2b13 694
MAA 24:099df3fa2b13 695 spsGen.UpdateHeaderString(BARCODE, IDENTIFIERID, GROUP, TIMEZONE, ENCODING,SOURCEIDENTIFICATION, INTERPRETERID, DATALINEVERSION, FWSRCVERSION, FWIVERSION);
MAA 21:325cb82f1838 696 //add header to top of file
MAA 21:325cb82f1838 697 writeToUsb(spsGen.getHeaderString(), fp);
MAA 21:325cb82f1838 698 }
MAA 21:325cb82f1838 699
MAA 7:872984a67d5b 700 //if date has changed, ensure new file creation.
MAA 7:872984a67d5b 701 spsGen.generateSpsFilename(gpsNMEA.currentDATEFromGPRMC);
MAA 21:325cb82f1838 702 if(currentFilename != spsGen.getSpsFileName()) {
MAA 21:325cb82f1838 703 fileNameUpdated = false;
MAA 21:325cb82f1838 704 }
MAA 39:0aeb019323bf 705
MAA 8:d6287c33b54a 706 //read battery voltage
MAA 8:d6287c33b54a 707 sprintf(batteryvoltagearr, "%0.1f",(0.00036621652)*battery.read_u16());
MAA 8:d6287c33b54a 708 batteryvoltage.assign(batteryvoltagearr);
MAA 21:325cb82f1838 709
MAA 8:d6287c33b54a 710 //generate default sps string
MAA 28:ed0d29f63b55 711 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, PreassureArr, TemperatureArr, HumidityArr, magParser.getMagTimeStr(), magParser.getMagNTStr(), magParser.getMagSq(), &dbg);
MAA 21:325cb82f1838 712
MAA 8:d6287c33b54a 713 //write data strings to sps file
MAA 21:325cb82f1838 714 if(GGA_Fix_Present) {
MAA 21:325cb82f1838 715
MAA 8:d6287c33b54a 716 missingGpsCnt = 0;
MAA 34:c6c5e7ec9163 717
MAA 36:4d7a41f97ff5 718 writeToUsb(spsGen.getCurrentString(), fp);
MAA 21:325cb82f1838 719
MAA 21:325cb82f1838 720 if(!firstLineWritten) {
MAA 24:099df3fa2b13 721 spsGen.UpdateHeaderString(BARCODE, IDENTIFIERID, GROUP, TIMEZONE, ENCODING,SOURCEIDENTIFICATION, INTERPRETERID, DATALINEVERSION, FWSRCVERSION, FWIVERSION);
MAA 8:d6287c33b54a 722 writeToUsb(spsGen.getHeaderString(), fp);
MAA 21:325cb82f1838 723 firstLineWritten = true;
MAA 21:325cb82f1838 724 }
MAA 21:325cb82f1838 725
MAA 34:c6c5e7ec9163 726
MAA 21:325cb82f1838 727
MAA 21:325cb82f1838 728 if(!lastErrStatus && firstErrsWritten) {
MAA 38:a1615de4ee64 729 //force clock resync
MAA 38:a1615de4ee64 730 RTC_set = false;
MAA 36:4d7a41f97ff5 731
MAA 36:4d7a41f97ff5 732 //error end string
MAA 21:325cb82f1838 733 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 734 writeToUsb(spsGen.getCurrentErrString(), fp);
MAA 8:d6287c33b54a 735 lastErrStatus = true;
MAA 8:d6287c33b54a 736 firstErrsWritten = false;
MAA 21:325cb82f1838 737 firstLineWritten = false;
MAA 8:d6287c33b54a 738 }
MAA 8:d6287c33b54a 739 }
MAA 21:325cb82f1838 740
MAA 21:325cb82f1838 741 //write data strings to sps file, with error messages as defined in *.sps definition
MAA 21:325cb82f1838 742 if(!GGA_Fix_Present) {
MAA 21:325cb82f1838 743
MAA 21:325cb82f1838 744 if(missingGpsCnt <= GPSACQTIMELIMITINSECONDS) {
MAA 8:d6287c33b54a 745 missingGpsCnt += 1;
MAA 21:325cb82f1838 746 }
MAA 21:325cb82f1838 747
MAA 21:325cb82f1838 748 if(!firstLineWritten) {
MAA 24:099df3fa2b13 749 spsGen.UpdateHeaderString(BARCODE, IDENTIFIERID, GROUP, TIMEZONE, ENCODING,SOURCEIDENTIFICATION, INTERPRETERID, DATALINEVERSION, FWSRCVERSION, FWIVERSION);
MAA 8:d6287c33b54a 750 writeToUsb(spsGen.getHeaderString(), fp);
MAA 21:325cb82f1838 751 firstLineWritten = true;
MAA 11:d3d26d0e71ea 752 }
MAA 21:325cb82f1838 753
MAA 25:57f9e3273979 754 if(firstErrsWritten){
MAA 25:57f9e3273979 755 writeToUsb(spsGen.getCurrentString(), fp);
MAA 25:57f9e3273979 756 }
MAA 21:325cb82f1838 757
MAA 21:325cb82f1838 758 if(lastErrStatus && !firstErrsWritten) {
MAA 21:325cb82f1838 759 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 760 writeToUsb(spsGen.getCurrentErrString(), fp);
MAA 8:d6287c33b54a 761 lastErrStatus = false;
MAA 21:325cb82f1838 762 firstErrsWritten = true;
MAA 21:325cb82f1838 763 }
MAA 21:325cb82f1838 764
MAA 10:eb026e023a3c 765 }
MAA 21:325cb82f1838 766
MAA 12:2b46960a5d41 767 //if user has been notified of time settings needed on bmag, pushbutton can be held for a few cycles to circumvent the set mag time display prompt.
MAA 21:325cb82f1838 768 if(!timeSetManuallyButton && dispTxtHandler.getMagTimePromtStatus()) {
MAA 10:eb026e023a3c 769 timeSetManuallyCount += 1;
MAA 21:325cb82f1838 770
MAA 21:325cb82f1838 771 if(timeSetManuallyCount > 3) {
MAA 21:325cb82f1838 772 magTimeSetManually = true;
MAA 21:325cb82f1838 773 }
MAA 21:325cb82f1838 774 }
MAA 11:d3d26d0e71ea 775
MAA 21:325cb82f1838 776 BMAG_Data_Rdy = false;
MAA 8:d6287c33b54a 777 }
MAA 21:325cb82f1838 778
MAA 10:eb026e023a3c 779
MAA 8:d6287c33b54a 780 if(GPS_Data_Rdy){
MAA 44:14ec59d2170c 781
MAA 32:a8d74b3c9d6f 782 gpsRunning = true;
MAA 32:a8d74b3c9d6f 783
MAA 24:099df3fa2b13 784 missingGpsConnectionCounter = 0;
MAA 24:099df3fa2b13 785
MAA 23:2e914b705b99 786 if(gpsStringsReceived == false){
MAA 23:2e914b705b99 787 gpsStringsReceived = true;
MAA 23:2e914b705b99 788 }
MAA 23:2e914b705b99 789
MAA 10:eb026e023a3c 790 //clear mag data string counter, counting mag data received since last gps string received
MAA 10:eb026e023a3c 791 magCntWithoutGpsData = 0;
MAA 10:eb026e023a3c 792
MAA 10:eb026e023a3c 793 //if gps data has been received without mag data since last gps string, increment counter.
MAA 8:d6287c33b54a 794 if(GpsCntWithoutMagData < 200){
MAA 8:d6287c33b54a 795
MAA 8:d6287c33b54a 796 GpsCntWithoutMagData += 1;
MAA 8:d6287c33b54a 797
MAA 8:d6287c33b54a 798 }
MAA 24:099df3fa2b13 799
MAA 0:b3313c5ffca3 800 gps.scanf("%s", &tmpGpsRxString);
MAA 0:b3313c5ffca3 801
MAA 0:b3313c5ffca3 802 //copy c_string to string
MAA 0:b3313c5ffca3 803 GPS_String_Buff.assign(tmpGpsRxString);
MAA 32:a8d74b3c9d6f 804 dbg.printf(tmpGpsRxString);
MAA 32:a8d74b3c9d6f 805 dbg.printf("\r\n");
MAA 0:b3313c5ffca3 806
MAA 0:b3313c5ffca3 807 //clear tmpRxBuffer
MAA 0:b3313c5ffca3 808 memset(tmpGpsRxString,'\0',128);
MAA 0:b3313c5ffca3 809
MAA 0:b3313c5ffca3 810 //Validate CRC
MAA 5:11782a2008c2 811 GPS_Data_Valid = gpsNMEA.ValidateData(GPS_String_Buff);
MAA 0:b3313c5ffca3 812
MAA 0:b3313c5ffca3 813 //store valid string, either gga or rmc
MAA 0:b3313c5ffca3 814 if(GPS_Data_Valid){
MAA 2:39c4a85dc2a4 815 gpsNMEA.StoreString(GPS_String_Buff/*, &dbg*/);
MAA 0:b3313c5ffca3 816 }
MAA 0:b3313c5ffca3 817
MAA 5:11782a2008c2 818 //Get gga fix flag
MAA 2:39c4a85dc2a4 819 GGA_Fix_Present = gpsNMEA.GGAFixVerification();
MAA 0:b3313c5ffca3 820
MAA 7:872984a67d5b 821 //Assign value to error flag
MAA 7:872984a67d5b 822 spsGen.setErrStatus(GGA_Fix_Present);
MAA 7:872984a67d5b 823
MAA 0:b3313c5ffca3 824 //Clearing RX buffer.
MAA 0:b3313c5ffca3 825 GPS_String_Buff = "";
MAA 0:b3313c5ffca3 826 GPS_String_Buff.resize(128);
MAA 0:b3313c5ffca3 827
MAA 5:11782a2008c2 828 //parse current date
MAA 5:11782a2008c2 829 gpsNMEA.ParseCurrentDateFromGPRMC();
MAA 2:39c4a85dc2a4 830
MAA 5:11782a2008c2 831 //parse current time
MAA 5:11782a2008c2 832 gpsNMEA.ParseCurrentUTCFromGPRMC();
MAA 3:38eabaa92552 833
MAA 5:11782a2008c2 834 //parse gps coordinates
MAA 5:11782a2008c2 835 gpsNMEA.ParseCurrentLatitudeFromGPRMC();
MAA 5:11782a2008c2 836 gpsNMEA.ParseCurrentLongitudeFromGPRMC();
MAA 24:099df3fa2b13 837
MAA 21:325cb82f1838 838 //clearing flags
MAA 21:325cb82f1838 839 GPS_Data_Valid = false;
MAA 21:325cb82f1838 840 GPS_Data_Rdy = false;
MAA 34:c6c5e7ec9163 841
MAA 38:a1615de4ee64 842 if(GGA_Fix_Present && !RTC_set){
MAA 40:45289e57887d 843 fixPresentCnt += 1;
MAA 40:45289e57887d 844 }
MAA 40:45289e57887d 845
MAA 40:45289e57887d 846 if(GGA_Fix_Present && !RTC_set && (fixPresentCnt > 5)){
MAA 34:c6c5e7ec9163 847 setMbedTime(gpsNMEA.currentDATEFromGPRMC, gpsNMEA.currentUTCFromGPRMC, &dbg);
MAA 38:a1615de4ee64 848
MAA 41:d7d77ddd32c6 849 memset(tmpHour, '\0', 5);
MAA 41:d7d77ddd32c6 850 memset(tmpMinute, '\0', 5);
MAA 41:d7d77ddd32c6 851 memset(tmpSecond, '\0', 5);
MAA 35:ccc79f4147f2 852
MAA 35:ccc79f4147f2 853 snprintf(tmpHour, 5, "%s", gpsNMEA.currentUTCFromGPRMC.substr(0, 2));
MAA 35:ccc79f4147f2 854 snprintf(tmpMinute, 5, "%s", gpsNMEA.currentUTCFromGPRMC.substr(3, 2));
MAA 35:ccc79f4147f2 855 snprintf(tmpSecond, 5, "%s", gpsNMEA.currentUTCFromGPRMC.substr(6, 2));
MAA 35:ccc79f4147f2 856
MAA 35:ccc79f4147f2 857 int hours = atoi(tmpHour);
MAA 35:ccc79f4147f2 858 int minutes = atoi(tmpMinute);
MAA 38:a1615de4ee64 859 int seconds = atoi(tmpSecond);
MAA 39:0aeb019323bf 860 setTime(seconds, minutes, hours);
MAA 35:ccc79f4147f2 861
MAA 38:a1615de4ee64 862 dbg.printf("Clock resync done!\r\n");
MAA 39:0aeb019323bf 863 dbg.printf("Clock set to %s\r\n", getTime());
MAA 38:a1615de4ee64 864
MAA 40:45289e57887d 865 RTC_set = true;
MAA 40:45289e57887d 866 fixPresentCnt = 0;
MAA 34:c6c5e7ec9163 867 }
MAA 7:872984a67d5b 868
MAA 21:325cb82f1838 869 }
MAA 28:ed0d29f63b55 870
MAA 28:ed0d29f63b55 871 //if pth data is due, convert pth values to char arrays
MAA 28:ed0d29f63b55 872 if(PTHValuesReadyFlag){
MAA 28:ed0d29f63b55 873 memset(TemperatureArr,'\0',10);
MAA 28:ed0d29f63b55 874 memset(HumidityArr,'\0',10);
MAA 30:072e918663b8 875
MAA 30:072e918663b8 876 //assign last measured preassure to char array, and ensure correct zero padding
MAA 30:072e918663b8 877 if(PTH_Preassure <= 999){
MAA 30:072e918663b8 878 memset(PreassureArr,'\0',10);
MAA 30:072e918663b8 879 snprintf(PreassureArr, 10, "0%.0f", PTH_Preassure);
MAA 30:072e918663b8 880 }
MAA 30:072e918663b8 881
MAA 30:072e918663b8 882 if(PTH_Preassure >= 1000){
MAA 30:072e918663b8 883 memset(PreassureArr,'\0',10);
MAA 30:072e918663b8 884 snprintf(PreassureArr, 10, "%.0f", PTH_Preassure);
MAA 30:072e918663b8 885 }
MAA 30:072e918663b8 886
MAA 30:072e918663b8 887 //ensure correct temperature operator (+ or -) to show if temperature is positive or negative
MAA 30:072e918663b8 888 if(PTH_Temperature >= 0){
MAA 30:072e918663b8 889 //assign last measured temperature to char array with zero padding if needed
MAA 30:072e918663b8 890
MAA 30:072e918663b8 891 if((PTH_Temperature > -10) && (PTH_Temperature < 10)){
MAA 30:072e918663b8 892
MAA 30:072e918663b8 893 if(PTH_Temperature < 0){
MAA 30:072e918663b8 894 snprintf(TemperatureArr, 10, "-0%.0f", PTH_Temperature);
MAA 30:072e918663b8 895 }
MAA 30:072e918663b8 896
MAA 30:072e918663b8 897 if(PTH_Temperature >= 0){
MAA 30:072e918663b8 898 snprintf(TemperatureArr, 10, "+0%.0f", PTH_Temperature);
MAA 30:072e918663b8 899 }
MAA 30:072e918663b8 900 }
MAA 30:072e918663b8 901
MAA 30:072e918663b8 902 if(PTH_Temperature < -10){
MAA 30:072e918663b8 903 snprintf(TemperatureArr, 10, "-%.0f", PTH_Temperature);
MAA 30:072e918663b8 904 }
MAA 30:072e918663b8 905
MAA 30:072e918663b8 906 if(PTH_Temperature > 9){
MAA 30:072e918663b8 907 snprintf(TemperatureArr, 10, "+%.0f", PTH_Temperature);
MAA 30:072e918663b8 908 }
MAA 30:072e918663b8 909
MAA 30:072e918663b8 910 }
MAA 30:072e918663b8 911
MAA 30:072e918663b8 912 //assign last measured relative humidity to char array
MAA 30:072e918663b8 913 if(PTH_Humidity < 10){
MAA 30:072e918663b8 914 snprintf(HumidityArr, 10, "00%.0f", PTH_Humidity);
MAA 30:072e918663b8 915 }
MAA 30:072e918663b8 916
MAA 30:072e918663b8 917 if((PTH_Humidity < 100) && (PTH_Humidity >= 10)){
MAA 30:072e918663b8 918 snprintf(HumidityArr, 10, "0%.0f", PTH_Humidity);
MAA 30:072e918663b8 919 }
MAA 30:072e918663b8 920
MAA 30:072e918663b8 921 if(PTH_Humidity >= 100){
MAA 30:072e918663b8 922 snprintf(HumidityArr, 10, "%.0f", PTH_Humidity);
MAA 43:358e853ba2c9 923 }
MAA 43:358e853ba2c9 924
MAA 43:358e853ba2c9 925 dbg.printf("P = %s, T = %s, H = %s\r\n",PreassureArr,TemperatureArr, HumidityArr);
MAA 30:072e918663b8 926
MAA 30:072e918663b8 927 PTHValuesReadyFlag = false;
MAA 30:072e918663b8 928
MAA 28:ed0d29f63b55 929 }
MAA 28:ed0d29f63b55 930
MAA 28:ed0d29f63b55 931 //If the pth sensor is inactive write NaN in the data columns normally containing PTH values
MAA 28:ed0d29f63b55 932 if(!PTHSensorActive){
MAA 28:ed0d29f63b55 933 memset(PreassureArr,'\0',10);
MAA 28:ed0d29f63b55 934 memset(TemperatureArr,'\0',10);
MAA 28:ed0d29f63b55 935 memset(HumidityArr,'\0',10);
MAA 30:072e918663b8 936 snprintf(PreassureArr, 10, "%s", "NaN");
MAA 30:072e918663b8 937 snprintf(TemperatureArr, 10, "%s", "NaN");
MAA 30:072e918663b8 938 snprintf(HumidityArr, 10, "%s", "NaN");
MAA 28:ed0d29f63b55 939 }
MAA 5:11782a2008c2 940
MAA 0:b3313c5ffca3 941 //If connection to USB flash disk is lost, reconnect to the flash disk
MAA 0:b3313c5ffca3 942 if(!msd.connected()){
MAA 9:ddc774114729 943
MAA 9:ddc774114729 944 //USB message
MAA 27:efd122db8855 945 clear_display_waiting();
MAA 27:efd122db8855 946 l1 = "USB pen";
MAA 27:efd122db8855 947 l2 = "Missing!";
MAA 27:efd122db8855 948 thr_writelines.start(write_lines);
MAA 9:ddc774114729 949
MAA 0:b3313c5ffca3 950 //reestablish usb connection
MAA 0:b3313c5ffca3 951 while(!msd.connect()){
MAA 0:b3313c5ffca3 952 dbg.printf("Trying to reconnect to usb flash disk\r\n");
MAA 6:6d1683c8b26b 953 wait_ms(200);
MAA 6:6d1683c8b26b 954 msd.connect();
MAA 0:b3313c5ffca3 955 }
MAA 27:efd122db8855 956
MAA 27:efd122db8855 957 thr_writelines.terminate();
MAA 0:b3313c5ffca3 958
MAA 0:b3313c5ffca3 959 //Reopening a file on usb disk
MAA 5:11782a2008c2 960 fp = fopen(currentFilename.c_str(), "a");
MAA 7:872984a67d5b 961
MAA 7:872984a67d5b 962 writeToUsb("\r\n", fp);
MAA 7:872984a67d5b 963 writeToUsb(spsGen.getHeaderString(), fp);
MAA 10:eb026e023a3c 964
MAA 0:b3313c5ffca3 965 }
MAA 0:b3313c5ffca3 966
MAA 39:0aeb019323bf 967 if(flushStrErr){
MAA 39:0aeb019323bf 968 writeToUsb(flushStr, e_fp);
MAA 39:0aeb019323bf 969 writeToUsb("\r\n", e_fp);
MAA 39:0aeb019323bf 970
MAA 41:d7d77ddd32c6 971 memset(flushStr, '\0', 200);
MAA 39:0aeb019323bf 972
MAA 39:0aeb019323bf 973 flushStrErr = false;
MAA 39:0aeb019323bf 974 }
MAA 39:0aeb019323bf 975
MAA 2:39c4a85dc2a4 976 //kick / feed watchdog
MAA 2:39c4a85dc2a4 977 wd.kick();
MAA 28:ed0d29f63b55 978
MAA 40:45289e57887d 979 Thread::yield();
MAA 5:11782a2008c2 980 }
MAA 5:11782a2008c2 981
MAA 0:b3313c5ffca3 982 return 0;
MAA 0:b3313c5ffca3 983 }
MAA 0:b3313c5ffca3 984
MAA 0:b3313c5ffca3 985 //Thanks to MODSERIAL!
MAA 0:b3313c5ffca3 986 // Called everytime a new character goes into
MAA 0:b3313c5ffca3 987 // the RX buffer. Test that character for \n
MAA 0:b3313c5ffca3 988 // Note, rxGetLastChar() gets the last char that
MAA 0:b3313c5ffca3 989 // we received but it does NOT remove it from
MAA 0:b3313c5ffca3 990 // the RX buffer.
MAA 0:b3313c5ffca3 991 void rxCallback(MODSERIAL_IRQ_INFO *q) {
MAA 0:b3313c5ffca3 992 MODSERIAL *serial = q->serial;
MAA 6:6d1683c8b26b 993 if (serial->rxGetLastChar() == '\n') {
MAA 0:b3313c5ffca3 994 GPS_Data_Rdy = true;
MAA 0:b3313c5ffca3 995 }
MAA 5:11782a2008c2 996 }
MAA 5:11782a2008c2 997
MAA 8:d6287c33b54a 998 //Thanks to MODSERIAL!
MAA 8:d6287c33b54a 999 // Called everytime a new character goes into
MAA 8:d6287c33b54a 1000 // the RX buffer. Test that character for \r and buffer char count
MAA 8:d6287c33b54a 1001 // Note, rxGetLastChar() gets the last char that
MAA 8:d6287c33b54a 1002 // we received but it does NOT remove it from
MAA 8:d6287c33b54a 1003 // the RX buffer.
MAA 8:d6287c33b54a 1004 void bmagrxCallback(MODSERIAL_IRQ_INFO *q) {
MAA 8:d6287c33b54a 1005 MODSERIAL *serial = q->serial;
MAA 8:d6287c33b54a 1006 if ((serial->rxBufferGetCount() > 20) && (serial->rxGetLastChar() == '\r')) {
MAA 8:d6287c33b54a 1007 BMAG_Data_Rdy = true;
MAA 8:d6287c33b54a 1008 }
MAA 8:d6287c33b54a 1009 }
MAA 8:d6287c33b54a 1010
MAA 7:872984a67d5b 1011 //Write to file
MAA 6:6d1683c8b26b 1012 bool writeToUsb(string line, FILE * f){
MAA 5:11782a2008c2 1013
MAA 5:11782a2008c2 1014 if (f != NULL) {
MAA 5:11782a2008c2 1015 fprintf(f, "\r\n");
MAA 8:d6287c33b54a 1016 fprintf(f, line.c_str());
MAA 8:d6287c33b54a 1017
MAA 6:6d1683c8b26b 1018 }
MAA 6:6d1683c8b26b 1019
MAA 5:11782a2008c2 1020 if(f == NULL){
MAA 5:11782a2008c2 1021 return false;
MAA 5:11782a2008c2 1022 }
MAA 5:11782a2008c2 1023
MAA 5:11782a2008c2 1024 return true;
MAA 5:11782a2008c2 1025 }
MAA 28:ed0d29f63b55 1026
MAA 28:ed0d29f63b55 1027
MAA 28:ed0d29f63b55 1028 void getPthValues(){
MAA 28:ed0d29f63b55 1029 if(BME.get(PTH_Temperature, PTH_Preassure, PTH_Humidity)){
MAA 28:ed0d29f63b55 1030 PTHValuesReadyFlag = true;
MAA 28:ed0d29f63b55 1031 }
MAA 28:ed0d29f63b55 1032 };
MAA 32:a8d74b3c9d6f 1033
MAA 32:a8d74b3c9d6f 1034
MAA 32:a8d74b3c9d6f 1035 void gpsAvailCheck(void){
MAA 32:a8d74b3c9d6f 1036 gpsCheckedAfter10Sec = true;
MAA 32:a8d74b3c9d6f 1037 };