Bmag incl gps rettelse
Dependencies: mbed WDT MODSERIAL BME280
main.cpp@7:872984a67d5b, 2017-03-15 (annotated)
- Committer:
- MAA
- Date:
- Wed Mar 15 13:56:53 2017 +0000
- Revision:
- 7:872984a67d5b
- Parent:
- 6:6d1683c8b26b
- Child:
- 8:d6287c33b54a
ERR og ERRS tilf?jet til SPS klassen.; ; Filnavn?ndring ved dato?ndring i GPRMC streng tilf?jet.
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 | 4:c70ef089a3fd | 3 | |
MAA | 0:b3313c5ffca3 | 4 | //Global GPS variables |
MAA | 0:b3313c5ffca3 | 5 | bool GPS_Data_Rdy = false; |
MAA | 0:b3313c5ffca3 | 6 | bool GPS_Data_Valid = false; |
MAA | 0:b3313c5ffca3 | 7 | bool GGA_Fix_Present = false; |
MAA | 5:11782a2008c2 | 8 | bool firstLineWritten = false; |
MAA | 6:6d1683c8b26b | 9 | bool fileNameUpdated = false; |
MAA | 7:872984a67d5b | 10 | bool lastErrStatus = true; |
MAA | 7:872984a67d5b | 11 | bool firstErrsWritten = false; |
MAA | 7:872984a67d5b | 12 | |
MAA | 0:b3313c5ffca3 | 13 | |
MAA | 6:6d1683c8b26b | 14 | //global system variables |
MAA | 0:b3313c5ffca3 | 15 | bool run = true; |
MAA | 0:b3313c5ffca3 | 16 | |
MAA | 0:b3313c5ffca3 | 17 | //global tmpGpsRxString |
MAA | 0:b3313c5ffca3 | 18 | char tmpGpsRxString[128]; |
MAA | 0:b3313c5ffca3 | 19 | |
MAA | 5:11782a2008c2 | 20 | //Write to file prototype |
MAA | 6:6d1683c8b26b | 21 | bool writeToUsb(string line, FILE * f); |
MAA | 5:11782a2008c2 | 22 | |
MAA | 0:b3313c5ffca3 | 23 | int main(void){ |
MAA | 7:872984a67d5b | 24 | |
MAA | 7:872984a67d5b | 25 | //initializing watchdog, timeout 10 seconds |
MAA | 6:6d1683c8b26b | 26 | Watchdog wd; |
MAA | 6:6d1683c8b26b | 27 | wd.init(10.0); |
MAA | 0:b3313c5ffca3 | 28 | |
MAA | 4:c70ef089a3fd | 29 | string currentFilename, nextFilename; |
MAA | 4:c70ef089a3fd | 30 | |
MAA | 5:11782a2008c2 | 31 | currentFilename = "/usb/tempFile.sps"; |
MAA | 5:11782a2008c2 | 32 | |
MAA | 0:b3313c5ffca3 | 33 | //Initializing string buffer for GPS data |
MAA | 0:b3313c5ffca3 | 34 | string GPS_String_Buff; |
MAA | 0:b3313c5ffca3 | 35 | GPS_String_Buff.resize(128); |
MAA | 0:b3313c5ffca3 | 36 | memset(tmpGpsRxString,'\0',128); |
MAA | 0:b3313c5ffca3 | 37 | |
MAA | 2:39c4a85dc2a4 | 38 | //debug comm setup |
MAA | 0:b3313c5ffca3 | 39 | dbg.baud(115200); |
MAA | 6:6d1683c8b26b | 40 | dbg.printf("Init...\r\n"); |
MAA | 0:b3313c5ffca3 | 41 | |
MAA | 0:b3313c5ffca3 | 42 | //setting up USB device |
MAA | 0:b3313c5ffca3 | 43 | USBHostMSD msd("usb"); |
MAA | 0:b3313c5ffca3 | 44 | |
MAA | 0:b3313c5ffca3 | 45 | while(!msd.connect()){ |
MAA | 0:b3313c5ffca3 | 46 | dbg.printf("Trying to connect to usb flash disk\r\n"); |
MAA | 6:6d1683c8b26b | 47 | wait_ms(500); |
MAA | 0:b3313c5ffca3 | 48 | } |
MAA | 0:b3313c5ffca3 | 49 | |
MAA | 0:b3313c5ffca3 | 50 | //Opening a file on usb disk |
MAA | 5:11782a2008c2 | 51 | FILE * fp = fopen(currentFilename.c_str(), "a"); |
MAA | 4:c70ef089a3fd | 52 | wait_ms(100); |
MAA | 0:b3313c5ffca3 | 53 | |
MAA | 2:39c4a85dc2a4 | 54 | //initializing SPS generation |
MAA | 2:39c4a85dc2a4 | 55 | SPS spsGen; |
MAA | 6:6d1683c8b26b | 56 | |
MAA | 6:6d1683c8b26b | 57 | //GPS communication init |
MAA | 6:6d1683c8b26b | 58 | gps.baud(9600); |
MAA | 6:6d1683c8b26b | 59 | gps.attach(&rxCallback, MODSERIAL::RxIrq); |
MAA | 6:6d1683c8b26b | 60 | |
MAA | 6:6d1683c8b26b | 61 | //Start comms with the GPS, Enabling GPRMC and GPGGA |
MAA | 6:6d1683c8b26b | 62 | 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 | 63 | |
MAA | 7:872984a67d5b | 64 | dbg.printf("Init.... Done!\r\n"); |
MAA | 7:872984a67d5b | 65 | |
MAA | 5:11782a2008c2 | 66 | //infinite loop running after initialization |
MAA | 0:b3313c5ffca3 | 67 | while(run) { |
MAA | 0:b3313c5ffca3 | 68 | |
MAA | 6:6d1683c8b26b | 69 | //if the gps rx buffer is full, flush the buffer |
MAA | 6:6d1683c8b26b | 70 | if(gps.rxBufferFull()){ |
MAA | 6:6d1683c8b26b | 71 | gps.rxBufferFlush(); |
MAA | 6:6d1683c8b26b | 72 | } |
MAA | 6:6d1683c8b26b | 73 | |
MAA | 7:872984a67d5b | 74 | |
MAA | 0:b3313c5ffca3 | 75 | if(GPS_Data_Rdy){ |
MAA | 0:b3313c5ffca3 | 76 | |
MAA | 6:6d1683c8b26b | 77 | //update filename when date is available with gga fix |
MAA | 6:6d1683c8b26b | 78 | if(!fileNameUpdated && GGA_Fix_Present){ |
MAA | 6:6d1683c8b26b | 79 | spsGen.generateSpsFilename(gpsNMEA.currentDATEFromGPRMC); |
MAA | 6:6d1683c8b26b | 80 | nextFilename.assign(spsGen.getSpsFileName()); |
MAA | 6:6d1683c8b26b | 81 | fclose(fp); |
MAA | 6:6d1683c8b26b | 82 | currentFilename.assign(nextFilename); |
MAA | 6:6d1683c8b26b | 83 | nextFilename = ""; |
MAA | 6:6d1683c8b26b | 84 | |
MAA | 6:6d1683c8b26b | 85 | fopen(currentFilename.c_str(), "a"); |
MAA | 6:6d1683c8b26b | 86 | |
MAA | 7:872984a67d5b | 87 | fileNameUpdated = true; |
MAA | 7:872984a67d5b | 88 | |
MAA | 7:872984a67d5b | 89 | //add header to top of file |
MAA | 7:872984a67d5b | 90 | writeToUsb(spsGen.getHeaderString(), fp); |
MAA | 6:6d1683c8b26b | 91 | |
MAA | 6:6d1683c8b26b | 92 | } |
MAA | 6:6d1683c8b26b | 93 | |
MAA | 7:872984a67d5b | 94 | //if date has changed, ensure new file creation. |
MAA | 7:872984a67d5b | 95 | spsGen.generateSpsFilename(gpsNMEA.currentDATEFromGPRMC); |
MAA | 7:872984a67d5b | 96 | if(currentFilename != spsGen.getSpsFileName()){ |
MAA | 7:872984a67d5b | 97 | fileNameUpdated = false; |
MAA | 7:872984a67d5b | 98 | } |
MAA | 7:872984a67d5b | 99 | |
MAA | 0:b3313c5ffca3 | 100 | gps.scanf("%s", &tmpGpsRxString); |
MAA | 0:b3313c5ffca3 | 101 | |
MAA | 0:b3313c5ffca3 | 102 | //copy c_string to string |
MAA | 0:b3313c5ffca3 | 103 | GPS_String_Buff.assign(tmpGpsRxString); |
MAA | 0:b3313c5ffca3 | 104 | |
MAA | 0:b3313c5ffca3 | 105 | //clear tmpRxBuffer |
MAA | 0:b3313c5ffca3 | 106 | memset(tmpGpsRxString,'\0',128); |
MAA | 0:b3313c5ffca3 | 107 | |
MAA | 0:b3313c5ffca3 | 108 | //printing GPS string buffer |
MAA | 0:b3313c5ffca3 | 109 | dbg.printf(GPS_String_Buff.c_str()); |
MAA | 0:b3313c5ffca3 | 110 | dbg.printf("\r\n"); |
MAA | 5:11782a2008c2 | 111 | |
MAA | 0:b3313c5ffca3 | 112 | //Validate CRC |
MAA | 5:11782a2008c2 | 113 | GPS_Data_Valid = gpsNMEA.ValidateData(GPS_String_Buff); |
MAA | 0:b3313c5ffca3 | 114 | |
MAA | 0:b3313c5ffca3 | 115 | //store valid string, either gga or rmc |
MAA | 0:b3313c5ffca3 | 116 | if(GPS_Data_Valid){ |
MAA | 2:39c4a85dc2a4 | 117 | gpsNMEA.StoreString(GPS_String_Buff/*, &dbg*/); |
MAA | 0:b3313c5ffca3 | 118 | } |
MAA | 0:b3313c5ffca3 | 119 | |
MAA | 5:11782a2008c2 | 120 | //Get gga fix flag |
MAA | 2:39c4a85dc2a4 | 121 | GGA_Fix_Present = gpsNMEA.GGAFixVerification(); |
MAA | 0:b3313c5ffca3 | 122 | |
MAA | 7:872984a67d5b | 123 | //Assign value to error flag |
MAA | 7:872984a67d5b | 124 | spsGen.setErrStatus(GGA_Fix_Present); |
MAA | 7:872984a67d5b | 125 | |
MAA | 0:b3313c5ffca3 | 126 | //Clearing RX buffer. |
MAA | 0:b3313c5ffca3 | 127 | GPS_String_Buff = ""; |
MAA | 0:b3313c5ffca3 | 128 | GPS_String_Buff.resize(128); |
MAA | 0:b3313c5ffca3 | 129 | |
MAA | 5:11782a2008c2 | 130 | //parse current date |
MAA | 5:11782a2008c2 | 131 | gpsNMEA.ParseCurrentDateFromGPRMC(); |
MAA | 2:39c4a85dc2a4 | 132 | |
MAA | 5:11782a2008c2 | 133 | //parse current time |
MAA | 5:11782a2008c2 | 134 | gpsNMEA.ParseCurrentUTCFromGPRMC(); |
MAA | 3:38eabaa92552 | 135 | |
MAA | 5:11782a2008c2 | 136 | //parse gps coordinates |
MAA | 5:11782a2008c2 | 137 | gpsNMEA.ParseCurrentLatitudeFromGPRMC(); |
MAA | 5:11782a2008c2 | 138 | gpsNMEA.ParseCurrentLongitudeFromGPRMC(); |
MAA | 2:39c4a85dc2a4 | 139 | |
MAA | 0:b3313c5ffca3 | 140 | //clearing flags |
MAA | 0:b3313c5ffca3 | 141 | GPS_Data_Valid = false; |
MAA | 5:11782a2008c2 | 142 | GPS_Data_Rdy = false; |
MAA | 7:872984a67d5b | 143 | |
MAA | 7:872984a67d5b | 144 | if(!GGA_Fix_Present){ |
MAA | 5:11782a2008c2 | 145 | |
MAA | 7:872984a67d5b | 146 | spsGen.UpdateCurrentString(TAG, IDENTIFIERID, GROUP, gpsNMEA.currentDATEFromGPRMC, gpsNMEA.currentUTCFromGPRMC, TIMEZONE, ENCODING, SOURCEIDENTIFICATION, INTERPRETERID, DATALINEVERSION, FWSRCVERSION, FWIVERSION, gpsNMEA.currentLatitude, gpsNMEA.currentLongitude, GGA_Fix_Present, "magtime", "mag_nt", "mag_sq", &dbg); |
MAA | 7:872984a67d5b | 147 | |
MAA | 5:11782a2008c2 | 148 | //write data strings to sps file |
MAA | 5:11782a2008c2 | 149 | if(firstLineWritten){ |
MAA | 7:872984a67d5b | 150 | writeToUsb(spsGen.getCurrentString(), fp); |
MAA | 7:872984a67d5b | 151 | |
MAA | 7:872984a67d5b | 152 | if(lastErrStatus && !firstErrsWritten){ |
MAA | 7:872984a67d5b | 153 | spsGen.UpdateCurrentErrString("ERRS", IDENTIFIERID, GROUP, gpsNMEA.currentDATEFromGPRMC, gpsNMEA.currentUTCFromGPRMC, TIMEZONE, ENCODING, SOURCEIDENTIFICATION, INTERPRETERID, DATALINEVERSION, FWSRCVERSION, FWIVERSION, gpsNMEA.currentLatitude, gpsNMEA.currentLongitude, GGA_Fix_Present, "magtime", "mag_nt", "mag_sq", &dbg); |
MAA | 7:872984a67d5b | 154 | writeToUsb(spsGen.getCurrentErrString(), fp); |
MAA | 7:872984a67d5b | 155 | firstErrsWritten = true; |
MAA | 7:872984a67d5b | 156 | lastErrStatus = false; |
MAA | 7:872984a67d5b | 157 | } |
MAA | 5:11782a2008c2 | 158 | } |
MAA | 0:b3313c5ffca3 | 159 | |
MAA | 5:11782a2008c2 | 160 | if(!firstLineWritten){ |
MAA | 6:6d1683c8b26b | 161 | writeToUsb(spsGen.getHeaderString(), fp); |
MAA | 6:6d1683c8b26b | 162 | writeToUsb(spsGen.getCurrentString(), fp); |
MAA | 5:11782a2008c2 | 163 | firstLineWritten = true; |
MAA | 5:11782a2008c2 | 164 | } |
MAA | 7:872984a67d5b | 165 | } |
MAA | 7:872984a67d5b | 166 | |
MAA | 7:872984a67d5b | 167 | |
MAA | 7:872984a67d5b | 168 | if(GGA_Fix_Present){ |
MAA | 7:872984a67d5b | 169 | |
MAA | 7:872984a67d5b | 170 | spsGen.UpdateCurrentString(TAG, IDENTIFIERID, GROUP, gpsNMEA.currentDATEFromGPRMC, gpsNMEA.currentUTCFromGPRMC, TIMEZONE, ENCODING, SOURCEIDENTIFICATION, INTERPRETERID, DATALINEVERSION, FWSRCVERSION, FWIVERSION, gpsNMEA.currentLatitude, gpsNMEA.currentLongitude, GGA_Fix_Present, "magtime", "mag_nt", "mag_sq", &dbg); |
MAA | 7:872984a67d5b | 171 | |
MAA | 7:872984a67d5b | 172 | //write data strings to sps file |
MAA | 7:872984a67d5b | 173 | if(firstLineWritten){ |
MAA | 7:872984a67d5b | 174 | writeToUsb(spsGen.getCurrentString(), fp); |
MAA | 7:872984a67d5b | 175 | |
MAA | 7:872984a67d5b | 176 | if(!lastErrStatus){ |
MAA | 7:872984a67d5b | 177 | spsGen.UpdateCurrentErrString("ERRE", IDENTIFIERID, GROUP, gpsNMEA.currentDATEFromGPRMC, gpsNMEA.currentUTCFromGPRMC, TIMEZONE, ENCODING, SOURCEIDENTIFICATION, INTERPRETERID, DATALINEVERSION, FWSRCVERSION, FWIVERSION, gpsNMEA.currentLatitude, gpsNMEA.currentLongitude, GGA_Fix_Present, "magtime", "mag_nt", "mag_sq", &dbg); |
MAA | 7:872984a67d5b | 178 | writeToUsb(spsGen.getCurrentErrString(), fp); |
MAA | 7:872984a67d5b | 179 | lastErrStatus = true; |
MAA | 7:872984a67d5b | 180 | firstErrsWritten = false; |
MAA | 7:872984a67d5b | 181 | firstLineWritten = false; |
MAA | 7:872984a67d5b | 182 | } |
MAA | 7:872984a67d5b | 183 | } |
MAA | 7:872984a67d5b | 184 | |
MAA | 7:872984a67d5b | 185 | if(!firstLineWritten){ |
MAA | 7:872984a67d5b | 186 | writeToUsb(spsGen.getHeaderString(), fp); |
MAA | 7:872984a67d5b | 187 | writeToUsb(spsGen.getCurrentString(), fp); |
MAA | 7:872984a67d5b | 188 | firstLineWritten = true; |
MAA | 7:872984a67d5b | 189 | } |
MAA | 7:872984a67d5b | 190 | } |
MAA | 7:872984a67d5b | 191 | |
MAA | 7:872984a67d5b | 192 | |
MAA | 5:11782a2008c2 | 193 | } |
MAA | 0:b3313c5ffca3 | 194 | |
MAA | 5:11782a2008c2 | 195 | |
MAA | 0:b3313c5ffca3 | 196 | //If connection to USB flash disk is lost, reconnect to the flash disk |
MAA | 0:b3313c5ffca3 | 197 | if(!msd.connected()){ |
MAA | 0:b3313c5ffca3 | 198 | //reestablish usb connection |
MAA | 0:b3313c5ffca3 | 199 | while(!msd.connect()){ |
MAA | 0:b3313c5ffca3 | 200 | dbg.printf("Trying to reconnect to usb flash disk\r\n"); |
MAA | 6:6d1683c8b26b | 201 | wait_ms(200); |
MAA | 6:6d1683c8b26b | 202 | msd.connect(); |
MAA | 0:b3313c5ffca3 | 203 | } |
MAA | 0:b3313c5ffca3 | 204 | |
MAA | 0:b3313c5ffca3 | 205 | //Reopening a file on usb disk |
MAA | 5:11782a2008c2 | 206 | fp = fopen(currentFilename.c_str(), "a"); |
MAA | 7:872984a67d5b | 207 | |
MAA | 7:872984a67d5b | 208 | writeToUsb("\r\n", fp); |
MAA | 7:872984a67d5b | 209 | writeToUsb(spsGen.getHeaderString(), fp); |
MAA | 7:872984a67d5b | 210 | |
MAA | 0:b3313c5ffca3 | 211 | |
MAA | 0:b3313c5ffca3 | 212 | } |
MAA | 0:b3313c5ffca3 | 213 | |
MAA | 5:11782a2008c2 | 214 | |
MAA | 2:39c4a85dc2a4 | 215 | //kick / feed watchdog |
MAA | 2:39c4a85dc2a4 | 216 | wd.kick(); |
MAA | 5:11782a2008c2 | 217 | |
MAA | 5:11782a2008c2 | 218 | } |
MAA | 5:11782a2008c2 | 219 | |
MAA | 0:b3313c5ffca3 | 220 | return 0; |
MAA | 0:b3313c5ffca3 | 221 | } |
MAA | 0:b3313c5ffca3 | 222 | |
MAA | 0:b3313c5ffca3 | 223 | //Thanks to MODSERIAL! |
MAA | 0:b3313c5ffca3 | 224 | // Called everytime a new character goes into |
MAA | 0:b3313c5ffca3 | 225 | // the RX buffer. Test that character for \n |
MAA | 0:b3313c5ffca3 | 226 | // Note, rxGetLastChar() gets the last char that |
MAA | 0:b3313c5ffca3 | 227 | // we received but it does NOT remove it from |
MAA | 0:b3313c5ffca3 | 228 | // the RX buffer. |
MAA | 0:b3313c5ffca3 | 229 | void rxCallback(MODSERIAL_IRQ_INFO *q) { |
MAA | 0:b3313c5ffca3 | 230 | MODSERIAL *serial = q->serial; |
MAA | 6:6d1683c8b26b | 231 | if (serial->rxGetLastChar() == '\n') { |
MAA | 0:b3313c5ffca3 | 232 | GPS_Data_Rdy = true; |
MAA | 0:b3313c5ffca3 | 233 | } |
MAA | 5:11782a2008c2 | 234 | } |
MAA | 5:11782a2008c2 | 235 | |
MAA | 7:872984a67d5b | 236 | //Write to file |
MAA | 6:6d1683c8b26b | 237 | bool writeToUsb(string line, FILE * f){ |
MAA | 5:11782a2008c2 | 238 | |
MAA | 5:11782a2008c2 | 239 | if (f != NULL) { |
MAA | 6:6d1683c8b26b | 240 | |
MAA | 5:11782a2008c2 | 241 | fprintf(f, line.c_str()); |
MAA | 5:11782a2008c2 | 242 | fprintf(f, "\r\n"); |
MAA | 6:6d1683c8b26b | 243 | |
MAA | 6:6d1683c8b26b | 244 | } |
MAA | 6:6d1683c8b26b | 245 | |
MAA | 5:11782a2008c2 | 246 | if(f == NULL){ |
MAA | 5:11782a2008c2 | 247 | return false; |
MAA | 5:11782a2008c2 | 248 | } |
MAA | 5:11782a2008c2 | 249 | |
MAA | 5:11782a2008c2 | 250 | return true; |
MAA | 5:11782a2008c2 | 251 | } |
MAA | 5:11782a2008c2 | 252 |