Bmag incl gps rettelse

Dependencies:   mbed WDT MODSERIAL BME280

Committer:
gert_lauritsen
Date:
Wed Jun 26 08:14:40 2019 +0000
Branch:
MbedBMAGThrRev
Revision:
59:48484125b507
Parent:
58:6545ef27c228
change ID length and altitude in sps

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