new Xadow GPS module
Dependents: xadow_smartstrap_for_pebble Avnet_ATT_Cellular_IOT Xadow-M0_Xadow-OLED_Accelerometer
XadowGPS.cpp@0:0cbe7e15999a, 2015-11-04 (annotated)
- Committer:
- KillingJacky
- Date:
- Wed Nov 04 09:50:28 2015 +0000
- Revision:
- 0:0cbe7e15999a
- Child:
- 1:97f0865ea131
init commit
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
KillingJacky | 0:0cbe7e15999a | 1 | |
KillingJacky | 0:0cbe7e15999a | 2 | |
KillingJacky | 0:0cbe7e15999a | 3 | #include "mbed.h" |
KillingJacky | 0:0cbe7e15999a | 4 | #include "XadowGPS.h" |
KillingJacky | 0:0cbe7e15999a | 5 | |
KillingJacky | 0:0cbe7e15999a | 6 | |
KillingJacky | 0:0cbe7e15999a | 7 | |
KillingJacky | 0:0cbe7e15999a | 8 | unsigned char gps_utc_date_time[GPS_UTC_DATE_TIME_SIZE] = {0}; |
KillingJacky | 0:0cbe7e15999a | 9 | char cmd[2]; |
KillingJacky | 0:0cbe7e15999a | 10 | |
KillingJacky | 0:0cbe7e15999a | 11 | extern I2C i2c; |
KillingJacky | 0:0cbe7e15999a | 12 | |
KillingJacky | 0:0cbe7e15999a | 13 | |
KillingJacky | 0:0cbe7e15999a | 14 | unsigned char gps_check_online(void) |
KillingJacky | 0:0cbe7e15999a | 15 | { |
KillingJacky | 0:0cbe7e15999a | 16 | unsigned char data[GPS_SCAN_SIZE+2]; |
KillingJacky | 0:0cbe7e15999a | 17 | unsigned char i; |
KillingJacky | 0:0cbe7e15999a | 18 | |
KillingJacky | 0:0cbe7e15999a | 19 | //dlc_i2c_configure(GPS_DEVICE_ADDR, 100); |
KillingJacky | 0:0cbe7e15999a | 20 | |
KillingJacky | 0:0cbe7e15999a | 21 | //dlc_i2c_send_byte(GPS_SCAN_ID); |
KillingJacky | 0:0cbe7e15999a | 22 | cmd[0] = GPS_SCAN_ID; |
KillingJacky | 0:0cbe7e15999a | 23 | i2c.write(GPS_DEVICE_ADDR, cmd, 1); |
KillingJacky | 0:0cbe7e15999a | 24 | |
KillingJacky | 0:0cbe7e15999a | 25 | for(i=0;i<(GPS_SCAN_SIZE+2);i++) |
KillingJacky | 0:0cbe7e15999a | 26 | { |
KillingJacky | 0:0cbe7e15999a | 27 | //data[i] = dlc_i2c_receive_byte(); |
KillingJacky | 0:0cbe7e15999a | 28 | } |
KillingJacky | 0:0cbe7e15999a | 29 | i2c.read(GPS_DEVICE_ADDR, (char *)data, GPS_SCAN_SIZE+2); |
KillingJacky | 0:0cbe7e15999a | 30 | |
KillingJacky | 0:0cbe7e15999a | 31 | if(data[5] == GPS_DEVICE_ADDR)return 1; |
KillingJacky | 0:0cbe7e15999a | 32 | else return 0; |
KillingJacky | 0:0cbe7e15999a | 33 | } |
KillingJacky | 0:0cbe7e15999a | 34 | /* |
KillingJacky | 0:0cbe7e15999a | 35 | unsigned char* gps_get_utc_date_time(void) |
KillingJacky | 0:0cbe7e15999a | 36 | { |
KillingJacky | 0:0cbe7e15999a | 37 | unsigned char data[GPS_UTC_DATE_TIME_SIZE+2]; |
KillingJacky | 0:0cbe7e15999a | 38 | unsigned char i; |
KillingJacky | 0:0cbe7e15999a | 39 | |
KillingJacky | 0:0cbe7e15999a | 40 | dlc_i2c_configure(GPS_DEVICE_ADDR, 100); |
KillingJacky | 0:0cbe7e15999a | 41 | |
KillingJacky | 0:0cbe7e15999a | 42 | dlc_i2c_send_byte(GPS_UTC_DATE_TIME_ID); |
KillingJacky | 0:0cbe7e15999a | 43 | |
KillingJacky | 0:0cbe7e15999a | 44 | for(i=0;i<(GPS_UTC_DATE_TIME_SIZE+2);i++) |
KillingJacky | 0:0cbe7e15999a | 45 | { |
KillingJacky | 0:0cbe7e15999a | 46 | data[i] = dlc_i2c_receive_byte(); |
KillingJacky | 0:0cbe7e15999a | 47 | } |
KillingJacky | 0:0cbe7e15999a | 48 | |
KillingJacky | 0:0cbe7e15999a | 49 | for(i=0;i<GPS_UTC_DATE_TIME_SIZE;i++) |
KillingJacky | 0:0cbe7e15999a | 50 | gps_utc_date_time[i] = data[i+2]; |
KillingJacky | 0:0cbe7e15999a | 51 | |
KillingJacky | 0:0cbe7e15999a | 52 | return gps_utc_date_time; |
KillingJacky | 0:0cbe7e15999a | 53 | } |
KillingJacky | 0:0cbe7e15999a | 54 | |
KillingJacky | 0:0cbe7e15999a | 55 | unsigned char gps_get_status(void) |
KillingJacky | 0:0cbe7e15999a | 56 | { |
KillingJacky | 0:0cbe7e15999a | 57 | unsigned char data[GPS_STATUS_SIZE+2]; |
KillingJacky | 0:0cbe7e15999a | 58 | unsigned char i; |
KillingJacky | 0:0cbe7e15999a | 59 | |
KillingJacky | 0:0cbe7e15999a | 60 | dlc_i2c_configure(GPS_DEVICE_ADDR, 100); |
KillingJacky | 0:0cbe7e15999a | 61 | |
KillingJacky | 0:0cbe7e15999a | 62 | dlc_i2c_send_byte(GPS_STATUS_ID); |
KillingJacky | 0:0cbe7e15999a | 63 | for(i=0;i<(GPS_STATUS_SIZE+2);i++) |
KillingJacky | 0:0cbe7e15999a | 64 | { |
KillingJacky | 0:0cbe7e15999a | 65 | data[i] = dlc_i2c_receive_byte(); |
KillingJacky | 0:0cbe7e15999a | 66 | } |
KillingJacky | 0:0cbe7e15999a | 67 | |
KillingJacky | 0:0cbe7e15999a | 68 | return data[2]; |
KillingJacky | 0:0cbe7e15999a | 69 | } |
KillingJacky | 0:0cbe7e15999a | 70 | |
KillingJacky | 0:0cbe7e15999a | 71 | float gps_get_latitude(void) |
KillingJacky | 0:0cbe7e15999a | 72 | { |
KillingJacky | 0:0cbe7e15999a | 73 | unsigned char data[GPS_LATITUDE_SIZE+2]; |
KillingJacky | 0:0cbe7e15999a | 74 | unsigned char i; |
KillingJacky | 0:0cbe7e15999a | 75 | |
KillingJacky | 0:0cbe7e15999a | 76 | dlc_i2c_configure(GPS_DEVICE_ADDR, 100); |
KillingJacky | 0:0cbe7e15999a | 77 | |
KillingJacky | 0:0cbe7e15999a | 78 | dlc_i2c_send_byte(GPS_LATITUDE_ID); |
KillingJacky | 0:0cbe7e15999a | 79 | for(i=0;i<(GPS_LATITUDE_SIZE+2);i++) |
KillingJacky | 0:0cbe7e15999a | 80 | { |
KillingJacky | 0:0cbe7e15999a | 81 | data[i] = dlc_i2c_receive_byte(); |
KillingJacky | 0:0cbe7e15999a | 82 | } |
KillingJacky | 0:0cbe7e15999a | 83 | |
KillingJacky | 0:0cbe7e15999a | 84 | return atof(&data[2]); |
KillingJacky | 0:0cbe7e15999a | 85 | } |
KillingJacky | 0:0cbe7e15999a | 86 | |
KillingJacky | 0:0cbe7e15999a | 87 | unsigned char gps_get_ns(void) |
KillingJacky | 0:0cbe7e15999a | 88 | { |
KillingJacky | 0:0cbe7e15999a | 89 | unsigned char data[GPS_NS_SIZE+2]; |
KillingJacky | 0:0cbe7e15999a | 90 | unsigned char i; |
KillingJacky | 0:0cbe7e15999a | 91 | |
KillingJacky | 0:0cbe7e15999a | 92 | dlc_i2c_configure(GPS_DEVICE_ADDR, 100); |
KillingJacky | 0:0cbe7e15999a | 93 | |
KillingJacky | 0:0cbe7e15999a | 94 | dlc_i2c_send_byte(GPS_NS_ID); |
KillingJacky | 0:0cbe7e15999a | 95 | for(i=0;i<(GPS_NS_SIZE+2);i++) |
KillingJacky | 0:0cbe7e15999a | 96 | { |
KillingJacky | 0:0cbe7e15999a | 97 | data[i] = dlc_i2c_receive_byte(); |
KillingJacky | 0:0cbe7e15999a | 98 | } |
KillingJacky | 0:0cbe7e15999a | 99 | |
KillingJacky | 0:0cbe7e15999a | 100 | if(data[2] == 'N' || data[2] == 'S')return data[2]; |
KillingJacky | 0:0cbe7e15999a | 101 | else return data[2] = '-'; |
KillingJacky | 0:0cbe7e15999a | 102 | |
KillingJacky | 0:0cbe7e15999a | 103 | } |
KillingJacky | 0:0cbe7e15999a | 104 | |
KillingJacky | 0:0cbe7e15999a | 105 | float gps_get_longitude(void) |
KillingJacky | 0:0cbe7e15999a | 106 | { |
KillingJacky | 0:0cbe7e15999a | 107 | unsigned char data[GPS_LONGITUDE_SIZE+2]; |
KillingJacky | 0:0cbe7e15999a | 108 | unsigned char i; |
KillingJacky | 0:0cbe7e15999a | 109 | |
KillingJacky | 0:0cbe7e15999a | 110 | dlc_i2c_configure(GPS_DEVICE_ADDR, 100); |
KillingJacky | 0:0cbe7e15999a | 111 | |
KillingJacky | 0:0cbe7e15999a | 112 | dlc_i2c_send_byte(GPS_LONGITUDE_ID); |
KillingJacky | 0:0cbe7e15999a | 113 | for(i=0;i<(GPS_LONGITUDE_SIZE+2);i++) |
KillingJacky | 0:0cbe7e15999a | 114 | { |
KillingJacky | 0:0cbe7e15999a | 115 | data[i] = dlc_i2c_receive_byte(); |
KillingJacky | 0:0cbe7e15999a | 116 | } |
KillingJacky | 0:0cbe7e15999a | 117 | |
KillingJacky | 0:0cbe7e15999a | 118 | return atof(&data[2]); |
KillingJacky | 0:0cbe7e15999a | 119 | } |
KillingJacky | 0:0cbe7e15999a | 120 | |
KillingJacky | 0:0cbe7e15999a | 121 | unsigned char gps_get_ew(void) |
KillingJacky | 0:0cbe7e15999a | 122 | { |
KillingJacky | 0:0cbe7e15999a | 123 | unsigned char data[GPS_EW_SIZE+2]; |
KillingJacky | 0:0cbe7e15999a | 124 | unsigned char i; |
KillingJacky | 0:0cbe7e15999a | 125 | |
KillingJacky | 0:0cbe7e15999a | 126 | dlc_i2c_configure(GPS_DEVICE_ADDR, 100); |
KillingJacky | 0:0cbe7e15999a | 127 | |
KillingJacky | 0:0cbe7e15999a | 128 | dlc_i2c_send_byte(GPS_EW_ID); |
KillingJacky | 0:0cbe7e15999a | 129 | for(i=0;i<(GPS_EW_SIZE+2);i++) |
KillingJacky | 0:0cbe7e15999a | 130 | { |
KillingJacky | 0:0cbe7e15999a | 131 | data[i] = dlc_i2c_receive_byte(); |
KillingJacky | 0:0cbe7e15999a | 132 | } |
KillingJacky | 0:0cbe7e15999a | 133 | |
KillingJacky | 0:0cbe7e15999a | 134 | if(data[2] == 'E' || data[2] == 'W')return data[2]; |
KillingJacky | 0:0cbe7e15999a | 135 | else return data[2] = '-'; |
KillingJacky | 0:0cbe7e15999a | 136 | } |
KillingJacky | 0:0cbe7e15999a | 137 | |
KillingJacky | 0:0cbe7e15999a | 138 | float gps_get_speed(void) |
KillingJacky | 0:0cbe7e15999a | 139 | { |
KillingJacky | 0:0cbe7e15999a | 140 | unsigned char data[GPS_SPEED_SIZE+2]; |
KillingJacky | 0:0cbe7e15999a | 141 | unsigned char i; |
KillingJacky | 0:0cbe7e15999a | 142 | |
KillingJacky | 0:0cbe7e15999a | 143 | dlc_i2c_configure(GPS_DEVICE_ADDR, 100); |
KillingJacky | 0:0cbe7e15999a | 144 | |
KillingJacky | 0:0cbe7e15999a | 145 | dlc_i2c_send_byte(GPS_SPEED_ID); |
KillingJacky | 0:0cbe7e15999a | 146 | for(i=0;i<(GPS_SPEED_SIZE+2);i++) |
KillingJacky | 0:0cbe7e15999a | 147 | { |
KillingJacky | 0:0cbe7e15999a | 148 | data[i] = dlc_i2c_receive_byte(); |
KillingJacky | 0:0cbe7e15999a | 149 | } |
KillingJacky | 0:0cbe7e15999a | 150 | |
KillingJacky | 0:0cbe7e15999a | 151 | return atof(&data[2]); |
KillingJacky | 0:0cbe7e15999a | 152 | } |
KillingJacky | 0:0cbe7e15999a | 153 | |
KillingJacky | 0:0cbe7e15999a | 154 | float gps_get_course(void) |
KillingJacky | 0:0cbe7e15999a | 155 | { |
KillingJacky | 0:0cbe7e15999a | 156 | unsigned char data[GPS_COURSE_SIZE+2]; |
KillingJacky | 0:0cbe7e15999a | 157 | unsigned char i; |
KillingJacky | 0:0cbe7e15999a | 158 | |
KillingJacky | 0:0cbe7e15999a | 159 | dlc_i2c_configure(GPS_DEVICE_ADDR, 100); |
KillingJacky | 0:0cbe7e15999a | 160 | |
KillingJacky | 0:0cbe7e15999a | 161 | dlc_i2c_send_byte(GPS_COURSE_ID); |
KillingJacky | 0:0cbe7e15999a | 162 | for(i=0;i<(GPS_COURSE_SIZE+2);i++) |
KillingJacky | 0:0cbe7e15999a | 163 | { |
KillingJacky | 0:0cbe7e15999a | 164 | data[i] = dlc_i2c_receive_byte(); |
KillingJacky | 0:0cbe7e15999a | 165 | } |
KillingJacky | 0:0cbe7e15999a | 166 | |
KillingJacky | 0:0cbe7e15999a | 167 | return atof(&data[2]); |
KillingJacky | 0:0cbe7e15999a | 168 | } |
KillingJacky | 0:0cbe7e15999a | 169 | |
KillingJacky | 0:0cbe7e15999a | 170 | unsigned char gps_get_position_fix(void) |
KillingJacky | 0:0cbe7e15999a | 171 | { |
KillingJacky | 0:0cbe7e15999a | 172 | unsigned char data[GPS_POSITION_FIX_SIZE+2]; |
KillingJacky | 0:0cbe7e15999a | 173 | unsigned char i; |
KillingJacky | 0:0cbe7e15999a | 174 | |
KillingJacky | 0:0cbe7e15999a | 175 | dlc_i2c_configure(GPS_DEVICE_ADDR, 100); |
KillingJacky | 0:0cbe7e15999a | 176 | |
KillingJacky | 0:0cbe7e15999a | 177 | dlc_i2c_send_byte(GPS_POSITION_FIX_ID); |
KillingJacky | 0:0cbe7e15999a | 178 | for(i=0;i<(GPS_POSITION_FIX_SIZE+2);i++) |
KillingJacky | 0:0cbe7e15999a | 179 | { |
KillingJacky | 0:0cbe7e15999a | 180 | data[i] = dlc_i2c_receive_byte(); |
KillingJacky | 0:0cbe7e15999a | 181 | } |
KillingJacky | 0:0cbe7e15999a | 182 | |
KillingJacky | 0:0cbe7e15999a | 183 | return data[2]; |
KillingJacky | 0:0cbe7e15999a | 184 | } |
KillingJacky | 0:0cbe7e15999a | 185 | |
KillingJacky | 0:0cbe7e15999a | 186 | unsigned char gps_get_sate_used(void) |
KillingJacky | 0:0cbe7e15999a | 187 | { |
KillingJacky | 0:0cbe7e15999a | 188 | unsigned char data[GPS_SATE_USED_SIZE+2]; |
KillingJacky | 0:0cbe7e15999a | 189 | unsigned char i; |
KillingJacky | 0:0cbe7e15999a | 190 | unsigned char value; |
KillingJacky | 0:0cbe7e15999a | 191 | |
KillingJacky | 0:0cbe7e15999a | 192 | dlc_i2c_configure(GPS_DEVICE_ADDR, 100); |
KillingJacky | 0:0cbe7e15999a | 193 | |
KillingJacky | 0:0cbe7e15999a | 194 | dlc_i2c_send_byte(GPS_SATE_USED_ID); |
KillingJacky | 0:0cbe7e15999a | 195 | for(i=0;i<(GPS_SATE_USED_SIZE+2);i++) |
KillingJacky | 0:0cbe7e15999a | 196 | { |
KillingJacky | 0:0cbe7e15999a | 197 | data[i] = dlc_i2c_receive_byte(); |
KillingJacky | 0:0cbe7e15999a | 198 | } |
KillingJacky | 0:0cbe7e15999a | 199 | |
KillingJacky | 0:0cbe7e15999a | 200 | if(data[3] >= '0')value = (data[3] - '0') * 10; |
KillingJacky | 0:0cbe7e15999a | 201 | else value = 0; |
KillingJacky | 0:0cbe7e15999a | 202 | if(data[2] >= '0')value += (data[2] - '0'); |
KillingJacky | 0:0cbe7e15999a | 203 | else value += 0; |
KillingJacky | 0:0cbe7e15999a | 204 | |
KillingJacky | 0:0cbe7e15999a | 205 | return value; |
KillingJacky | 0:0cbe7e15999a | 206 | } |
KillingJacky | 0:0cbe7e15999a | 207 | |
KillingJacky | 0:0cbe7e15999a | 208 | float gps_get_altitude(void) |
KillingJacky | 0:0cbe7e15999a | 209 | { |
KillingJacky | 0:0cbe7e15999a | 210 | unsigned char data[GPS_ALTITUDE_SIZE+2]; |
KillingJacky | 0:0cbe7e15999a | 211 | unsigned char i; |
KillingJacky | 0:0cbe7e15999a | 212 | |
KillingJacky | 0:0cbe7e15999a | 213 | dlc_i2c_configure(GPS_DEVICE_ADDR, 100); |
KillingJacky | 0:0cbe7e15999a | 214 | |
KillingJacky | 0:0cbe7e15999a | 215 | dlc_i2c_send_byte(GPS_ALTITUDE_ID); |
KillingJacky | 0:0cbe7e15999a | 216 | for(i=0;i<(GPS_ALTITUDE_SIZE+2);i++) |
KillingJacky | 0:0cbe7e15999a | 217 | { |
KillingJacky | 0:0cbe7e15999a | 218 | data[i] = dlc_i2c_receive_byte(); |
KillingJacky | 0:0cbe7e15999a | 219 | } |
KillingJacky | 0:0cbe7e15999a | 220 | |
KillingJacky | 0:0cbe7e15999a | 221 | return atof(&data[2]); |
KillingJacky | 0:0cbe7e15999a | 222 | } |
KillingJacky | 0:0cbe7e15999a | 223 | |
KillingJacky | 0:0cbe7e15999a | 224 | unsigned char gps_get_mode(void) |
KillingJacky | 0:0cbe7e15999a | 225 | { |
KillingJacky | 0:0cbe7e15999a | 226 | unsigned char data[GPS_MODE_SIZE+2]; |
KillingJacky | 0:0cbe7e15999a | 227 | unsigned char i; |
KillingJacky | 0:0cbe7e15999a | 228 | |
KillingJacky | 0:0cbe7e15999a | 229 | dlc_i2c_configure(GPS_DEVICE_ADDR, 100); |
KillingJacky | 0:0cbe7e15999a | 230 | |
KillingJacky | 0:0cbe7e15999a | 231 | dlc_i2c_send_byte(GPS_MODE_ID); |
KillingJacky | 0:0cbe7e15999a | 232 | for(i=0;i<(GPS_MODE_SIZE+2);i++) |
KillingJacky | 0:0cbe7e15999a | 233 | { |
KillingJacky | 0:0cbe7e15999a | 234 | data[i] = dlc_i2c_receive_byte(); |
KillingJacky | 0:0cbe7e15999a | 235 | } |
KillingJacky | 0:0cbe7e15999a | 236 | |
KillingJacky | 0:0cbe7e15999a | 237 | return data[2]; |
KillingJacky | 0:0cbe7e15999a | 238 | } |
KillingJacky | 0:0cbe7e15999a | 239 | |
KillingJacky | 0:0cbe7e15999a | 240 | unsigned char gps_get_mode2(void) |
KillingJacky | 0:0cbe7e15999a | 241 | { |
KillingJacky | 0:0cbe7e15999a | 242 | unsigned char data[GPS_MODE2_SIZE+2]; |
KillingJacky | 0:0cbe7e15999a | 243 | unsigned char i; |
KillingJacky | 0:0cbe7e15999a | 244 | |
KillingJacky | 0:0cbe7e15999a | 245 | dlc_i2c_configure(GPS_DEVICE_ADDR, 100); |
KillingJacky | 0:0cbe7e15999a | 246 | |
KillingJacky | 0:0cbe7e15999a | 247 | dlc_i2c_send_byte(GPS_MODE2_ID); |
KillingJacky | 0:0cbe7e15999a | 248 | for(i=0;i<(GPS_MODE2_SIZE+2);i++) |
KillingJacky | 0:0cbe7e15999a | 249 | { |
KillingJacky | 0:0cbe7e15999a | 250 | data[i] = dlc_i2c_receive_byte(); |
KillingJacky | 0:0cbe7e15999a | 251 | } |
KillingJacky | 0:0cbe7e15999a | 252 | |
KillingJacky | 0:0cbe7e15999a | 253 | return data[2]; |
KillingJacky | 0:0cbe7e15999a | 254 | } |
KillingJacky | 0:0cbe7e15999a | 255 | */ |