Prototyping the Adaptable Emergency System on an C027 board.
Dependencies: C027_Support mbed
Fork of c027_prototyping by
gps_locate.cpp@7:eeef6f9fa1db, 2014-09-30 (annotated)
- 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?
User | Revision | Line number | New 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 | } |