Bmag incl gps rettelse

Dependencies:   mbed WDT MODSERIAL BME280

Committer:
MAA
Date:
Thu Mar 09 12:03:55 2017 +0000
Revision:
5:11782a2008c2
Parent:
4:c70ef089a3fd
Child:
6:6d1683c8b26b
fungerende *.sps linie generator, mangler lidt fintuning.; fungerende tilf?jelse af sps linier til fil p? usb pen. ; ; TODO:; Dokumentation; forbedring af opstart.; data opsamling fra MAG; udbedring af uhensigtsm?ssig "opf?rsel"

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 0:b3313c5ffca3 9
MAA 0:b3313c5ffca3 10 //global system variables,at the moment, only the currently always true "run variable"
MAA 0:b3313c5ffca3 11 bool run = true;
MAA 0:b3313c5ffca3 12 int writecount = 0;
MAA 0:b3313c5ffca3 13 int dataRWComplete = 0;
MAA 0:b3313c5ffca3 14
MAA 0:b3313c5ffca3 15 //global tmpGpsRxString
MAA 0:b3313c5ffca3 16 char tmpGpsRxString[128];
MAA 0:b3313c5ffca3 17
MAA 0:b3313c5ffca3 18
MAA 5:11782a2008c2 19 //Write to file prototype
MAA 5:11782a2008c2 20 bool writeToUsb(string line, FILE * f, Serial * dbg);
MAA 5:11782a2008c2 21
MAA 0:b3313c5ffca3 22 int main(void){
MAA 0:b3313c5ffca3 23
MAA 4:c70ef089a3fd 24 string currentFilename, nextFilename;
MAA 4:c70ef089a3fd 25
MAA 5:11782a2008c2 26 currentFilename = "/usb/tempFile.sps";
MAA 5:11782a2008c2 27
MAA 0:b3313c5ffca3 28 //Initializing string buffer for GPS data
MAA 0:b3313c5ffca3 29 string GPS_String_Buff;
MAA 0:b3313c5ffca3 30 GPS_String_Buff.resize(128);
MAA 0:b3313c5ffca3 31 memset(tmpGpsRxString,'\0',128);
MAA 0:b3313c5ffca3 32
MAA 0:b3313c5ffca3 33 //GPS communication init
MAA 0:b3313c5ffca3 34 gps.baud(9600);
MAA 0:b3313c5ffca3 35 gps.attach(&rxCallback, MODSERIAL::RxIrq);
MAA 0:b3313c5ffca3 36
MAA 2:39c4a85dc2a4 37 //debug comm setup
MAA 0:b3313c5ffca3 38 dbg.baud(115200);
MAA 0:b3313c5ffca3 39
MAA 0:b3313c5ffca3 40 //setting up USB device
MAA 0:b3313c5ffca3 41 USBHostMSD msd("usb");
MAA 5:11782a2008c2 42 msd.connect();
MAA 0:b3313c5ffca3 43
MAA 0:b3313c5ffca3 44 while(!msd.connect()){
MAA 0:b3313c5ffca3 45 dbg.printf("Trying to connect to usb flash disk\r\n");
MAA 5:11782a2008c2 46
MAA 0:b3313c5ffca3 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 0:b3313c5ffca3 54 //Start comms with the GPS, Enabling GPRMC and GPGGA
MAA 0:b3313c5ffca3 55 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 2:39c4a85dc2a4 56
MAA 2:39c4a85dc2a4 57 //initializing watchdog
MAA 2:39c4a85dc2a4 58 Watchdog wd;
MAA 2:39c4a85dc2a4 59 wd.init(1.0);
MAA 2:39c4a85dc2a4 60
MAA 2:39c4a85dc2a4 61 //initializing SPS generation
MAA 2:39c4a85dc2a4 62 SPS spsGen;
MAA 2:39c4a85dc2a4 63
MAA 5:11782a2008c2 64 //infinite loop running after initialization
MAA 0:b3313c5ffca3 65 while(run) {
MAA 0:b3313c5ffca3 66
MAA 0:b3313c5ffca3 67 if(GPS_Data_Rdy){
MAA 0:b3313c5ffca3 68
MAA 0:b3313c5ffca3 69 gps.scanf("%s", &tmpGpsRxString);
MAA 0:b3313c5ffca3 70
MAA 0:b3313c5ffca3 71 //copy c_string to string
MAA 0:b3313c5ffca3 72 GPS_String_Buff.assign(tmpGpsRxString);
MAA 0:b3313c5ffca3 73
MAA 0:b3313c5ffca3 74 //clear tmpRxBuffer
MAA 0:b3313c5ffca3 75 memset(tmpGpsRxString,'\0',128);
MAA 0:b3313c5ffca3 76
MAA 0:b3313c5ffca3 77 //printing GPS string buffer
MAA 0:b3313c5ffca3 78 dbg.printf(GPS_String_Buff.c_str());
MAA 0:b3313c5ffca3 79 dbg.printf("\r\n");
MAA 5:11782a2008c2 80
MAA 0:b3313c5ffca3 81 //Validate CRC
MAA 5:11782a2008c2 82 GPS_Data_Valid = gpsNMEA.ValidateData(GPS_String_Buff);
MAA 0:b3313c5ffca3 83
MAA 0:b3313c5ffca3 84 //store valid string, either gga or rmc
MAA 0:b3313c5ffca3 85 if(GPS_Data_Valid){
MAA 2:39c4a85dc2a4 86 gpsNMEA.StoreString(GPS_String_Buff/*, &dbg*/);
MAA 0:b3313c5ffca3 87 }
MAA 0:b3313c5ffca3 88
MAA 5:11782a2008c2 89 //Get gga fix flag
MAA 2:39c4a85dc2a4 90 GGA_Fix_Present = gpsNMEA.GGAFixVerification();
MAA 0:b3313c5ffca3 91
MAA 0:b3313c5ffca3 92 //Clearing RX buffer.
MAA 0:b3313c5ffca3 93 GPS_String_Buff = "";
MAA 0:b3313c5ffca3 94 GPS_String_Buff.resize(128);
MAA 0:b3313c5ffca3 95
MAA 5:11782a2008c2 96 //parse current date
MAA 5:11782a2008c2 97 gpsNMEA.ParseCurrentDateFromGPRMC();
MAA 2:39c4a85dc2a4 98
MAA 5:11782a2008c2 99 //parse current time
MAA 5:11782a2008c2 100 gpsNMEA.ParseCurrentUTCFromGPRMC();
MAA 3:38eabaa92552 101
MAA 5:11782a2008c2 102 //parse gps coordinates
MAA 5:11782a2008c2 103 gpsNMEA.ParseCurrentLatitudeFromGPRMC();
MAA 5:11782a2008c2 104 gpsNMEA.ParseCurrentLongitudeFromGPRMC();
MAA 2:39c4a85dc2a4 105
MAA 0:b3313c5ffca3 106 //clearing flags
MAA 0:b3313c5ffca3 107 GPS_Data_Valid = false;
MAA 5:11782a2008c2 108 GPS_Data_Rdy = false;
MAA 5:11782a2008c2 109
MAA 5:11782a2008c2 110 //update current data string for sps file
MAA 5:11782a2008c2 111 dbg.printf("Updating current sps string\r\n");
MAA 5:11782a2008c2 112 dbg.printf("gpsNMEA.currentUTCFromGPRMC :");
MAA 5:11782a2008c2 113 dbg.printf(gpsNMEA.currentUTCFromGPRMC.c_str());
MAA 5:11782a2008c2 114 dbg.printf("\r\n");
MAA 2:39c4a85dc2a4 115
MAA 5:11782a2008c2 116 if(GGA_Fix_Present){
MAA 5:11782a2008c2 117
MAA 5:11782a2008c2 118 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 5:11782a2008c2 119
MAA 5:11782a2008c2 120 //write data strings to sps file
MAA 5:11782a2008c2 121 if(firstLineWritten){
MAA 5:11782a2008c2 122 writeToUsb(spsGen.getCurrentString(), fp, &dbg);
MAA 5:11782a2008c2 123 }
MAA 0:b3313c5ffca3 124
MAA 5:11782a2008c2 125 if(!firstLineWritten){
MAA 5:11782a2008c2 126 writeToUsb(spsGen.getHeaderString(), fp, &dbg);
MAA 5:11782a2008c2 127 writeToUsb(spsGen.getCurrentString(), fp, &dbg);
MAA 5:11782a2008c2 128 firstLineWritten = true;
MAA 5:11782a2008c2 129 }
MAA 5:11782a2008c2 130 }
MAA 5:11782a2008c2 131 }
MAA 0:b3313c5ffca3 132
MAA 5:11782a2008c2 133
MAA 0:b3313c5ffca3 134 //If connection to USB flash disk is lost, reconnect to the flash disk
MAA 0:b3313c5ffca3 135 if(!msd.connected()){
MAA 0:b3313c5ffca3 136 //reestablish usb connection
MAA 0:b3313c5ffca3 137 while(!msd.connect()){
MAA 0:b3313c5ffca3 138 dbg.printf("Trying to reconnect to usb flash disk\r\n");
MAA 0:b3313c5ffca3 139 wait_ms(500);
MAA 0:b3313c5ffca3 140 }
MAA 0:b3313c5ffca3 141
MAA 0:b3313c5ffca3 142 //Reopening a file on usb disk
MAA 5:11782a2008c2 143 fp = fopen(currentFilename.c_str(), "a");
MAA 0:b3313c5ffca3 144
MAA 0:b3313c5ffca3 145 }
MAA 0:b3313c5ffca3 146
MAA 5:11782a2008c2 147
MAA 2:39c4a85dc2a4 148 //kick / feed watchdog
MAA 2:39c4a85dc2a4 149 wd.kick();
MAA 5:11782a2008c2 150
MAA 5:11782a2008c2 151 }
MAA 5:11782a2008c2 152
MAA 0:b3313c5ffca3 153 return 0;
MAA 0:b3313c5ffca3 154 }
MAA 0:b3313c5ffca3 155
MAA 0:b3313c5ffca3 156 //Thanks to MODSERIAL!
MAA 0:b3313c5ffca3 157 // Called everytime a new character goes into
MAA 0:b3313c5ffca3 158 // the RX buffer. Test that character for \n
MAA 0:b3313c5ffca3 159 // Note, rxGetLastChar() gets the last char that
MAA 0:b3313c5ffca3 160 // we received but it does NOT remove it from
MAA 0:b3313c5ffca3 161 // the RX buffer.
MAA 0:b3313c5ffca3 162 void rxCallback(MODSERIAL_IRQ_INFO *q) {
MAA 0:b3313c5ffca3 163 MODSERIAL *serial = q->serial;
MAA 0:b3313c5ffca3 164 if ( serial->rxGetLastChar() == '\n') {
MAA 0:b3313c5ffca3 165 GPS_Data_Rdy = true;
MAA 0:b3313c5ffca3 166 }
MAA 5:11782a2008c2 167 }
MAA 5:11782a2008c2 168
MAA 5:11782a2008c2 169 //Write to file prototype
MAA 5:11782a2008c2 170 bool writeToUsb(string line, FILE * f, Serial * dbg){
MAA 5:11782a2008c2 171
MAA 5:11782a2008c2 172 if (f != NULL) {
MAA 5:11782a2008c2 173 dbg->printf("Writing to usb flash disk\r\n");
MAA 5:11782a2008c2 174 writecount += 1;
MAA 5:11782a2008c2 175 fprintf(f, line.c_str());
MAA 5:11782a2008c2 176 fprintf(f, "\r\n");
MAA 5:11782a2008c2 177 }
MAA 5:11782a2008c2 178 if(f == NULL){
MAA 5:11782a2008c2 179 return false;
MAA 5:11782a2008c2 180 }
MAA 5:11782a2008c2 181
MAA 5:11782a2008c2 182 return true;
MAA 5:11782a2008c2 183 }
MAA 5:11782a2008c2 184