Garmin GPS 17HVS Technical Specifications - Page 33
GPS 16/17 Technical Specifications
UPC - 753759052546
View all Garmin GPS 17HVS manuals
Add to My Manuals
Save this manual to your list of manuals |
Page 33 highlights
An example function to do the parsing is shown below. Note that the double data types are converted by the function cnvt_ieee_double(). This function merely swaps the upper and lower words of the double. This is necessary on GPS 15, 16, 17 series sensors due to a compatibility issue with the IEEE floating point standard): In this example, the array m_TempArray contains the data portion of the ephemeris packet (with DLE stuffing removed). * * PROCEDURE NAME: * copyData - ephemeris data unpacker * * DESCRIPTION: * unpacks data from ephemeris packet DATA field after extraneous DLEs * have been removed. Note that sint16 refers to a signed 16-bit * integer type. * void GPM_ephList::copyData /* ephemeris data unpacker */ ( GPM_ephData* pTemp /* pointer to ephemeris data array */ ) { pTemp->EphStruct.wn = *(sint16*)&m_TempArray[IDX_EPH_WN]; pTemp->EphStruct.toc = *(float*)&m_TempArray[IDX_EPH_TOC]; pTemp->EphStruct.toe = *(float*)&m_TempArray[IDX_EPH_TOE]; pTemp->EphStruct.af0 = *(float*)&m_TempArray[IDX_EPH_AF0]; pTemp->EphStruct.af1 = *(float*)&m_TempArray[IDX_EPH_AF1]; pTemp->EphStruct.af2 = *(float*)&m_TempArray[IDX_EPH_AF2]; pTemp->EphStruct.ura = *(float*)&m_TempArray[IDX_EPH_URA]; cnvt_ieee_double((long *)&m_TempArray[IDX_EPH_E]); pTemp->EphStruct.e = *(double*)&m_TempArray[IDX_EPH_E]; cnvt_ieee_double((long *)&m_TempArray[IDX_EPH_SQRTA]); pTemp->EphStruct.sqrta = *(double*)&m_TempArray[IDX_EPH_SQRTA]; cnvt_ieee_double((long *)&m_TempArray[IDX_EPH_DN]); pTemp->EphStruct.dn = *(double*)&m_TempArray[IDX_EPH_DN]; cnvt_ieee_double((long *)&m_TempArray[IDX_EPH_M0]); pTemp->EphStruct.m0 = *(double*)&m_TempArray[IDX_EPH_M0]; cnvt_ieee_double((long *)&m_TempArray[IDX_EPH_W]); pTemp->EphStruct.w = *(double*)&m_TempArray[IDX_EPH_W]; cnvt_ieee_double((long *)&m_TempArray[IDX_EPH_OMG0]); pTemp->EphStruct.omg0 = *(double*)&m_TempArray[IDX_EPH_OMG0]; cnvt_ieee_double((long *)&m_TempArray[IDX_EPH_I0]); pTemp->EphStruct.i0 = *(double*)&m_TempArray[IDX_EPH_I0]; pTemp->EphStruct.odot = *(float*)&m_TempArray[IDX_EPH_ODOT]; pTemp->EphStruct.idot = *(float*)&m_TempArray[IDX_EPH_IDOT]; pTemp->EphStruct.cus = *(float*)&m_TempArray[IDX_EPH_CUS]; pTemp->EphStruct.cuc = *(float*)&m_TempArray[IDX_EPH_CUC]; pTemp->EphStruct.cis = *(float*)&m_TempArray[IDX_EPH_CIS]; pTemp->EphStruct.cic = *(float*)&m_TempArray[IDX_EPH_CIC]; pTemp->EphStruct.crs = *(float*)&m_TempArray[IDX_EPH_CRS]; pTemp->EphStruct.crc = *(float*)&m_TempArray[IDX_EPH_CRC]; pTemp->EphStruct.iod = *(unsigned char*)&m_TempArray[IDX_EPH_IOD]; return; } /* copyData */ 190-00228-21 GPS 16/17 Technical Specifications Page 29 Rev. A