Csr location class shows location and satellite information, which supports H13467 + ST F103RB/NXP LCP1549 boards now.
Dependents: CsrLocationDemo CsrLocationDemo
Fork of CsrLocation by
Diff: CsrLocation.cpp
- 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;