Prototyping the Adaptable Emergency System on an C027 board.

Dependencies:   C027_Support mbed

Fork of c027_prototyping by Philémon Favrod

Committer:
aroulin
Date:
Tue Sep 30 17:57:38 2014 +0000
Revision:
7:eeef6f9fa1db
Parent:
4:f1708f6ec905
Child:
13:3c1f0b8c1d21
GPS Encapsulation

Who changed what in which revision?

UserRevisionLine numberNew contents of line
aroulin 4:f1708f6ec905 1 #include "gps_locate.h"
aroulin 4:f1708f6ec905 2 #include "GPS.h"
aroulin 4:f1708f6ec905 3
aroulin 4:f1708f6ec905 4 int gps_on(void)
aroulin 4:f1708f6ec905 5 {
aroulin 4:f1708f6ec905 6 return 0;
aroulin 4:f1708f6ec905 7 }
aroulin 4:f1708f6ec905 8
aroulin 4:f1708f6ec905 9 int gps_off(void)
aroulin 4:f1708f6ec905 10 {
aroulin 4:f1708f6ec905 11 return 0;
aroulin 4:f1708f6ec905 12 }
aroulin 4:f1708f6ec905 13
aroulin 4:f1708f6ec905 14 int gps_locate(struct gps_data_t* gps_data)
aroulin 7:eeef6f9fa1db 15 {
aroulin 4:f1708f6ec905 16 // Power on gps
aroulin 4:f1708f6ec905 17 GPSI2C gps;
aroulin 4:f1708f6ec905 18
aroulin 7:eeef6f9fa1db 19 bool coord_ok = false, altitude_ok = false, speed_ok = false;
aroulin 7:eeef6f9fa1db 20
aroulin 4:f1708f6ec905 21 int ret = 0;
aroulin 4:f1708f6ec905 22 char buf[512] = {0};
aroulin 7:eeef6f9fa1db 23 while(!coord_ok || !altitude_ok || !speed_ok) {
aroulin 7:eeef6f9fa1db 24 while ((ret = gps.getMessage(buf, sizeof(buf))) > 0) {
aroulin 7:eeef6f9fa1db 25 int len = LENGTH(ret);
aroulin 7:eeef6f9fa1db 26 if ((PROTOCOL(ret) == GPSParser::NMEA) && (len > 6)) {
aroulin 7:eeef6f9fa1db 27 if (!strncmp("$GPGLL", buf, 6)) {
aroulin 7:eeef6f9fa1db 28 double la = 0, lo = 0;
aroulin 7:eeef6f9fa1db 29 char ch;
aroulin 7:eeef6f9fa1db 30 if (gps.getNmeaAngle(1,buf,len,la) &&
aroulin 7:eeef6f9fa1db 31 gps.getNmeaAngle(3,buf,len,lo) &&
aroulin 7:eeef6f9fa1db 32 gps.getNmeaItem(6,buf,len,ch) && ch == 'A') {
aroulin 7:eeef6f9fa1db 33 gps_data->lo = lo;
aroulin 7:eeef6f9fa1db 34 gps_data->la = la;
aroulin 7:eeef6f9fa1db 35 coord_ok = true;
aroulin 7:eeef6f9fa1db 36 }
aroulin 7:eeef6f9fa1db 37 } else if (!strncmp("$GPGGA", buf, 6)) {
aroulin 7:eeef6f9fa1db 38 double a = 0;
aroulin 7:eeef6f9fa1db 39 if (gps.getNmeaItem(9,buf,len,a)) // altitude msl [m]
aroulin 7:eeef6f9fa1db 40 gps_data->altitude = a;
aroulin 7:eeef6f9fa1db 41 altitude_ok = true;
aroulin 7:eeef6f9fa1db 42 } else if (!strncmp("$GPVTG", buf, 6)) {
aroulin 7:eeef6f9fa1db 43 double s = 0;
aroulin 7:eeef6f9fa1db 44 if (gps.getNmeaItem(7,buf,len,s)) // speed [km/h]
aroulin 7:eeef6f9fa1db 45 gps_data->speed = s;
aroulin 7:eeef6f9fa1db 46 speed_ok = true;
aroulin 7:eeef6f9fa1db 47 }
aroulin 4:f1708f6ec905 48
aroulin 4:f1708f6ec905 49 }
aroulin 4:f1708f6ec905 50 }
aroulin 7:eeef6f9fa1db 51 }
aroulin 7:eeef6f9fa1db 52
aroulin 7:eeef6f9fa1db 53 return 0;
aroulin 4:f1708f6ec905 54 }