Bmag incl gps rettelse
Dependencies: mbed WDT MODSERIAL BME280
main.cpp@5:11782a2008c2, 2017-03-09 (annotated)
- 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?
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 | 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 |