Bmag incl gps rettelse

Dependencies:   mbed WDT MODSERIAL BME280

main.cpp

Committer:
MAA
Date:
2017-02-23
Revision:
2:39c4a85dc2a4
Parent:
0:b3313c5ffca3
Child:
3:38eabaa92552

File content as of revision 2:39c4a85dc2a4:

#include "main.h"

//Global GPS variables
bool GPS_Data_Rdy = false;
bool GPS_Data_Valid = false;
bool GGA_Fix_Present = false;

//global system variables,at the moment, only the currently always true "run variable"
bool run = true;
int writecount = 0;
int dataRWComplete = 0;

//global tmpGpsRxString
char tmpGpsRxString[128];


int main(void){
    
    //Initializing string buffer for GPS data
    string GPS_String_Buff;
    GPS_String_Buff.resize(128);
    memset(tmpGpsRxString,'\0',128);
        
    //GPS communication init
    gps.baud(9600);
    gps.attach(&rxCallback, MODSERIAL::RxIrq);
    
    //debug comm setup
    dbg.baud(115200);
    
    //setting up USB device
    USBHostMSD msd("usb");
    
    while(!msd.connect()){
        dbg.printf("Trying to connect to usb flash disk\r\n");
        wait_ms(500);       
    }
    
    //Opening a file on usb disk
    FILE * fp = fopen("/usb/test1.txt", "w");
    fclose(fp);
    fp = fopen("/usb/test1.txt", "a");
    
    //Start comms with the GPS, Enabling GPRMC and  GPGGA
    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");

    //initializing watchdog
    Watchdog wd;
    wd.init(1.0);
    
    //initializing SPS generation 
    SPS spsGen;
            
    //infinite loop
    while(run) {
        
        if(GPS_Data_Rdy){
            
            gps.scanf("%s", &tmpGpsRxString);
            
            //copy c_string to string
            GPS_String_Buff.assign(tmpGpsRxString);
            
            //clear tmpRxBuffer
            memset(tmpGpsRxString,'\0',128);
            
            //printing GPS string buffer
            dbg.printf(GPS_String_Buff.c_str());
            dbg.printf("\r\n");
            //dbg.printf("Validating GPS data\r\n");
            //Validate CRC
            GPS_Data_Valid = gpsNMEA.ValidateData(GPS_String_Buff, &dbg);
         
            //store valid string, either gga or rmc
            if(GPS_Data_Valid){
                 gpsNMEA.StoreString(GPS_String_Buff/*, &dbg*/);   
            }
            
            GGA_Fix_Present = gpsNMEA.GGAFixVerification();
            
            //Clearing RX buffer.
            //dbg.printf("Clearing Rx buffer, and flags... ");  
            GPS_String_Buff = "";
            GPS_String_Buff.resize(128);
            
            gpsNMEA.ParseCurrentDateFromGPRMC(&dbg);
            dbg.printf("Current Parsed date: ");
            dbg.printf(gpsNMEA.currentDATEFromGPRMC.c_str());
            dbg.printf("\r\n");
            
            
            gpsNMEA.ParseCurrentUTCFromGPRMC(&dbg);
            dbg.printf("Current Parsed date: ");
            dbg.printf(gpsNMEA.currentUTCFromGPRMC.c_str());
            dbg.printf("\r\n");
            
            //clearing flags
            GPS_Data_Valid = false;
            GPS_Data_Rdy = false; 
            
            
                            
            //write current data received data to file if gga fix is present.
            if (fp != NULL) {
                //dbg.printf("Writing to usb flash disk\r\n");
                writecount += 1;
                fprintf(fp, gpsNMEA.currentGGAString.c_str());
                fprintf(fp, "\r\n");
                fprintf(fp, gpsNMEA.currentGPRMCString.c_str());
                fprintf(fp, "\r\n");
            }
            
            if(fp == NULL){
                //Reopening a file on usb disk
                FILE * fp = fopen("/usb/test1.txt", "a");        
            }
            
            //Close file and reopen
            if(writecount > 10){
                //dbg.printf("Closing file and reopening.\r\n");
                fclose(fp);
                writecount = 0;
                fp = fopen("/usb/test1.txt", "a");    
            }
            
       }
        
        
        
        //If connection to USB flash disk is lost, reconnect to the flash disk
        if(!msd.connected()){
            //reestablish usb connection
            while(!msd.connect()){
                dbg.printf("Trying to reconnect to usb flash disk\r\n");
                wait_ms(500);
            }
                
            //Reopening a file on usb disk
            fp = fopen("/usb/test1.txt", "a");
                     
        }
        
        
        //kick / feed watchdog 
        wd.kick();
        
    }         
     
    return 0;    
}

//Thanks to MODSERIAL!
// Called everytime a new character goes into
// the RX buffer. Test that character for \n
// Note, rxGetLastChar() gets the last char that
// we received but it does NOT remove it from
// the RX buffer. 
void rxCallback(MODSERIAL_IRQ_INFO *q) {
    MODSERIAL *serial = q->serial;
    if ( serial->rxGetLastChar() == '\n') {
        GPS_Data_Rdy = true;
    }
}