Prototyping the Adaptable Emergency System on an C027 board.
Dependencies: C027_Support mbed
Fork of c027_prototyping by
gps_locate.cpp@16:2b2f2a3bde5a, 2014-10-01 (annotated)
- Committer:
- aroulin
- Date:
- Wed Oct 01 08:47:54 2014 +0000
- Revision:
- 16:2b2f2a3bde5a
- Parent:
- 15:41e3e4613e34
- Child:
- 17:726bbc1b73ee
Adds some timers to timeout GPS test and receive SMS test
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 | 16:2b2f2a3bde5a | 16 | printf("GPS Location begins\r\n"); |
aroulin | 16:2b2f2a3bde5a | 17 | |
aroulin | 4:f1708f6ec905 | 18 | // Power on gps |
aroulin | 4:f1708f6ec905 | 19 | GPSI2C gps; |
aroulin | 16:2b2f2a3bde5a | 20 | |
aroulin | 16:2b2f2a3bde5a | 21 | // Timeout timer |
aroulin | 16:2b2f2a3bde5a | 22 | Timer timer; |
aroulin | 16:2b2f2a3bde5a | 23 | timer.start(); |
aroulin | 4:f1708f6ec905 | 24 | |
aroulin | 7:eeef6f9fa1db | 25 | bool coord_ok = false, altitude_ok = false, speed_ok = false; |
aroulin | 7:eeef6f9fa1db | 26 | |
aroulin | 4:f1708f6ec905 | 27 | int ret = 0; |
aroulin | 4:f1708f6ec905 | 28 | char buf[512] = {0}; |
aroulin | 16:2b2f2a3bde5a | 29 | while(!coord_ok || !altitude_ok || !speed_ok) { |
aroulin | 16:2b2f2a3bde5a | 30 | |
aroulin | 16:2b2f2a3bde5a | 31 | if(timer.read() > 20) { |
aroulin | 16:2b2f2a3bde5a | 32 | printf("GPS Location TimeOut, abort...\r\n"); |
aroulin | 16:2b2f2a3bde5a | 33 | timer.stop(); |
aroulin | 16:2b2f2a3bde5a | 34 | return 0; |
aroulin | 16:2b2f2a3bde5a | 35 | } |
aroulin | 16:2b2f2a3bde5a | 36 | |
aroulin | 7:eeef6f9fa1db | 37 | while ((ret = gps.getMessage(buf, sizeof(buf))) > 0) { |
aroulin | 7:eeef6f9fa1db | 38 | int len = LENGTH(ret); |
aroulin | 7:eeef6f9fa1db | 39 | if ((PROTOCOL(ret) == GPSParser::NMEA) && (len > 6)) { |
aroulin | 7:eeef6f9fa1db | 40 | if (!strncmp("$GPGLL", buf, 6)) { |
aroulin | 7:eeef6f9fa1db | 41 | double la = 0, lo = 0; |
aroulin | 7:eeef6f9fa1db | 42 | char ch; |
aroulin | 7:eeef6f9fa1db | 43 | if (gps.getNmeaAngle(1,buf,len,la) && |
aroulin | 7:eeef6f9fa1db | 44 | gps.getNmeaAngle(3,buf,len,lo) && |
aroulin | 7:eeef6f9fa1db | 45 | gps.getNmeaItem(6,buf,len,ch) && ch == 'A') { |
aroulin | 7:eeef6f9fa1db | 46 | gps_data->lo = lo; |
aroulin | 7:eeef6f9fa1db | 47 | gps_data->la = la; |
aroulin | 7:eeef6f9fa1db | 48 | coord_ok = true; |
aroulin | 7:eeef6f9fa1db | 49 | } |
aroulin | 7:eeef6f9fa1db | 50 | } else if (!strncmp("$GPGGA", buf, 6)) { |
aroulin | 7:eeef6f9fa1db | 51 | double a = 0; |
aroulin | 7:eeef6f9fa1db | 52 | if (gps.getNmeaItem(9,buf,len,a)) // altitude msl [m] |
aroulin | 7:eeef6f9fa1db | 53 | gps_data->altitude = a; |
aroulin | 7:eeef6f9fa1db | 54 | altitude_ok = true; |
aroulin | 7:eeef6f9fa1db | 55 | } else if (!strncmp("$GPVTG", buf, 6)) { |
aroulin | 7:eeef6f9fa1db | 56 | double s = 0; |
aroulin | 7:eeef6f9fa1db | 57 | if (gps.getNmeaItem(7,buf,len,s)) // speed [km/h] |
aroulin | 7:eeef6f9fa1db | 58 | gps_data->speed = s; |
aroulin | 7:eeef6f9fa1db | 59 | speed_ok = true; |
aroulin | 7:eeef6f9fa1db | 60 | } |
aroulin | 4:f1708f6ec905 | 61 | |
aroulin | 4:f1708f6ec905 | 62 | } |
aroulin | 4:f1708f6ec905 | 63 | } |
aroulin | 7:eeef6f9fa1db | 64 | } |
aroulin | 16:2b2f2a3bde5a | 65 | |
aroulin | 16:2b2f2a3bde5a | 66 | timer.stop(); |
aroulin | 16:2b2f2a3bde5a | 67 | return 1; |
aroulin | 4:f1708f6ec905 | 68 | } |