Csr location class shows location and satellite information, which supports H13467 + ST F103RB/NXP LCP1549 boards now.
Dependents: CsrLocationDemo CsrLocationDemo
Fork of CsrLocation by
Revision 17:05033198f8f3, committed 2014-11-18
- Comitter:
- zhjcpi
- Date:
- Tue Nov 18 02:43:19 2014 +0000
- Parent:
- 14:bb86a6ca6662
- Child:
- 18:5d72465991f5
- Commit message:
- Seperate UTC time and GPS time into 2 independent fields.
Changed in this revision
--- a/CsrLocation.cpp Wed Nov 05 02:26:49 2014 +0000
+++ b/CsrLocation.cpp Tue Nov 18 02:43:19 2014 +0000
@@ -77,6 +77,9 @@
const tLocPosResp *pPosRsp = (const tLocPosResp *)pMsgData;
lastLocation.version = 1;
lastLocation.valid = true;
+ lastLocation.gpsTime.gps_week = pPosRsp->gpsTime.gps_week;
+ lastLocation.gpsTime.tow = pPosRsp->gpsTime.tow;
+ lastLocation.utcTime = pPosRsp->utcTime;
lastLocation.lat = pPosRsp->lat;
lastLocation.lon = pPosRsp->lon;
lastLocation.altitude = pPosRsp->alt;
@@ -92,8 +95,6 @@
lastLocation.valid = true;
lastLocation.numGPSSVs = pSvStatus->numOfSVs;
lastLocation.numGLOSVs = pSvStatus->numOfGloSVs;
- lastLocation.u.gpsTime.gps_week = pSvStatus->gps_week;
- lastLocation.u.gpsTime.tow = pSvStatus->tow;
break;
}
@@ -606,7 +607,7 @@
/* Parse GPGGA and output position information */
memset(&pos, 0, sizeof(tLocPosResp));
- if (sscanf((char *)serialPkt, "GPGGA,%f,%lf,%c,%lf,%c,%d,%d,%f,%lf", &pos.u.utcTime, &pos.lat, &ns, &pos.lon, &ew, &valid, &svUsed, &horDop,
+ if (sscanf((char *)serialPkt, "GPGGA,%f,%lf,%c,%lf,%c,%d,%d,%f,%lf", &pos.utcTime, &pos.lat, &ns, &pos.lon, &ew, &valid, &svUsed, &horDop,
&pos.alt) >= 1) {
if (ns == 'S') {
pos.lat *= -1.0;
@@ -745,8 +746,9 @@
*pMsgLen = sizeof(*pPos);
ptr += 2;
- pPos->u.gpsTime.gps_week = BINARY_IMPORT_UINT16(ptr);
- pPos->u.gpsTime.tow = BINARY_IMPORT_UINT32(ptr);
+ pPos->gpsTime.gps_week = BINARY_IMPORT_UINT16(ptr);
+ pPos->gpsTime.tow = BINARY_IMPORT_UINT32(ptr);
+ pPos->utcTime = (float)CSR_ULOC_UTC_GPS_OFFSET_MS + (float)pPos->gpsTime.gps_week * CSR_ULOC_SEC_IN_WEEK_MS + pPos->gpsTime.tow - CSR_ULOC_UTC_LEAP_OFFSET_MS;
ptr += 12;
pPos->lat = (double)BINARY_IMPORT_SINT32(ptr);
pPos->lat *= 1e-7;
--- a/CsrLocation.h Wed Nov 05 02:26:49 2014 +0000
+++ b/CsrLocation.h Tue Nov 18 02:43:19 2014 +0000
@@ -13,6 +13,12 @@
#define CSR_RESULT_SUCCESS ((CsrResult) 0x0000)
#define CSR_RESULT_FAILURE ((CsrResult) 0xFFFF)
+/* Time related definitions */
+#define CSR_ULOC_UTC_GPS_OFFSET_MS ((315964800000LL))
+#define CSR_ULOC_SEC_IN_WEEK_MS (604800000)
+#define CSR_ULOC_UTC_LEAP_OFFSET_MS (15000)
+
+
/* IOCTL commands */
#define CSR_IOCTL_CMD_WAKEUP_STATUS (0x01)
#define CSR_IOCTL_CMD_ONOFF_ON (0x02)
@@ -189,10 +195,8 @@
/** Structure to hold Position Response Message Information. */
typedef struct LocPosResp {
- union {
- tGpsTime gpsTime;
- float utcTime;
- } u;
+ tGpsTime gpsTime;
+ float utcTime;
/** Latitude */
double lat;
/** Longitude */
--- a/createCSRGPS.cpp Wed Nov 05 02:26:49 2014 +0000
+++ b/createCSRGPS.cpp Tue Nov 18 02:43:19 2014 +0000
@@ -56,7 +56,7 @@
switch (msgId) {
case LOC_OUTPUT_LOCATION: {
tLocPosResp *pPosRsp = (tLocPosResp *)pMsgData;
- CSR_APP_LOG_INFO("Loc: lat=%f, lon=%f, alt=%f\r\n", pPosRsp->lat, pPosRsp->lon, pPosRsp->alt);
+ CSR_APP_LOG_INFO("Loc: lat=%f, lon=%f, alt=%f, utctime=%f, gps week=%d, gps tow=%d\r\n", pPosRsp->lat, pPosRsp->lon, pPosRsp->alt, pPosRsp->utcTime, pPosRsp->gpsTime.gps_week, pPosRsp->gpsTime.tow);
break;
}
case LOC_OUTPUT_SV_STATUS: {

GPS mbed Shield