Bmag incl gps rettelse
Dependencies: mbed WDT MODSERIAL BME280
main.cpp@27:efd122db8855, 2017-08-23 (annotated)
- Committer:
- MAA
- Date:
- Wed Aug 23 13:22:54 2017 +0000
- Branch:
- MbedBMAGThrRev
- Revision:
- 27:efd122db8855
- Parent:
- 26:68277a308839
- Child:
- 28:ed0d29f63b55
ghi
Who changed what in which revision?
User | Revision | Line number | New 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 | 22:9f5955f051f5 | 13 | char BARCODE[6] = "06655"; |
MAA | 8:d6287c33b54a | 14 | |
MAA | 0:b3313c5ffca3 | 15 | //Global GPS variables |
MAA | 0:b3313c5ffca3 | 16 | bool GPS_Data_Rdy = false; |
MAA | 0:b3313c5ffca3 | 17 | bool GPS_Data_Valid = false; |
MAA | 23:2e914b705b99 | 18 | bool GPS_Override_Active = false; |
MAA | 0:b3313c5ffca3 | 19 | bool GGA_Fix_Present = false; |
MAA | 5:11782a2008c2 | 20 | bool firstLineWritten = false; |
MAA | 6:6d1683c8b26b | 21 | bool fileNameUpdated = false; |
MAA | 7:872984a67d5b | 22 | bool lastErrStatus = true; |
MAA | 7:872984a67d5b | 23 | bool firstErrsWritten = false; |
MAA | 23:2e914b705b99 | 24 | bool gpsStringsReceived = false; |
MAA | 8:d6287c33b54a | 25 | char tmpGpsRxString[128]; |
MAA | 8:d6287c33b54a | 26 | int missingGpsCnt = 0; |
MAA | 8:d6287c33b54a | 27 | int GpsCntWithoutMagData = 0; |
MAA | 10:eb026e023a3c | 28 | int magCntWithoutGpsData = 0; |
MAA | 24:099df3fa2b13 | 29 | char missingGpsConnectionCounter = 0; |
MAA | 23:2e914b705b99 | 30 | char gpsOverridePushButtonCounter = 0; |
MAA | 7:872984a67d5b | 31 | |
MAA | 8:d6287c33b54a | 32 | string INTERPRETERID = ""; |
MAA | 8:d6287c33b54a | 33 | char interpreterTmpID[10]; |
MAA | 8:d6287c33b54a | 34 | |
MAA | 6:6d1683c8b26b | 35 | //global system variables |
MAA | 0:b3313c5ffca3 | 36 | bool run = true; |
MAA | 8:d6287c33b54a | 37 | bool toggler = true; |
MAA | 24:099df3fa2b13 | 38 | bool dispFlag = false; |
MAA | 24:099df3fa2b13 | 39 | bool checkStateFlag = false; |
MAA | 8:d6287c33b54a | 40 | int togglecount = 0; |
MAA | 24:099df3fa2b13 | 41 | ErrorState prevState = NONE; |
MAA | 24:099df3fa2b13 | 42 | ErrorState presentState = NONE; |
MAA | 21:325cb82f1838 | 43 | |
MAA | 0:b3313c5ffca3 | 44 | |
MAA | 23:2e914b705b99 | 45 | |
MAA | 8:d6287c33b54a | 46 | //global BMAG variables |
MAA | 8:d6287c33b54a | 47 | bool BMAG_Data_Rdy = false; |
MAA | 10:eb026e023a3c | 48 | bool magTimeSetManually = false; |
MAA | 23:2e914b705b99 | 49 | bool magStringsReceived = false; |
MAA | 8:d6287c33b54a | 50 | char tmpBMAGRxString[128]; |
MAA | 8:d6287c33b54a | 51 | char magnTarr[15]; |
MAA | 10:eb026e023a3c | 52 | int magTimePromptCount = 0; |
MAA | 10:eb026e023a3c | 53 | int timeSetManuallyCount = 0; |
MAA | 8:d6287c33b54a | 54 | |
MAA | 11:d3d26d0e71ea | 55 | |
MAA | 8:d6287c33b54a | 56 | //batteryvoltage |
MAA | 8:d6287c33b54a | 57 | char batteryvoltagearr[5]; |
MAA | 8:d6287c33b54a | 58 | string batteryvoltage; |
MAA | 0:b3313c5ffca3 | 59 | |
MAA | 5:11782a2008c2 | 60 | //Write to file prototype |
MAA | 6:6d1683c8b26b | 61 | bool writeToUsb(string line, FILE * f); |
MAA | 5:11782a2008c2 | 62 | |
MAA | 24:099df3fa2b13 | 63 | //dispflag func |
MAA | 24:099df3fa2b13 | 64 | void setDispFlag(void){ |
MAA | 24:099df3fa2b13 | 65 | dispFlag = true; |
MAA | 24:099df3fa2b13 | 66 | } |
MAA | 23:2e914b705b99 | 67 | |
MAA | 24:099df3fa2b13 | 68 | //set check state flag func |
MAA | 24:099df3fa2b13 | 69 | void setCheckStateFlag(void){ |
MAA | 24:099df3fa2b13 | 70 | checkStateFlag = true; |
MAA | 24:099df3fa2b13 | 71 | } |
MAA | 23:2e914b705b99 | 72 | |
MAA | 0:b3313c5ffca3 | 73 | int main(void){ |
MAA | 7:872984a67d5b | 74 | |
MAA | 27:efd122db8855 | 75 | EA_OLED(); |
MAA | 27:efd122db8855 | 76 | |
MAA | 7:872984a67d5b | 77 | //initializing watchdog, timeout 10 seconds |
MAA | 6:6d1683c8b26b | 78 | Watchdog wd; |
MAA | 8:d6287c33b54a | 79 | wd.init(10.0); |
MAA | 23:2e914b705b99 | 80 | |
MAA | 8:d6287c33b54a | 81 | //Led outputs |
MAA | 8:d6287c33b54a | 82 | DigitalOut redLed(p24); |
MAA | 8:d6287c33b54a | 83 | DigitalOut greenLed(p23); |
MAA | 8:d6287c33b54a | 84 | |
MAA | 10:eb026e023a3c | 85 | //MagTime manually set by user input |
MAA | 10:eb026e023a3c | 86 | DigitalIn timeSetManuallyButton(p30); |
MAA | 10:eb026e023a3c | 87 | timeSetManuallyButton.mode(PullUp); |
MAA | 10:eb026e023a3c | 88 | |
MAA | 8:d6287c33b54a | 89 | redLed = 0; |
MAA | 11:d3d26d0e71ea | 90 | greenLed = 0; |
MAA | 8:d6287c33b54a | 91 | |
MAA | 8:d6287c33b54a | 92 | //init of battery strings |
MAA | 8:d6287c33b54a | 93 | memset(batteryvoltagearr,'\0',5); |
MAA | 8:d6287c33b54a | 94 | batteryvoltage = ""; |
MAA | 8:d6287c33b54a | 95 | |
MAA | 8:d6287c33b54a | 96 | //Analog battery reading |
MAA | 8:d6287c33b54a | 97 | AnalogIn battery(A5); |
MAA | 8:d6287c33b54a | 98 | |
MAA | 4:c70ef089a3fd | 99 | string currentFilename, nextFilename; |
MAA | 4:c70ef089a3fd | 100 | |
MAA | 5:11782a2008c2 | 101 | currentFilename = "/usb/tempFile.sps"; |
MAA | 5:11782a2008c2 | 102 | |
MAA | 0:b3313c5ffca3 | 103 | //Initializing string buffer for GPS data |
MAA | 0:b3313c5ffca3 | 104 | string GPS_String_Buff; |
MAA | 0:b3313c5ffca3 | 105 | GPS_String_Buff.resize(128); |
MAA | 0:b3313c5ffca3 | 106 | memset(tmpGpsRxString,'\0',128); |
MAA | 0:b3313c5ffca3 | 107 | |
MAA | 8:d6287c33b54a | 108 | //Initializing string buffer for BMAG data |
MAA | 8:d6287c33b54a | 109 | string BMAG_String_Buff; |
MAA | 8:d6287c33b54a | 110 | BMAG_String_Buff.resize(128); |
MAA | 8:d6287c33b54a | 111 | memset(tmpBMAGRxString,'\0',128); |
MAA | 8:d6287c33b54a | 112 | |
MAA | 2:39c4a85dc2a4 | 113 | //debug comm setup |
MAA | 0:b3313c5ffca3 | 114 | dbg.baud(115200); |
MAA | 6:6d1683c8b26b | 115 | dbg.printf("Init...\r\n"); |
MAA | 0:b3313c5ffca3 | 116 | |
MAA | 0:b3313c5ffca3 | 117 | //setting up USB device |
MAA | 0:b3313c5ffca3 | 118 | USBHostMSD msd("usb"); |
MAA | 0:b3313c5ffca3 | 119 | |
MAA | 9:ddc774114729 | 120 | //USB message |
MAA | 27:efd122db8855 | 121 | l1 = "Mounting"; |
MAA | 27:efd122db8855 | 122 | l2 = "USB pen"; |
MAA | 27:efd122db8855 | 123 | thr_writelines.start(write_lines); |
MAA | 10:eb026e023a3c | 124 | wait_ms(1000); |
MAA | 27:efd122db8855 | 125 | thr_writelines.terminate(); |
MAA | 27:efd122db8855 | 126 | |
MAA | 10:eb026e023a3c | 127 | |
MAA | 0:b3313c5ffca3 | 128 | while(!msd.connect()){ |
MAA | 0:b3313c5ffca3 | 129 | dbg.printf("Trying to connect to usb flash disk\r\n"); |
MAA | 6:6d1683c8b26b | 130 | wait_ms(500); |
MAA | 0:b3313c5ffca3 | 131 | } |
MAA | 0:b3313c5ffca3 | 132 | |
MAA | 0:b3313c5ffca3 | 133 | //Opening a file on usb disk |
MAA | 5:11782a2008c2 | 134 | FILE * fp = fopen(currentFilename.c_str(), "a"); |
MAA | 4:c70ef089a3fd | 135 | wait_ms(100); |
MAA | 0:b3313c5ffca3 | 136 | |
MAA | 2:39c4a85dc2a4 | 137 | //initializing SPS generation |
MAA | 2:39c4a85dc2a4 | 138 | SPS spsGen; |
MAA | 6:6d1683c8b26b | 139 | |
MAA | 6:6d1683c8b26b | 140 | //GPS communication init |
MAA | 6:6d1683c8b26b | 141 | gps.baud(9600); |
MAA | 6:6d1683c8b26b | 142 | gps.attach(&rxCallback, MODSERIAL::RxIrq); |
MAA | 6:6d1683c8b26b | 143 | |
MAA | 27:efd122db8855 | 144 | //GPS message |
MAA | 27:efd122db8855 | 145 | l1 = "GPS"; |
MAA | 27:efd122db8855 | 146 | l2 = "Startup"; |
MAA | 27:efd122db8855 | 147 | thr_writelines.start(write_lines); |
MAA | 27:efd122db8855 | 148 | wait_ms(1000); |
MAA | 10:eb026e023a3c | 149 | |
MAA | 8:d6287c33b54a | 150 | //BMAG communication init |
MAA | 8:d6287c33b54a | 151 | bmag.baud(115200); |
MAA | 8:d6287c33b54a | 152 | bmag.attach(&bmagrxCallback, MODSERIAL::RxIrq); |
MAA | 8:d6287c33b54a | 153 | |
MAA | 6:6d1683c8b26b | 154 | //Start comms with the GPS, Enabling GPRMC and GPGGA |
MAA | 6:6d1683c8b26b | 155 | gps.printf("$PMTK314,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0*28\r\n"); |
MAA | 6:6d1683c8b26b | 156 | |
MAA | 7:872984a67d5b | 157 | dbg.printf("Init.... Done!\r\n"); |
MAA | 8:d6287c33b54a | 158 | |
MAA | 8:d6287c33b54a | 159 | //init interpreterid |
MAA | 8:d6287c33b54a | 160 | int barcodeint = atoi(BARCODE); |
MAA | 8:d6287c33b54a | 161 | memset(interpreterTmpID,'\0',10); |
MAA | 8:d6287c33b54a | 162 | sprintf(interpreterTmpID,"%4x", barcodeint); |
MAA | 23:2e914b705b99 | 163 | INTERPRETERID.assign(interpreterTmpID); |
MAA | 11:d3d26d0e71ea | 164 | |
MAA | 11:d3d26d0e71ea | 165 | //Init Done! |
MAA | 27:efd122db8855 | 166 | clear_display_waiting(); |
MAA | 27:efd122db8855 | 167 | l1 = "Init"; |
MAA | 27:efd122db8855 | 168 | l2 = "Done"; |
MAA | 27:efd122db8855 | 169 | thr_writelines.start(write_lines); |
MAA | 27:efd122db8855 | 170 | wait_ms(1000); |
MAA | 11:d3d26d0e71ea | 171 | |
MAA | 11:d3d26d0e71ea | 172 | //Init errorhandler |
MAA | 21:325cb82f1838 | 173 | ErrorHandler dispTxtHandler(&batteryvoltage, &GGA_Fix_Present, &magParser, &gpsNMEA); |
MAA | 24:099df3fa2b13 | 174 | dispTxtHandler.setErrorState(NONE); |
MAA | 23:2e914b705b99 | 175 | |
MAA | 24:099df3fa2b13 | 176 | //init of display timer |
MAA | 24:099df3fa2b13 | 177 | Ticker dispTicker; |
MAA | 27:efd122db8855 | 178 | dispTicker.attach(&setDispFlag, 1.0); |
MAA | 23:2e914b705b99 | 179 | |
MAA | 24:099df3fa2b13 | 180 | //init of state ticker |
MAA | 24:099df3fa2b13 | 181 | Ticker stateTicker; |
MAA | 24:099df3fa2b13 | 182 | stateTicker.attach(&setCheckStateFlag, 1.0); |
MAA | 23:2e914b705b99 | 183 | |
MAA | 24:099df3fa2b13 | 184 | |
MAA | 5:11782a2008c2 | 185 | //infinite loop running after initialization |
MAA | 0:b3313c5ffca3 | 186 | while(run) { |
MAA | 0:b3313c5ffca3 | 187 | |
MAA | 24:099df3fa2b13 | 188 | //display txt on disp |
MAA | 24:099df3fa2b13 | 189 | if(dispFlag){ |
MAA | 27:efd122db8855 | 190 | //terminate last disp writing thread |
MAA | 27:efd122db8855 | 191 | thr_writelines.terminate(); |
MAA | 27:efd122db8855 | 192 | |
MAA | 24:099df3fa2b13 | 193 | //get state to be displayed |
MAA | 24:099df3fa2b13 | 194 | presentState = dispTxtHandler.getErrorState(); |
MAA | 24:099df3fa2b13 | 195 | //ensure that display is only cleared if the state to be displayed has changed. |
MAA | 24:099df3fa2b13 | 196 | //this ensures that a minimum time duration is used to clear the display. |
MAA | 24:099df3fa2b13 | 197 | if(presentState != prevState){ |
MAA | 27:efd122db8855 | 198 | thr_writelines.start(write_lines); |
MAA | 27:efd122db8855 | 199 | thr_writelines.set_priority(osPriorityLow); |
MAA | 24:099df3fa2b13 | 200 | } |
MAA | 27:efd122db8855 | 201 | |
MAA | 27:efd122db8855 | 202 | //update display text |
MAA | 27:efd122db8855 | 203 | l1 = dispTxtHandler.getLine1(); |
MAA | 27:efd122db8855 | 204 | l2 = dispTxtHandler.getLine2(); |
MAA | 27:efd122db8855 | 205 | |
MAA | 27:efd122db8855 | 206 | if(prevState == presentState){ |
MAA | 27:efd122db8855 | 207 | thr_writelines.start(write_lines); |
MAA | 27:efd122db8855 | 208 | thr_writelines.set_priority(osPriorityLow); |
MAA | 27:efd122db8855 | 209 | } |
MAA | 27:efd122db8855 | 210 | |
MAA | 24:099df3fa2b13 | 211 | //Ensure that next check will have the current state as previous state, as expected. |
MAA | 24:099df3fa2b13 | 212 | prevState = presentState; |
MAA | 24:099df3fa2b13 | 213 | |
MAA | 24:099df3fa2b13 | 214 | //clear display flag |
MAA | 24:099df3fa2b13 | 215 | dispFlag = false; |
MAA | 24:099df3fa2b13 | 216 | } |
MAA | 24:099df3fa2b13 | 217 | |
MAA | 24:099df3fa2b13 | 218 | //check state / set state |
MAA | 24:099df3fa2b13 | 219 | if(checkStateFlag){ |
MAA | 24:099df3fa2b13 | 220 | |
MAA | 24:099df3fa2b13 | 221 | //missingGpsConnectionCounter gets cleared at every received gps string |
MAA | 26:68277a308839 | 222 | if(!GPS_Override_Active && missingGpsConnectionCounter < 10){ |
MAA | 24:099df3fa2b13 | 223 | |
MAA | 24:099df3fa2b13 | 224 | missingGpsConnectionCounter += 1; |
MAA | 24:099df3fa2b13 | 225 | } |
MAA | 24:099df3fa2b13 | 226 | |
MAA | 24:099df3fa2b13 | 227 | if(gpsOverridePushButtonCounter > 3){ |
MAA | 24:099df3fa2b13 | 228 | GPS_Override_Active = true; |
MAA | 24:099df3fa2b13 | 229 | } |
MAA | 24:099df3fa2b13 | 230 | |
MAA | 26:68277a308839 | 231 | |
MAA | 26:68277a308839 | 232 | //pushbutton check gpsOverridePushButtonCounter |
MAA | 26:68277a308839 | 233 | if(!timeSetManuallyButton){ |
MAA | 26:68277a308839 | 234 | gpsOverridePushButtonCounter += 1; |
MAA | 26:68277a308839 | 235 | } |
MAA | 26:68277a308839 | 236 | |
MAA | 24:099df3fa2b13 | 237 | if(missingGpsConnectionCounter > 30 && !GPS_Override_Active){ |
MAA | 24:099df3fa2b13 | 238 | dispTxtHandler.setErrorState(GPS_OVERRIDE_NEEDED); |
MAA | 24:099df3fa2b13 | 239 | |
MAA | 24:099df3fa2b13 | 240 | redLed = 1; |
MAA | 24:099df3fa2b13 | 241 | greenLed = 0; |
MAA | 24:099df3fa2b13 | 242 | |
MAA | 24:099df3fa2b13 | 243 | } |
MAA | 24:099df3fa2b13 | 244 | |
MAA | 24:099df3fa2b13 | 245 | if((toggler && magStringsReceived &&(missingGpsCnt < GPSACQTIMELIMITINSECONDS)) || (toggler && dispTxtHandler.getMagTimePromtStatus()) && magStringsReceived) { |
MAA | 24:099df3fa2b13 | 246 | //show battery voltage and gps fix status for 10 seconds |
MAA | 24:099df3fa2b13 | 247 | dispTxtHandler.setErrorState(DISPLAY_VBAT_FIX); |
MAA | 24:099df3fa2b13 | 248 | |
MAA | 24:099df3fa2b13 | 249 | togglecount += 1; |
MAA | 24:099df3fa2b13 | 250 | if(togglecount >= 10) { |
MAA | 24:099df3fa2b13 | 251 | toggler = false; |
MAA | 24:099df3fa2b13 | 252 | togglecount = 0; |
MAA | 24:099df3fa2b13 | 253 | } |
MAA | 24:099df3fa2b13 | 254 | |
MAA | 24:099df3fa2b13 | 255 | } |
MAA | 24:099df3fa2b13 | 256 | |
MAA | 24:099df3fa2b13 | 257 | if((!toggler && (missingGpsCnt < GPSACQTIMELIMITINSECONDS) && magStringsReceived) || (!toggler && dispTxtHandler.getMagTimePromtStatus()) && magStringsReceived) { |
MAA | 24:099df3fa2b13 | 258 | //show magnT reading for 10 seconds |
MAA | 24:099df3fa2b13 | 259 | dispTxtHandler.setErrorState(DISPLAY_MAG_MEASUREMENT); |
MAA | 24:099df3fa2b13 | 260 | |
MAA | 24:099df3fa2b13 | 261 | togglecount += 1; |
MAA | 24:099df3fa2b13 | 262 | if(togglecount >= 10) { |
MAA | 24:099df3fa2b13 | 263 | toggler = true; |
MAA | 24:099df3fa2b13 | 264 | togglecount = 0; |
MAA | 24:099df3fa2b13 | 265 | } |
MAA | 24:099df3fa2b13 | 266 | } |
MAA | 24:099df3fa2b13 | 267 | |
MAA | 24:099df3fa2b13 | 268 | |
MAA | 24:099df3fa2b13 | 269 | //if battery voltage is below BATTERYLOW limit, initiate battery low error state |
MAA | 24:099df3fa2b13 | 270 | if((0.00036621652)*battery.read_u16() < BATTERYLOWLIMIT){ |
MAA | 24:099df3fa2b13 | 271 | dispTxtHandler.setErrorState(BATTERY_LOW); |
MAA | 24:099df3fa2b13 | 272 | redLed = 1; |
MAA | 24:099df3fa2b13 | 273 | greenLed = 0; |
MAA | 24:099df3fa2b13 | 274 | } |
MAA | 24:099df3fa2b13 | 275 | |
MAA | 24:099df3fa2b13 | 276 | //if gga fix is not present for a prolonged period of time, prompt user |
MAA | 24:099df3fa2b13 | 277 | if((missingGpsCnt > GPSACQTIMELIMITINSECONDS) && !dispTxtHandler.getMagTimePromtStatus()) { |
MAA | 24:099df3fa2b13 | 278 | |
MAA | 24:099df3fa2b13 | 279 | //Prompt user to set mag time manually |
MAA | 24:099df3fa2b13 | 280 | dispTxtHandler.setErrorState(NO_FIX); |
MAA | 24:099df3fa2b13 | 281 | } |
MAA | 24:099df3fa2b13 | 282 | |
MAA | 24:099df3fa2b13 | 283 | //if gps data is missing for more than 10 mag reading cycles |
MAA | 24:099df3fa2b13 | 284 | if((magCntWithoutGpsData > 10) && !magTimeSetManually) { |
MAA | 24:099df3fa2b13 | 285 | //show error indication of gps data missing |
MAA | 24:099df3fa2b13 | 286 | dispTxtHandler.setErrorState(NO_GPS); |
MAA | 24:099df3fa2b13 | 287 | |
MAA | 24:099df3fa2b13 | 288 | //set led error status |
MAA | 24:099df3fa2b13 | 289 | redLed = 1; |
MAA | 24:099df3fa2b13 | 290 | greenLed = 0; |
MAA | 24:099df3fa2b13 | 291 | |
MAA | 24:099df3fa2b13 | 292 | GGA_Fix_Present = false; |
MAA | 24:099df3fa2b13 | 293 | |
MAA | 24:099df3fa2b13 | 294 | //knaptryk check |
MAA | 24:099df3fa2b13 | 295 | if(!timeSetManuallyButton){ |
MAA | 24:099df3fa2b13 | 296 | timeSetManuallyCount += 1; |
MAA | 24:099df3fa2b13 | 297 | } |
MAA | 24:099df3fa2b13 | 298 | |
MAA | 24:099df3fa2b13 | 299 | if(timeSetManuallyCount > 3){ |
MAA | 24:099df3fa2b13 | 300 | magTimeSetManually = true; |
MAA | 24:099df3fa2b13 | 301 | } |
MAA | 24:099df3fa2b13 | 302 | |
MAA | 24:099df3fa2b13 | 303 | } |
MAA | 24:099df3fa2b13 | 304 | |
MAA | 24:099df3fa2b13 | 305 | |
MAA | 24:099df3fa2b13 | 306 | if(!GGA_Fix_Present && GpsCntWithoutMagData < 20){ |
MAA | 24:099df3fa2b13 | 307 | //Missing GGA fix LED indicator |
MAA | 24:099df3fa2b13 | 308 | greenLed = 0; |
MAA | 24:099df3fa2b13 | 309 | redLed = 1; |
MAA | 24:099df3fa2b13 | 310 | } |
MAA | 24:099df3fa2b13 | 311 | |
MAA | 24:099df3fa2b13 | 312 | if(GpsCntWithoutMagData > 20){ |
MAA | 24:099df3fa2b13 | 313 | //Missing MAG data prompt |
MAA | 24:099df3fa2b13 | 314 | dispTxtHandler.setErrorState(NO_MAG_DATA); |
MAA | 24:099df3fa2b13 | 315 | greenLed = 0; |
MAA | 24:099df3fa2b13 | 316 | redLed = 1; |
MAA | 24:099df3fa2b13 | 317 | } |
MAA | 24:099df3fa2b13 | 318 | |
MAA | 24:099df3fa2b13 | 319 | if((GGA_Fix_Present && GpsCntWithoutMagData < 20) || (magTimeSetManually && GpsCntWithoutMagData < 20)){ |
MAA | 24:099df3fa2b13 | 320 | //GGA fix LED indicator / time set manually unless battery is low |
MAA | 24:099df3fa2b13 | 321 | if(dispTxtHandler.getErrorState() != BATTERY_LOW){ |
MAA | 24:099df3fa2b13 | 322 | greenLed = 1; |
MAA | 24:099df3fa2b13 | 323 | redLed = 0; |
MAA | 24:099df3fa2b13 | 324 | } |
MAA | 24:099df3fa2b13 | 325 | } |
MAA | 24:099df3fa2b13 | 326 | |
MAA | 24:099df3fa2b13 | 327 | checkStateFlag = false; |
MAA | 24:099df3fa2b13 | 328 | } |
MAA | 24:099df3fa2b13 | 329 | |
MAA | 24:099df3fa2b13 | 330 | //if the gps rx buffer is full, flush the buffer. |
MAA | 6:6d1683c8b26b | 331 | if(gps.rxBufferFull()){ |
MAA | 6:6d1683c8b26b | 332 | gps.rxBufferFlush(); |
MAA | 6:6d1683c8b26b | 333 | } |
MAA | 6:6d1683c8b26b | 334 | |
MAA | 24:099df3fa2b13 | 335 | //if the bmag rx buffer is full, flush the buffer. |
MAA | 8:d6287c33b54a | 336 | if(bmag.rxBufferFull()){ |
MAA | 8:d6287c33b54a | 337 | bmag.rxBufferFlush(); |
MAA | 8:d6287c33b54a | 338 | } |
MAA | 8:d6287c33b54a | 339 | |
MAA | 13:45b333983206 | 340 | |
MAA | 21:325cb82f1838 | 341 | //if bmag data string is available |
MAA | 21:325cb82f1838 | 342 | if(BMAG_Data_Rdy) { |
MAA | 22:9f5955f051f5 | 343 | |
MAA | 24:099df3fa2b13 | 344 | //change magStringsReceived flag to true when mag data is available |
MAA | 23:2e914b705b99 | 345 | if(magStringsReceived == false){ |
MAA | 23:2e914b705b99 | 346 | magStringsReceived = true; |
MAA | 23:2e914b705b99 | 347 | } |
MAA | 23:2e914b705b99 | 348 | |
MAA | 23:2e914b705b99 | 349 | //if gps override is active reset magCntWithoutGpsData |
MAA | 23:2e914b705b99 | 350 | if(GPS_Override_Active){ |
MAA | 23:2e914b705b99 | 351 | magCntWithoutGpsData = 0; |
MAA | 23:2e914b705b99 | 352 | } |
MAA | 23:2e914b705b99 | 353 | |
MAA | 23:2e914b705b99 | 354 | //if mag data is present but gps data is not and gps override is not active |
MAA | 23:2e914b705b99 | 355 | if(magCntWithoutGpsData < 100 && !GPS_Override_Active) { |
MAA | 10:eb026e023a3c | 356 | magCntWithoutGpsData += 1; |
MAA | 10:eb026e023a3c | 357 | } |
MAA | 23:2e914b705b99 | 358 | |
MAA | 24:099df3fa2b13 | 359 | //move bmag data from rxbuffer to temporary array |
MAA | 21:325cb82f1838 | 360 | bmag.move(tmpBMAGRxString, bmag.rxBufferGetCount()); |
MAA | 21:325cb82f1838 | 361 | |
MAA | 8:d6287c33b54a | 362 | //copy c_string to string |
MAA | 21:325cb82f1838 | 363 | BMAG_String_Buff.assign(tmpBMAGRxString); |
MAA | 21:325cb82f1838 | 364 | |
MAA | 8:d6287c33b54a | 365 | //clear tmpRxBuffer |
MAA | 21:325cb82f1838 | 366 | memset(tmpBMAGRxString,'\0',128); |
MAA | 21:325cb82f1838 | 367 | |
MAA | 21:325cb82f1838 | 368 | //parse bmag string |
MAA | 21:325cb82f1838 | 369 | magParser.parseBMAGString(BMAG_String_Buff); |
MAA | 21:325cb82f1838 | 370 | |
MAA | 21:325cb82f1838 | 371 | //reset counter containing gps string count without mag data |
MAA | 8:d6287c33b54a | 372 | GpsCntWithoutMagData = 0; |
MAA | 21:325cb82f1838 | 373 | |
MAA | 10:eb026e023a3c | 374 | //update filename when date is available with gga fix |
MAA | 21:325cb82f1838 | 375 | if(!fileNameUpdated && GGA_Fix_Present) { |
MAA | 6:6d1683c8b26b | 376 | spsGen.generateSpsFilename(gpsNMEA.currentDATEFromGPRMC); |
MAA | 6:6d1683c8b26b | 377 | nextFilename.assign(spsGen.getSpsFileName()); |
MAA | 6:6d1683c8b26b | 378 | fclose(fp); |
MAA | 6:6d1683c8b26b | 379 | currentFilename.assign(nextFilename); |
MAA | 6:6d1683c8b26b | 380 | nextFilename = ""; |
MAA | 21:325cb82f1838 | 381 | |
MAA | 6:6d1683c8b26b | 382 | fopen(currentFilename.c_str(), "a"); |
MAA | 21:325cb82f1838 | 383 | |
MAA | 7:872984a67d5b | 384 | fileNameUpdated = true; |
MAA | 24:099df3fa2b13 | 385 | |
MAA | 24:099df3fa2b13 | 386 | spsGen.UpdateHeaderString(BARCODE, IDENTIFIERID, GROUP, TIMEZONE, ENCODING,SOURCEIDENTIFICATION, INTERPRETERID, DATALINEVERSION, FWSRCVERSION, FWIVERSION); |
MAA | 21:325cb82f1838 | 387 | //add header to top of file |
MAA | 21:325cb82f1838 | 388 | writeToUsb(spsGen.getHeaderString(), fp); |
MAA | 21:325cb82f1838 | 389 | |
MAA | 21:325cb82f1838 | 390 | } |
MAA | 21:325cb82f1838 | 391 | |
MAA | 7:872984a67d5b | 392 | //if date has changed, ensure new file creation. |
MAA | 7:872984a67d5b | 393 | spsGen.generateSpsFilename(gpsNMEA.currentDATEFromGPRMC); |
MAA | 21:325cb82f1838 | 394 | if(currentFilename != spsGen.getSpsFileName()) { |
MAA | 21:325cb82f1838 | 395 | fileNameUpdated = false; |
MAA | 21:325cb82f1838 | 396 | } |
MAA | 21:325cb82f1838 | 397 | |
MAA | 8:d6287c33b54a | 398 | //read battery voltage |
MAA | 8:d6287c33b54a | 399 | sprintf(batteryvoltagearr, "%0.1f",(0.00036621652)*battery.read_u16()); |
MAA | 8:d6287c33b54a | 400 | batteryvoltage.assign(batteryvoltagearr); |
MAA | 21:325cb82f1838 | 401 | |
MAA | 8:d6287c33b54a | 402 | //generate default sps string |
MAA | 8:d6287c33b54a | 403 | spsGen.UpdateCurrentString(TAG, IDENTIFIERID, GROUP, gpsNMEA.currentDATEFromGPRMC, gpsNMEA.currentUTCFromGPRMC, TIMEZONE, ENCODING, SOURCEIDENTIFICATION, INTERPRETERID, DATALINEVERSION, FWSRCVERSION, FWIVERSION, BARCODE,gpsNMEA.currentLatitude, gpsNMEA.currentLongitude, GGA_Fix_Present, batteryvoltage, magParser.getMagTimeStr(), magParser.getMagNTStr(), magParser.getMagSq(), &dbg); |
MAA | 21:325cb82f1838 | 404 | |
MAA | 8:d6287c33b54a | 405 | //write data strings to sps file |
MAA | 21:325cb82f1838 | 406 | if(GGA_Fix_Present) { |
MAA | 21:325cb82f1838 | 407 | |
MAA | 8:d6287c33b54a | 408 | missingGpsCnt = 0; |
MAA | 21:325cb82f1838 | 409 | |
MAA | 21:325cb82f1838 | 410 | if(!firstLineWritten) { |
MAA | 24:099df3fa2b13 | 411 | spsGen.UpdateHeaderString(BARCODE, IDENTIFIERID, GROUP, TIMEZONE, ENCODING,SOURCEIDENTIFICATION, INTERPRETERID, DATALINEVERSION, FWSRCVERSION, FWIVERSION); |
MAA | 8:d6287c33b54a | 412 | writeToUsb(spsGen.getHeaderString(), fp); |
MAA | 21:325cb82f1838 | 413 | firstLineWritten = true; |
MAA | 21:325cb82f1838 | 414 | } |
MAA | 21:325cb82f1838 | 415 | |
MAA | 8:d6287c33b54a | 416 | writeToUsb(spsGen.getCurrentString(), fp); |
MAA | 21:325cb82f1838 | 417 | |
MAA | 21:325cb82f1838 | 418 | if(!lastErrStatus && firstErrsWritten) { |
MAA | 21:325cb82f1838 | 419 | 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 | 420 | writeToUsb(spsGen.getCurrentErrString(), fp); |
MAA | 8:d6287c33b54a | 421 | lastErrStatus = true; |
MAA | 8:d6287c33b54a | 422 | firstErrsWritten = false; |
MAA | 21:325cb82f1838 | 423 | firstLineWritten = false; |
MAA | 8:d6287c33b54a | 424 | } |
MAA | 8:d6287c33b54a | 425 | } |
MAA | 21:325cb82f1838 | 426 | |
MAA | 21:325cb82f1838 | 427 | //write data strings to sps file, with error messages as defined in *.sps definition |
MAA | 21:325cb82f1838 | 428 | if(!GGA_Fix_Present) { |
MAA | 21:325cb82f1838 | 429 | |
MAA | 21:325cb82f1838 | 430 | if(missingGpsCnt <= GPSACQTIMELIMITINSECONDS) { |
MAA | 8:d6287c33b54a | 431 | missingGpsCnt += 1; |
MAA | 21:325cb82f1838 | 432 | } |
MAA | 21:325cb82f1838 | 433 | |
MAA | 21:325cb82f1838 | 434 | if(!firstLineWritten) { |
MAA | 24:099df3fa2b13 | 435 | spsGen.UpdateHeaderString(BARCODE, IDENTIFIERID, GROUP, TIMEZONE, ENCODING,SOURCEIDENTIFICATION, INTERPRETERID, DATALINEVERSION, FWSRCVERSION, FWIVERSION); |
MAA | 8:d6287c33b54a | 436 | writeToUsb(spsGen.getHeaderString(), fp); |
MAA | 21:325cb82f1838 | 437 | firstLineWritten = true; |
MAA | 11:d3d26d0e71ea | 438 | } |
MAA | 21:325cb82f1838 | 439 | |
MAA | 25:57f9e3273979 | 440 | if(firstErrsWritten){ |
MAA | 25:57f9e3273979 | 441 | writeToUsb(spsGen.getCurrentString(), fp); |
MAA | 25:57f9e3273979 | 442 | } |
MAA | 21:325cb82f1838 | 443 | |
MAA | 21:325cb82f1838 | 444 | if(lastErrStatus && !firstErrsWritten) { |
MAA | 21:325cb82f1838 | 445 | 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 | 446 | writeToUsb(spsGen.getCurrentErrString(), fp); |
MAA | 8:d6287c33b54a | 447 | lastErrStatus = false; |
MAA | 21:325cb82f1838 | 448 | firstErrsWritten = true; |
MAA | 21:325cb82f1838 | 449 | } |
MAA | 21:325cb82f1838 | 450 | |
MAA | 10:eb026e023a3c | 451 | } |
MAA | 21:325cb82f1838 | 452 | |
MAA | 12:2b46960a5d41 | 453 | //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 | 454 | if(!timeSetManuallyButton && dispTxtHandler.getMagTimePromtStatus()) { |
MAA | 10:eb026e023a3c | 455 | timeSetManuallyCount += 1; |
MAA | 21:325cb82f1838 | 456 | |
MAA | 21:325cb82f1838 | 457 | if(timeSetManuallyCount > 3) { |
MAA | 21:325cb82f1838 | 458 | magTimeSetManually = true; |
MAA | 21:325cb82f1838 | 459 | } |
MAA | 21:325cb82f1838 | 460 | } |
MAA | 11:d3d26d0e71ea | 461 | |
MAA | 21:325cb82f1838 | 462 | |
MAA | 21:325cb82f1838 | 463 | BMAG_Data_Rdy = false; |
MAA | 8:d6287c33b54a | 464 | } |
MAA | 21:325cb82f1838 | 465 | |
MAA | 10:eb026e023a3c | 466 | |
MAA | 8:d6287c33b54a | 467 | if(GPS_Data_Rdy){ |
MAA | 8:d6287c33b54a | 468 | |
MAA | 24:099df3fa2b13 | 469 | missingGpsConnectionCounter = 0; |
MAA | 24:099df3fa2b13 | 470 | |
MAA | 23:2e914b705b99 | 471 | if(gpsStringsReceived == false){ |
MAA | 23:2e914b705b99 | 472 | gpsStringsReceived = true; |
MAA | 23:2e914b705b99 | 473 | } |
MAA | 23:2e914b705b99 | 474 | |
MAA | 10:eb026e023a3c | 475 | //clear mag data string counter, counting mag data received since last gps string received |
MAA | 10:eb026e023a3c | 476 | magCntWithoutGpsData = 0; |
MAA | 10:eb026e023a3c | 477 | |
MAA | 10:eb026e023a3c | 478 | //if gps data has been received without mag data since last gps string, increment counter. |
MAA | 8:d6287c33b54a | 479 | if(GpsCntWithoutMagData < 200){ |
MAA | 8:d6287c33b54a | 480 | |
MAA | 8:d6287c33b54a | 481 | GpsCntWithoutMagData += 1; |
MAA | 8:d6287c33b54a | 482 | |
MAA | 8:d6287c33b54a | 483 | } |
MAA | 24:099df3fa2b13 | 484 | |
MAA | 0:b3313c5ffca3 | 485 | gps.scanf("%s", &tmpGpsRxString); |
MAA | 0:b3313c5ffca3 | 486 | |
MAA | 0:b3313c5ffca3 | 487 | //copy c_string to string |
MAA | 0:b3313c5ffca3 | 488 | GPS_String_Buff.assign(tmpGpsRxString); |
MAA | 0:b3313c5ffca3 | 489 | |
MAA | 0:b3313c5ffca3 | 490 | //clear tmpRxBuffer |
MAA | 0:b3313c5ffca3 | 491 | memset(tmpGpsRxString,'\0',128); |
MAA | 0:b3313c5ffca3 | 492 | |
MAA | 0:b3313c5ffca3 | 493 | //Validate CRC |
MAA | 5:11782a2008c2 | 494 | GPS_Data_Valid = gpsNMEA.ValidateData(GPS_String_Buff); |
MAA | 0:b3313c5ffca3 | 495 | |
MAA | 0:b3313c5ffca3 | 496 | //store valid string, either gga or rmc |
MAA | 0:b3313c5ffca3 | 497 | if(GPS_Data_Valid){ |
MAA | 2:39c4a85dc2a4 | 498 | gpsNMEA.StoreString(GPS_String_Buff/*, &dbg*/); |
MAA | 0:b3313c5ffca3 | 499 | } |
MAA | 0:b3313c5ffca3 | 500 | |
MAA | 5:11782a2008c2 | 501 | //Get gga fix flag |
MAA | 2:39c4a85dc2a4 | 502 | GGA_Fix_Present = gpsNMEA.GGAFixVerification(); |
MAA | 0:b3313c5ffca3 | 503 | |
MAA | 7:872984a67d5b | 504 | //Assign value to error flag |
MAA | 7:872984a67d5b | 505 | spsGen.setErrStatus(GGA_Fix_Present); |
MAA | 7:872984a67d5b | 506 | |
MAA | 0:b3313c5ffca3 | 507 | //Clearing RX buffer. |
MAA | 0:b3313c5ffca3 | 508 | GPS_String_Buff = ""; |
MAA | 0:b3313c5ffca3 | 509 | GPS_String_Buff.resize(128); |
MAA | 0:b3313c5ffca3 | 510 | |
MAA | 5:11782a2008c2 | 511 | //parse current date |
MAA | 5:11782a2008c2 | 512 | gpsNMEA.ParseCurrentDateFromGPRMC(); |
MAA | 2:39c4a85dc2a4 | 513 | |
MAA | 5:11782a2008c2 | 514 | //parse current time |
MAA | 5:11782a2008c2 | 515 | gpsNMEA.ParseCurrentUTCFromGPRMC(); |
MAA | 3:38eabaa92552 | 516 | |
MAA | 5:11782a2008c2 | 517 | //parse gps coordinates |
MAA | 5:11782a2008c2 | 518 | gpsNMEA.ParseCurrentLatitudeFromGPRMC(); |
MAA | 5:11782a2008c2 | 519 | gpsNMEA.ParseCurrentLongitudeFromGPRMC(); |
MAA | 24:099df3fa2b13 | 520 | |
MAA | 21:325cb82f1838 | 521 | //clearing flags |
MAA | 21:325cb82f1838 | 522 | GPS_Data_Valid = false; |
MAA | 21:325cb82f1838 | 523 | GPS_Data_Rdy = false; |
MAA | 7:872984a67d5b | 524 | |
MAA | 21:325cb82f1838 | 525 | } |
MAA | 21:325cb82f1838 | 526 | |
MAA | 5:11782a2008c2 | 527 | |
MAA | 0:b3313c5ffca3 | 528 | //If connection to USB flash disk is lost, reconnect to the flash disk |
MAA | 0:b3313c5ffca3 | 529 | if(!msd.connected()){ |
MAA | 9:ddc774114729 | 530 | |
MAA | 9:ddc774114729 | 531 | //USB message |
MAA | 27:efd122db8855 | 532 | clear_display_waiting(); |
MAA | 27:efd122db8855 | 533 | l1 = "USB pen"; |
MAA | 27:efd122db8855 | 534 | l2 = "Missing!"; |
MAA | 27:efd122db8855 | 535 | thr_writelines.start(write_lines); |
MAA | 9:ddc774114729 | 536 | |
MAA | 0:b3313c5ffca3 | 537 | //reestablish usb connection |
MAA | 0:b3313c5ffca3 | 538 | while(!msd.connect()){ |
MAA | 0:b3313c5ffca3 | 539 | dbg.printf("Trying to reconnect to usb flash disk\r\n"); |
MAA | 6:6d1683c8b26b | 540 | wait_ms(200); |
MAA | 6:6d1683c8b26b | 541 | msd.connect(); |
MAA | 0:b3313c5ffca3 | 542 | } |
MAA | 27:efd122db8855 | 543 | |
MAA | 27:efd122db8855 | 544 | thr_writelines.terminate(); |
MAA | 0:b3313c5ffca3 | 545 | |
MAA | 0:b3313c5ffca3 | 546 | //Reopening a file on usb disk |
MAA | 5:11782a2008c2 | 547 | fp = fopen(currentFilename.c_str(), "a"); |
MAA | 7:872984a67d5b | 548 | |
MAA | 7:872984a67d5b | 549 | writeToUsb("\r\n", fp); |
MAA | 7:872984a67d5b | 550 | writeToUsb(spsGen.getHeaderString(), fp); |
MAA | 10:eb026e023a3c | 551 | |
MAA | 0:b3313c5ffca3 | 552 | } |
MAA | 0:b3313c5ffca3 | 553 | |
MAA | 5:11782a2008c2 | 554 | |
MAA | 2:39c4a85dc2a4 | 555 | //kick / feed watchdog |
MAA | 2:39c4a85dc2a4 | 556 | wd.kick(); |
MAA | 5:11782a2008c2 | 557 | |
MAA | 5:11782a2008c2 | 558 | } |
MAA | 5:11782a2008c2 | 559 | |
MAA | 0:b3313c5ffca3 | 560 | return 0; |
MAA | 0:b3313c5ffca3 | 561 | } |
MAA | 0:b3313c5ffca3 | 562 | |
MAA | 0:b3313c5ffca3 | 563 | //Thanks to MODSERIAL! |
MAA | 0:b3313c5ffca3 | 564 | // Called everytime a new character goes into |
MAA | 0:b3313c5ffca3 | 565 | // the RX buffer. Test that character for \n |
MAA | 0:b3313c5ffca3 | 566 | // Note, rxGetLastChar() gets the last char that |
MAA | 0:b3313c5ffca3 | 567 | // we received but it does NOT remove it from |
MAA | 0:b3313c5ffca3 | 568 | // the RX buffer. |
MAA | 0:b3313c5ffca3 | 569 | void rxCallback(MODSERIAL_IRQ_INFO *q) { |
MAA | 0:b3313c5ffca3 | 570 | MODSERIAL *serial = q->serial; |
MAA | 6:6d1683c8b26b | 571 | if (serial->rxGetLastChar() == '\n') { |
MAA | 0:b3313c5ffca3 | 572 | GPS_Data_Rdy = true; |
MAA | 0:b3313c5ffca3 | 573 | } |
MAA | 5:11782a2008c2 | 574 | } |
MAA | 5:11782a2008c2 | 575 | |
MAA | 8:d6287c33b54a | 576 | //Thanks to MODSERIAL! |
MAA | 8:d6287c33b54a | 577 | // Called everytime a new character goes into |
MAA | 8:d6287c33b54a | 578 | // the RX buffer. Test that character for \r and buffer char count |
MAA | 8:d6287c33b54a | 579 | // Note, rxGetLastChar() gets the last char that |
MAA | 8:d6287c33b54a | 580 | // we received but it does NOT remove it from |
MAA | 8:d6287c33b54a | 581 | // the RX buffer. |
MAA | 8:d6287c33b54a | 582 | void bmagrxCallback(MODSERIAL_IRQ_INFO *q) { |
MAA | 8:d6287c33b54a | 583 | MODSERIAL *serial = q->serial; |
MAA | 8:d6287c33b54a | 584 | if ((serial->rxBufferGetCount() > 20) && (serial->rxGetLastChar() == '\r')) { |
MAA | 8:d6287c33b54a | 585 | BMAG_Data_Rdy = true; |
MAA | 8:d6287c33b54a | 586 | } |
MAA | 8:d6287c33b54a | 587 | } |
MAA | 8:d6287c33b54a | 588 | |
MAA | 7:872984a67d5b | 589 | //Write to file |
MAA | 6:6d1683c8b26b | 590 | bool writeToUsb(string line, FILE * f){ |
MAA | 5:11782a2008c2 | 591 | |
MAA | 5:11782a2008c2 | 592 | if (f != NULL) { |
MAA | 6:6d1683c8b26b | 593 | |
MAA | 5:11782a2008c2 | 594 | fprintf(f, "\r\n"); |
MAA | 8:d6287c33b54a | 595 | fprintf(f, line.c_str()); |
MAA | 8:d6287c33b54a | 596 | |
MAA | 6:6d1683c8b26b | 597 | } |
MAA | 6:6d1683c8b26b | 598 | |
MAA | 5:11782a2008c2 | 599 | if(f == NULL){ |
MAA | 5:11782a2008c2 | 600 | return false; |
MAA | 5:11782a2008c2 | 601 | } |
MAA | 5:11782a2008c2 | 602 | |
MAA | 5:11782a2008c2 | 603 | return true; |
MAA | 5:11782a2008c2 | 604 | } |