SkyTEM BMAG / Mbed 2 deprecated BMAGThrRev

Dependencies:   mbed WDT MODSERIAL BME280

Committer:
MAA
Date:
Thu Mar 02 14:04:56 2017 +0000
Revision:
4:c70ef089a3fd
Parent:
3:38eabaa92552
Child:
5:11782a2008c2
Long and Lat calculation in decimal degrees implemented.; SPS file format begun.;

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