GPS LIB
gps.cpp@0:20506ffee09a, 2018-10-14 (annotated)
- Committer:
- renanbmx123
- Date:
- Sun Oct 14 02:00:50 2018 +0000
- Revision:
- 0:20506ffee09a
GPS
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
renanbmx123 | 0:20506ffee09a | 1 | #include "gps.h" |
renanbmx123 | 0:20506ffee09a | 2 | |
renanbmx123 | 0:20506ffee09a | 3 | |
renanbmx123 | 0:20506ffee09a | 4 | GPS::GPS(Serial* serial, PinName pwr_pin, int pwr_crtl, int baud): _gps(serial) { |
renanbmx123 | 0:20506ffee09a | 5 | _gps->attach(callback(this, &GPS::recvAttach), Serial::RxIrq); |
renanbmx123 | 0:20506ffee09a | 6 | _pwr_pin = new DigitalOut(pwr_pin, pwr_crtl); |
renanbmx123 | 0:20506ffee09a | 7 | _gps->baud(baud); |
renanbmx123 | 0:20506ffee09a | 8 | } |
renanbmx123 | 0:20506ffee09a | 9 | GPS::~GPS(){ |
renanbmx123 | 0:20506ffee09a | 10 | delete _gps; |
renanbmx123 | 0:20506ffee09a | 11 | delete _pwr_pin; |
renanbmx123 | 0:20506ffee09a | 12 | |
renanbmx123 | 0:20506ffee09a | 13 | } |
renanbmx123 | 0:20506ffee09a | 14 | |
renanbmx123 | 0:20506ffee09a | 15 | void GPS::recvAttach (void) |
renanbmx123 | 0:20506ffee09a | 16 | { |
renanbmx123 | 0:20506ffee09a | 17 | // if(int_ctrl == 1) |
renanbmx123 | 0:20506ffee09a | 18 | if(_gps->readable()) { |
renanbmx123 | 0:20506ffee09a | 19 | _gps->gets(data,90); |
renanbmx123 | 0:20506ffee09a | 20 | printf("%s",data); |
renanbmx123 | 0:20506ffee09a | 21 | } |
renanbmx123 | 0:20506ffee09a | 22 | } |
renanbmx123 | 0:20506ffee09a | 23 | |
renanbmx123 | 0:20506ffee09a | 24 | void GPS::set_gps_on(void){ |
renanbmx123 | 0:20506ffee09a | 25 | *_pwr_pin = 1; |
renanbmx123 | 0:20506ffee09a | 26 | } |
renanbmx123 | 0:20506ffee09a | 27 | |
renanbmx123 | 0:20506ffee09a | 28 | void GPS::set_gps_off(void){ |
renanbmx123 | 0:20506ffee09a | 29 | *_pwr_pin = 0; |
renanbmx123 | 0:20506ffee09a | 30 | } |
renanbmx123 | 0:20506ffee09a | 31 | |
renanbmx123 | 0:20506ffee09a | 32 | int GPS::data_availiable(float* _lat, float* _lon, float* _alt, float* _tFix, float* _speed, char* NS, char* EW, int* _date, char* Ualt){ |
renanbmx123 | 0:20506ffee09a | 33 | // parse string. |
renanbmx123 | 0:20506ffee09a | 34 | if(data[0] == '$'){ |
renanbmx123 | 0:20506ffee09a | 35 | if(strncmp(data, "$GPRMC", 6) == 0){ |
renanbmx123 | 0:20506ffee09a | 36 | sscanf(data, "$GPRMC,%f,%c,%f,%c,%f,%c,%f,,%d", &tFix, &status, &lat, &NorthSouth, &lon, &EastWest, &speed, &date); |
renanbmx123 | 0:20506ffee09a | 37 | printf("date:%d\n",date); |
renanbmx123 | 0:20506ffee09a | 38 | *_lat = lat; |
renanbmx123 | 0:20506ffee09a | 39 | * _lon = lon; |
renanbmx123 | 0:20506ffee09a | 40 | *_tFix = tFix; |
renanbmx123 | 0:20506ffee09a | 41 | *_speed = speed; |
renanbmx123 | 0:20506ffee09a | 42 | *NS = NorthSouth; |
renanbmx123 | 0:20506ffee09a | 43 | *EW = EastWest; |
renanbmx123 | 0:20506ffee09a | 44 | *_date = date; |
renanbmx123 | 0:20506ffee09a | 45 | |
renanbmx123 | 0:20506ffee09a | 46 | }else if (!strncmp(data, GPGSA, 6)){ |
renanbmx123 | 0:20506ffee09a | 47 | sscanf(data, "$GPSGA,%c,%d,%d,%d,,,,,,,,,,,,%f,%f,%f", &mode[0], &mode[1], &sat[0], &sat[1], &pdop, &hdop, &vdop); |
renanbmx123 | 0:20506ffee09a | 48 | //printf("hdop:%f\n",hdop); |
renanbmx123 | 0:20506ffee09a | 49 | |
renanbmx123 | 0:20506ffee09a | 50 | |
renanbmx123 | 0:20506ffee09a | 51 | }else if(!strncmp(data, GPGGA, 6)){ |
renanbmx123 | 0:20506ffee09a | 52 | sscanf(data, "$GPGGA,%f,%f,%c,%f,%c,%d,%d,%f,,%f,%c", &tFix, &lat, &NorthSouth, &lon, &EastWest, &fq, &nst, &hdop, &alt, &unit); |
renanbmx123 | 0:20506ffee09a | 53 | //printf("tfix:%f\n",tFix); |
renanbmx123 | 0:20506ffee09a | 54 | *_alt = alt; |
renanbmx123 | 0:20506ffee09a | 55 | * _lon = lon; |
renanbmx123 | 0:20506ffee09a | 56 | *_alt = alt; |
renanbmx123 | 0:20506ffee09a | 57 | *NS = NorthSouth; |
renanbmx123 | 0:20506ffee09a | 58 | *EW = EastWest; |
renanbmx123 | 0:20506ffee09a | 59 | *_tFix = tFix; |
renanbmx123 | 0:20506ffee09a | 60 | |
renanbmx123 | 0:20506ffee09a | 61 | }else if(!strncmp(data, GPGLL, 6)){ |
renanbmx123 | 0:20506ffee09a | 62 | sscanf(data, "$GPGLL,%f,%c,%f,%c,%f", &lat, &NorthSouth, &lon, &EastWest, &tFix); |
renanbmx123 | 0:20506ffee09a | 63 | //printf("lat:%f\n",lat); |
renanbmx123 | 0:20506ffee09a | 64 | *_lat = lat; |
renanbmx123 | 0:20506ffee09a | 65 | * _lon = lon; |
renanbmx123 | 0:20506ffee09a | 66 | *NS = NorthSouth; |
renanbmx123 | 0:20506ffee09a | 67 | *EW = EastWest; |
renanbmx123 | 0:20506ffee09a | 68 | *_tFix = tFix; |
renanbmx123 | 0:20506ffee09a | 69 | } |
renanbmx123 | 0:20506ffee09a | 70 | data[0] = 0; |
renanbmx123 | 0:20506ffee09a | 71 | return 1; |
renanbmx123 | 0:20506ffee09a | 72 | }else |
renanbmx123 | 0:20506ffee09a | 73 | return 0; |
renanbmx123 | 0:20506ffee09a | 74 | } |
renanbmx123 | 0:20506ffee09a | 75 | |
renanbmx123 | 0:20506ffee09a | 76 | void GPS::int_mng(int value){ |
renanbmx123 | 0:20506ffee09a | 77 | int_ctrl = value; |
renanbmx123 | 0:20506ffee09a | 78 | } |