Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #ifndef __DGPS_H__
00013 #define __DGPS_H__
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037 #pragma systemFile
00038
00039 #ifndef __COMMON_H__
00040 #include "common.h"
00041 #endif
00042
00043 #define DGPS_I2C_ADDR 0x06
00044 #define DGPS_CMD_UTC 0x00
00045 #define DGPS_CMD_STATUS 0x01
00046 #define DGPS_CMD_LAT 0x02
00047 #define DGPS_CMD_LONG 0x04
00048 #define DGPS_CMD_VELO 0x06
00049 #define DGPS_CMD_HEAD 0x07
00050 #define DGPS_CMD_DIST 0x08
00051 #define DGPS_CMD_ANGD 0x09
00052 #define DGPS_CMD_ANGR 0x0A
00053 #define DGPS_CMD_SLAT 0x0B
00054 #define DGPS_CMD_SLONG 0x0C
00055
00056
00057 bool DGPSreadStatus(tSensors link);
00058 long DGPSreadUTC(tSensors link);
00059 long DGPSreadLatitude(tSensors link);
00060 long DGPSreadLongitude(tSensors link);
00061 int DGPSreadVelocity(tSensors link);
00062 int DGPSreadHeading(tSensors link);
00063 int DGPSreadRelHeading(tSensors link);
00064 int DGPSreadTravHeading(tSensors link);
00065 bool DGPSsetDestination(tSensors link, long latitude, long longitude);
00066 int DGPSreadDistToDestination(tSensors link);
00067
00068 tByteArray DGPS_I2CRequest;
00069 tByteArray DGPS_I2CReply;
00070
00071 long _DGPSreadRegister(tSensors link, unsigned byte command, int replysize) {
00072 memset(DGPS_I2CRequest, 0, sizeof(tByteArray));
00073
00074 DGPS_I2CRequest[0] = 2;
00075 DGPS_I2CRequest[1] = DGPS_I2C_ADDR;
00076 DGPS_I2CRequest[2] = command;
00077
00078 if (!writeI2C(link, DGPS_I2CRequest, 4))
00079 return -1;
00080
00081 if (!readI2C(link, DGPS_I2CReply, 4))
00082 return -1;
00083
00084
00085 if (replysize == 4)
00086 return (long)DGPS_I2CReply[3] + ((long)DGPS_I2CReply[2] << 8) + ((long)DGPS_I2CReply[1] << 16) + ((long)DGPS_I2CReply[0] << 24);
00087 else if (replysize == 3)
00088 return (long)DGPS_I2CReply[2] + ((long)DGPS_I2CReply[1] << 8) + ((long)DGPS_I2CReply[0] << 16);
00089 else if (replysize == 2)
00090 return (long)DGPS_I2CReply[1] + ((long)DGPS_I2CReply[0] << 8);
00091 else if (replysize == 1)
00092 return (long)DGPS_I2CReply[0];
00093
00094 return 0;
00095 }
00096
00097
00098 bool DGPSreadStatus(tSensors link) {
00099 return (_DGPSreadRegister(link, DGPS_CMD_STATUS, 1) == 1) ? true : false;
00100 }
00101
00102
00103
00104
00105
00106
00107
00108 long DGPSreadUTC(tSensors link) {
00109 return _DGPSreadRegister(link, DGPS_CMD_UTC, 4);
00110 }
00111
00112
00113
00114
00115
00116
00117
00118 long DGPSreadLatitude(tSensors link) {
00119 return _DGPSreadRegister(link, DGPS_CMD_LAT, 4);
00120 }
00121
00122
00123
00124
00125
00126
00127
00128 long DGPSreadLongitude(tSensors link) {
00129 return _DGPSreadRegister(link, DGPS_CMD_LONG, 4);
00130 }
00131
00132
00133
00134
00135
00136
00137
00138 int DGPSreadVelocity(tSensors link) {
00139 return _DGPSreadRegister(link, DGPS_CMD_VELO, 3);
00140 }
00141
00142
00143
00144
00145
00146
00147
00148 int DGPSreadHeading(tSensors link) {
00149 return _DGPSreadRegister(link, DGPS_CMD_HEAD, 2);
00150 }
00151
00152
00153
00154
00155
00156
00157
00158 int DGPSreadRelHeading(tSensors link) {
00159 return _DGPSreadRegister(link, DGPS_CMD_ANGD, 2);
00160 }
00161
00162
00163
00164
00165
00166
00167
00168
00169 int DGPSreadTravHeading(tSensors link) {
00170 return _DGPSreadRegister(link, DGPS_CMD_ANGR, 2);
00171 }
00172
00173
00174
00175
00176
00177
00178
00179
00180
00181 bool DGPSsetDestination(tSensors link, long latitude, long longitude) {
00182 memset(DGPS_I2CRequest, 0, sizeof(tByteArray));
00183
00184
00185 DGPS_I2CRequest[0] = 2;
00186 DGPS_I2CRequest[1] = DGPS_I2C_ADDR;
00187 DGPS_I2CRequest[2] = DGPS_CMD_SLAT;
00188 DGPS_I2CRequest[3] = (latitude >> 24) & 0xFF;
00189 DGPS_I2CRequest[4] = (latitude >> 16) & 0xFF;
00190 DGPS_I2CRequest[5] = (latitude >> 8) & 0xFF;
00191 DGPS_I2CRequest[6] = (latitude >> 0) & 0xFF;
00192 if (!writeI2C(link, DGPS_I2CRequest, 0))
00193 return false;
00194
00195 wait1Msec(100);
00196
00197
00198 DGPS_I2CRequest[0] = 2;
00199 DGPS_I2CRequest[1] = DGPS_I2C_ADDR;
00200 DGPS_I2CRequest[2] = DGPS_CMD_SLONG;
00201 DGPS_I2CRequest[3] = (longitude >> 24) & 0xFF;
00202 DGPS_I2CRequest[4] = (longitude >> 16) & 0xFF;
00203 DGPS_I2CRequest[5] = (longitude >> 8) & 0xFF;
00204 DGPS_I2CRequest[6] = (longitude >> 0) & 0xFF;
00205
00206 return writeI2C(link, DGPS_I2CRequest, 0);
00207 }
00208
00209
00210
00211
00212
00213
00214
00215 int DGPSreadDistToDestination(tSensors link) {
00216 return _DGPSreadRegister(link, DGPS_CMD_DIST, 4);
00217 }
00218
00219 #endif // __DGPS_H__
00220
00221
00222
00223
00224
00225