new Xadow GPS module
Dependents: xadow_smartstrap_for_pebble Avnet_ATT_Cellular_IOT Xadow-M0_Xadow-OLED_Accelerometer
Revision 1:97f0865ea131, committed 2015-11-04
- Comitter:
- KillingJacky
- Date:
- Wed Nov 04 10:01:05 2015 +0000
- Parent:
- 0:0cbe7e15999a
- Child:
- 2:cf4d22190de4
- Commit message:
- init commit
Changed in this revision
XadowGPS.cpp | Show annotated file Show diff for this revision Revisions of this file |
XadowGPS.h | Show annotated file Show diff for this revision Revisions of this file |
--- a/XadowGPS.cpp Wed Nov 04 09:50:28 2015 +0000 +++ b/XadowGPS.cpp Wed Nov 04 10:01:05 2015 +0000 @@ -1,14 +1,16 @@ - +#include <stdlib.h> #include "mbed.h" #include "XadowGPS.h" +#include "USBSerial.h" unsigned char gps_utc_date_time[GPS_UTC_DATE_TIME_SIZE] = {0}; -char cmd[2]; +static char cmd[2]; extern I2C i2c; +extern USBSerial dbg_serial; unsigned char gps_check_online(void) @@ -17,37 +19,38 @@ unsigned char i; //dlc_i2c_configure(GPS_DEVICE_ADDR, 100); - //dlc_i2c_send_byte(GPS_SCAN_ID); cmd[0] = GPS_SCAN_ID; i2c.write(GPS_DEVICE_ADDR, cmd, 1); for(i=0;i<(GPS_SCAN_SIZE+2);i++) { - //data[i] = dlc_i2c_receive_byte(); + i2c.read(GPS_DEVICE_ADDR, (char *)&data[i], 1); //the gps module's i2c supports only 1 byte read/write per burst } - i2c.read(GPS_DEVICE_ADDR, (char *)data, GPS_SCAN_SIZE+2); - if(data[5] == GPS_DEVICE_ADDR)return 1; + if(data[5] == (GPS_DEVICE_ADDR>>1))return 1; else return 0; } -/* + unsigned char* gps_get_utc_date_time(void) { unsigned char data[GPS_UTC_DATE_TIME_SIZE+2]; unsigned char i; - dlc_i2c_configure(GPS_DEVICE_ADDR, 100); - - dlc_i2c_send_byte(GPS_UTC_DATE_TIME_ID); + //dlc_i2c_configure(GPS_DEVICE_ADDR, 100); + //dlc_i2c_send_byte(GPS_UTC_DATE_TIME_ID); + + cmd[0] = GPS_UTC_DATE_TIME_ID; + i2c.write(GPS_DEVICE_ADDR, cmd, 1); for(i=0;i<(GPS_UTC_DATE_TIME_SIZE+2);i++) { - data[i] = dlc_i2c_receive_byte(); + //data[i] = dlc_i2c_receive_byte(); + i2c.read(GPS_DEVICE_ADDR, (char *)&data[i], 1); //the gps module's i2c supports only 1 byte read/write per burst } for(i=0;i<GPS_UTC_DATE_TIME_SIZE;i++) - gps_utc_date_time[i] = data[i+2]; + gps_utc_date_time[i] = data[i+2]; return gps_utc_date_time; } @@ -57,12 +60,16 @@ unsigned char data[GPS_STATUS_SIZE+2]; unsigned char i; - dlc_i2c_configure(GPS_DEVICE_ADDR, 100); + //dlc_i2c_configure(GPS_DEVICE_ADDR, 100); + //dlc_i2c_send_byte(GPS_STATUS_ID); + + cmd[0] = GPS_STATUS_ID; + i2c.write(GPS_DEVICE_ADDR, cmd, 1); - dlc_i2c_send_byte(GPS_STATUS_ID); for(i=0;i<(GPS_STATUS_SIZE+2);i++) { - data[i] = dlc_i2c_receive_byte(); + //data[i] = dlc_i2c_receive_byte(); + i2c.read(GPS_DEVICE_ADDR, (char *)&data[i], 1); //the gps module's i2c supports only 1 byte read/write per burst } return data[2]; @@ -73,15 +80,17 @@ unsigned char data[GPS_LATITUDE_SIZE+2]; unsigned char i; - dlc_i2c_configure(GPS_DEVICE_ADDR, 100); - - dlc_i2c_send_byte(GPS_LATITUDE_ID); + //dlc_i2c_configure(GPS_DEVICE_ADDR, 100); + //dlc_i2c_send_byte(GPS_LATITUDE_ID); + cmd[0] = GPS_LATITUDE_ID; + i2c.write(GPS_DEVICE_ADDR, cmd, 1); + for(i=0;i<(GPS_LATITUDE_SIZE+2);i++) { - data[i] = dlc_i2c_receive_byte(); + i2c.read(GPS_DEVICE_ADDR, (char *)&data[i], 1); //the gps module's i2c supports only 1 byte read/write per burst } - return atof(&data[2]); + return atof((const char *)&data[2]); } unsigned char gps_get_ns(void) @@ -89,12 +98,14 @@ unsigned char data[GPS_NS_SIZE+2]; unsigned char i; - dlc_i2c_configure(GPS_DEVICE_ADDR, 100); + //dlc_i2c_configure(GPS_DEVICE_ADDR, 100); + //dlc_i2c_send_byte(GPS_NS_ID); + cmd[0] = GPS_NS_ID; + i2c.write(GPS_DEVICE_ADDR, cmd, 1); - dlc_i2c_send_byte(GPS_NS_ID); for(i=0;i<(GPS_NS_SIZE+2);i++) { - data[i] = dlc_i2c_receive_byte(); + i2c.read(GPS_DEVICE_ADDR, (char *)&data[i], 1); //the gps module's i2c supports only 1 byte read/write per burst } if(data[2] == 'N' || data[2] == 'S')return data[2]; @@ -107,15 +118,17 @@ unsigned char data[GPS_LONGITUDE_SIZE+2]; unsigned char i; - dlc_i2c_configure(GPS_DEVICE_ADDR, 100); + //dlc_i2c_configure(GPS_DEVICE_ADDR, 100); + //dlc_i2c_send_byte(GPS_LONGITUDE_ID); + cmd[0] = GPS_LONGITUDE_ID; + i2c.write(GPS_DEVICE_ADDR, cmd, 1); - dlc_i2c_send_byte(GPS_LONGITUDE_ID); for(i=0;i<(GPS_LONGITUDE_SIZE+2);i++) { - data[i] = dlc_i2c_receive_byte(); + i2c.read(GPS_DEVICE_ADDR, (char *)&data[i], 1); //the gps module's i2c supports only 1 byte read/write per burst } - return atof(&data[2]); + return atof((const char *)&data[2]); } unsigned char gps_get_ew(void) @@ -123,12 +136,14 @@ unsigned char data[GPS_EW_SIZE+2]; unsigned char i; - dlc_i2c_configure(GPS_DEVICE_ADDR, 100); + //dlc_i2c_configure(GPS_DEVICE_ADDR, 100); + //dlc_i2c_send_byte(GPS_EW_ID); + cmd[0] = GPS_EW_ID; + i2c.write(GPS_DEVICE_ADDR, cmd, 1); - dlc_i2c_send_byte(GPS_EW_ID); for(i=0;i<(GPS_EW_SIZE+2);i++) { - data[i] = dlc_i2c_receive_byte(); + i2c.read(GPS_DEVICE_ADDR, (char *)&data[i], 1); //the gps module's i2c supports only 1 byte read/write per burst } if(data[2] == 'E' || data[2] == 'W')return data[2]; @@ -140,15 +155,17 @@ unsigned char data[GPS_SPEED_SIZE+2]; unsigned char i; - dlc_i2c_configure(GPS_DEVICE_ADDR, 100); + //dlc_i2c_configure(GPS_DEVICE_ADDR, 100); + //dlc_i2c_send_byte(GPS_SPEED_ID); + cmd[0] = GPS_SPEED_ID; + i2c.write(GPS_DEVICE_ADDR, cmd, 1); - dlc_i2c_send_byte(GPS_SPEED_ID); for(i=0;i<(GPS_SPEED_SIZE+2);i++) { - data[i] = dlc_i2c_receive_byte(); + i2c.read(GPS_DEVICE_ADDR, (char *)&data[i], 1); //the gps module's i2c supports only 1 byte read/write per burst } - return atof(&data[2]); + return atof((const char *)&data[2]); } float gps_get_course(void) @@ -156,15 +173,17 @@ unsigned char data[GPS_COURSE_SIZE+2]; unsigned char i; - dlc_i2c_configure(GPS_DEVICE_ADDR, 100); + //dlc_i2c_configure(GPS_DEVICE_ADDR, 100); + //dlc_i2c_send_byte(GPS_COURSE_ID); + cmd[0] = GPS_COURSE_ID; + i2c.write(GPS_DEVICE_ADDR, cmd, 1); - dlc_i2c_send_byte(GPS_COURSE_ID); for(i=0;i<(GPS_COURSE_SIZE+2);i++) { - data[i] = dlc_i2c_receive_byte(); + i2c.read(GPS_DEVICE_ADDR, (char *)&data[i], 1); //the gps module's i2c supports only 1 byte read/write per burst } - return atof(&data[2]); + return atof((const char *)&data[2]); } unsigned char gps_get_position_fix(void) @@ -172,15 +191,17 @@ unsigned char data[GPS_POSITION_FIX_SIZE+2]; unsigned char i; - dlc_i2c_configure(GPS_DEVICE_ADDR, 100); + //dlc_i2c_configure(GPS_DEVICE_ADDR, 100); + //dlc_i2c_send_byte(GPS_POSITION_FIX_ID); + cmd[0] = GPS_POSITION_FIX_ID; + i2c.write(GPS_DEVICE_ADDR, cmd, 1); - dlc_i2c_send_byte(GPS_POSITION_FIX_ID); for(i=0;i<(GPS_POSITION_FIX_SIZE+2);i++) { - data[i] = dlc_i2c_receive_byte(); + i2c.read(GPS_DEVICE_ADDR, (char *)&data[i], 1); //the gps module's i2c supports only 1 byte read/write per burst } - return data[2]; + return data[2] - '0'; } unsigned char gps_get_sate_used(void) @@ -189,17 +210,19 @@ unsigned char i; unsigned char value; - dlc_i2c_configure(GPS_DEVICE_ADDR, 100); + //dlc_i2c_configure(GPS_DEVICE_ADDR, 100); + //dlc_i2c_send_byte(GPS_SATE_USED_ID); + cmd[0] = GPS_SATE_USED_ID; + i2c.write(GPS_DEVICE_ADDR, cmd, 1); - dlc_i2c_send_byte(GPS_SATE_USED_ID); for(i=0;i<(GPS_SATE_USED_SIZE+2);i++) { - data[i] = dlc_i2c_receive_byte(); + i2c.read(GPS_DEVICE_ADDR, (char *)&data[i], 1); //the gps module's i2c supports only 1 byte read/write per burst + //dbg_serial.printf("data[%d]: %02x ", i, data[i]); } - - if(data[3] >= '0')value = (data[3] - '0') * 10; + if(data[3] >= '0' && data[3] <= '9' )value = (data[3] - '0') * 10; else value = 0; - if(data[2] >= '0')value += (data[2] - '0'); + if(data[2] >= '0' && data[2] <= '9' )value += (data[2] - '0'); else value += 0; return value; @@ -210,28 +233,32 @@ unsigned char data[GPS_ALTITUDE_SIZE+2]; unsigned char i; - dlc_i2c_configure(GPS_DEVICE_ADDR, 100); - - dlc_i2c_send_byte(GPS_ALTITUDE_ID); + //dlc_i2c_configure(GPS_DEVICE_ADDR, 100); + //dlc_i2c_send_byte(GPS_ALTITUDE_ID); + cmd[0] = GPS_ALTITUDE_ID; + i2c.write(GPS_DEVICE_ADDR, cmd, 1); + for(i=0;i<(GPS_ALTITUDE_SIZE+2);i++) { - data[i] = dlc_i2c_receive_byte(); + i2c.read(GPS_DEVICE_ADDR, (char *)&data[i], 1); //the gps module's i2c supports only 1 byte read/write per burst } - return atof(&data[2]); + return atof((const char *)&data[2]); } -unsigned char gps_get_mode(void) +char gps_get_mode(void) { - unsigned char data[GPS_MODE_SIZE+2]; + char data[GPS_MODE_SIZE+2]; unsigned char i; - dlc_i2c_configure(GPS_DEVICE_ADDR, 100); + //dlc_i2c_configure(GPS_DEVICE_ADDR, 100); + //dlc_i2c_send_byte(GPS_MODE_ID); + cmd[0] = GPS_MODE_ID; + i2c.write(GPS_DEVICE_ADDR, cmd, 1); - dlc_i2c_send_byte(GPS_MODE_ID); for(i=0;i<(GPS_MODE_SIZE+2);i++) { - data[i] = dlc_i2c_receive_byte(); + i2c.read(GPS_DEVICE_ADDR, (char *)&data[i], 1); //the gps module's i2c supports only 1 byte read/write per burst } return data[2]; @@ -242,14 +269,15 @@ unsigned char data[GPS_MODE2_SIZE+2]; unsigned char i; - dlc_i2c_configure(GPS_DEVICE_ADDR, 100); + //dlc_i2c_configure(GPS_DEVICE_ADDR, 100); + //dlc_i2c_send_byte(GPS_MODE2_ID); + cmd[0] = GPS_MODE2_ID; + i2c.write(GPS_DEVICE_ADDR, cmd, 1); - dlc_i2c_send_byte(GPS_MODE2_ID); for(i=0;i<(GPS_MODE2_SIZE+2);i++) { - data[i] = dlc_i2c_receive_byte(); + i2c.read(GPS_DEVICE_ADDR, (char *)&data[i], 1); //the gps module's i2c supports only 1 byte read/write per burst } - return data[2]; + return data[2] - '0'; } -*/ \ No newline at end of file
--- a/XadowGPS.h Wed Nov 04 09:50:28 2015 +0000 +++ b/XadowGPS.h Wed Nov 04 10:01:05 2015 +0000 @@ -92,7 +92,7 @@ * End */ -#define GPS_DEVICE_ADDR 0x05 +#define GPS_DEVICE_ADDR (0x05<<1) #define GPS_SCAN_ID 0 // 4 bytes #define GPS_SCAN_SIZE 4 // 0,0,0,Device address @@ -162,17 +162,17 @@ unsigned char gps_get_status(void); /** - * \brief Get the altitude. + * \brief Get the latitude. * - * \return Return altitude data. The format is dd.dddddd. + * \return Return latitude data. The format is dd.dddddd. * */ float gps_get_latitude(void); /** - * \brief Get the altitude direction. + * \brief Get the latitude direction. * - * \return Return altitude direction data. The format is N/S. N is north, S is south. + * \return Return latitude direction data. The format is N/S. N is north, S is south. * */ unsigned char gps_get_ns(void); @@ -212,7 +212,8 @@ /** * \brief Get the status of position fix. * - * \return Return course data. The format is 0,1,2,6. + * \return Return the status of position fix. The format is 0,1,2,6. + * 0 - Invalid, 1 - GPS fix, 2 - DGPS fix, 6 - evaluation * */ unsigned char gps_get_position_fix(void); @@ -239,7 +240,7 @@ * \return Return mode of location. The format is A/M. A:automatic, M:manual. * */ -unsigned char gps_get_mode(void); +char gps_get_mode(void); /** * \brief Get the current status of GPS.