2018/06/18

Dependents:   library

GPS.cpp

Committer:
Tomo073
Date:
2018-06-13
Revision:
3:940fe222bab0
Parent:
2:578f518a6a05
Child:
4:41330399104d

File content as of revision 3:940fe222bab0:

#include "mbed.h"
#include "GPS.h"

GPS::GPS(PinName gpstx,PinName gpsrx): serial(gpstx,gpsrx){
}

void GPS::attach(void(*fn)()){
      serial.attach(fn, Serial::RxIrq);
}

void GPS::GetDefault(){
    datadefault = serial.getc();
}

void GPS::GetData(){

    Initialization();
    
    datadefault = serial.getc();
    
    if(datadefault == '$'){
      
      char DATA[20] = "\0";
       
      Initialization();
      getstring(DATA);
      
      if(!strcmp(DATA, "GPGGA")){ 
      
        int info;
        
        for(info=1;info<11;info++){
          
          getstring(DATA);
          
          switch(info){
            case 1:
            time = strtof(DATA, NULL) + 90000.0;
            break;
            case 2:
            fMinutes = modff(strtof(DATA, NULL), &latitude)*60.0;
            latitude = latitude*100.0 + fMinutes;
            break;
            case 3:
            if(!strcmp(DATA, "S")){
                latitude = latitude*-1.0;
            }
            break;
            case 4: 
            fMinutes = modff(strtof(DATA, NULL), &longtitude)*60.0;
            longtitude = longtitude*100.0 + fMinutes;  
            break;
            case 5:
            if(!strcmp(DATA, "W")){
                longtitude = longtitude*-1.0;
            }
            break;
            case 9:
            altitude = strtof(DATA, NULL);
            break;
            case 10:
            if(strcmp(DATA, "M")){
                altitude = altitude*-1.0;
            }
            readable = true;
            break;
          }
          
        }
      }
  }
}

void GPS::getstring(char a[]){
    int n;
    for(n = 0;;n++){
      char ch = serial.getc();
      if(ch == ',' ||ch == '\n'){
         a[n] = '\0';
         break; 
      }
      a[n] = ch;
    }
}

void GPS::Initialization(){
    readable = false;
    longtitude = -1.0;
    latitude = -1.0;
    altitude = -1.0;
    time = -1.0;
    fMinutes = -1.0;
}