Bmag incl gps rettelse

Dependencies:   mbed WDT MODSERIAL BME280

Committer:
MAA
Date:
Fri Feb 17 09:33:57 2017 +0000
Revision:
0:b3313c5ffca3
Child:
1:f347c4ef25fa
Child:
2:39c4a85dc2a4
init

Who changed what in which revision?

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