Csr location class shows location and satellite information, which supports H13467 + ST F103RB/NXP LCP1549 boards now.

Dependents:   CsrLocationDemo CsrLocationDemo

Fork of CsrLocation by jie zhao

Files at this revision

API Documentation at this revision

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

CsrLocation.cpp Show annotated file Show diff for this revision Revisions of this file
CsrLocation.h Show annotated file Show diff for this revision Revisions of this file
createCSRGPS.cpp Show annotated file Show diff for this revision Revisions of this file
--- 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: {