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

Revision:
17:05033198f8f3
Parent:
14:bb86a6ca6662
Child:
18:5d72465991f5
--- 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;