Library for the EM-406 GPS module

Fork of GPS by Simon Ford

GPS.cpp

Committer:
szabolev
Date:
2013-03-30
Revision:
1:455c3e604c92
Parent:
0:15611c7938a3
Child:
2:4ebd0e486b5a

File content as of revision 1:455c3e604c92:

#include "GPS.h"

GPS::GPS(PinName tx,PinName rx):_gps(tx,rx)
{
 _gps.baud(4800);
 longitude=0.0;
 latitude=0.0;
}

int GPS::sample()
{
 float dummy,d1,d2;
 int lock;
 while(1) 
 {
  getline();
  fok_jel='°';
  if(sscanf(msg,"GPGGA,%f,%f,%c,%f,%c,%d,%f,%f,%f",&time,&latitude,&ns,&longitude,&ew,&lock,&d1,&d2,&altitude)>=1) 
  {
   ora=elso2(time)+1;
   perc=kozepso2(time);
   masodperc=utolso2(time);
   if(lock==0) 
   {
    nincs_adat();
    altitude=0.0;
   } 
   fokpercmasodperc();
   return 1;
  }
  if(sscanf(msg,"GPRMC,%f,%c,%f,%c,%f,%c,%f,%f,%f",&time,&status,&latitude,&ns,&longitude,&ew,&speed,&dummy,&date)>=1) 
  {
   nap=elso2(date);
   ho=kozepso2(date);
   ev=utolso2(date);
   ora=elso2(time)+1;
   perc=kozepso2(time);
   masodperc=utolso2(time);
   if(status=='V') 
   {
    nincs_adat();
    speed=0.0;
   }
   fokpercmasodperc();
   return 1;
  }
 }
}

void GPS::fokpercmasodperc()
{
 long_fok=fok_szamol(longitude);
 long_perc=perc_szamol(longitude);
 long_masodperc=masodperc_szamol(longitude);
 lati_fok=fok_szamol(latitude);
 lati_perc=perc_szamol(latitude);
 lati_masodperc=masodperc_szamol(latitude);
}

void GPS::nincs_adat()
{
 longitude=0.0;
 ew='?';
 latitude=0.0;
 ns='?';
}

int GPS::fok_szamol(float f)
{
 return (int)(f/100);
}

int GPS::perc_szamol(float f)
{
 return (int)(f-fok_szamol(f)*100);
}

float GPS::masodperc_szamol(float f)
{
 return (f-fok_szamol(f)*100-perc_szamol(f))*60;
}

int GPS::elso2(float d)
{
 return (int)floor(d/10000);
}

int GPS::kozepso2(float d)
{
 return (int)floor((d-elso2(d)*10000)/100);
}

int GPS::utolso2(float d)
{
 return (int)floor(d-elso2(d)*10000-kozepso2(d)*100);
}

void GPS::getline()
{
 while(_gps.getc() != '$');    // wait for the start of a line
 for(int i=0;i<256;i++) 
 {
  msg[i]=_gps.getc();
  if(msg[i]=='\r') 
  {
   msg[i]=0;
   return;
  }
 }
 error("Tul hosszu szoveg !");
}