Bmag incl gps rettelse

Dependencies:   mbed WDT MODSERIAL BME280

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?

UserRevisionLine numberNew 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