190-00228-08 GPS 16x Technical Specifications Rev. CPage 29An example function to do the parsing is shown below. Note that the double data types are converted by the functioncnvt_ieee_double(). This function merely swaps the upper and lower words of the double. This is necessaryon 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 */