CigiSOFV3.cpp

Go to the documentation of this file.
00001 
00069 #define _EXPORT_CCL_
00070 
00071 #include "CigiSOFV3.h"
00072 #include "CigiExceptions.h"
00073 #include "CigiSwapping.h"
00074 
00075 
00076 // ====================================================================
00077 // Construction/Destruction
00078 // ====================================================================
00079 
00080 // ================================================
00081 // CigiSOFV3
00082 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00083 CigiSOFV3::CigiSOFV3()
00084 {
00085 
00086    PacketID = CIGI_SOF_PACKET_ID_V3;
00087    PacketSize = CIGI_SOF_PACKET_SIZE_V3;
00088    Version = 3;
00089    MinorVersion = 0;
00090 
00091    BSwapEn = false;
00092    DatabaseID = 0;
00093    FrameCntr = 0;
00094    TimeStampV2 = 0.0f;
00095    TimeStampV3 = 0;
00096    ByteSwap = 0x8000;
00097    IGMode = Standby;
00098    TimestampValid = false;
00099    EarthRefModel = WGS84;
00100    LastRcvdHostFrame = 0;
00101 
00102 }
00103 
00104 // ================================================
00105 // ~CigiSOFV3
00106 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00107 CigiSOFV3::~CigiSOFV3()
00108 {
00109 
00110 }
00111 
00112 
00113 
00114 
00115 
00116 // ====================================================================
00117 // Pack and Unpack
00118 // ====================================================================
00119 
00120 // ================================================
00121 // Pack
00122 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00123 int CigiSOFV3::Pack(CigiBasePacket * Base, Cigi_uint8 * Buff, void *Spec) const
00124 {
00125    PackPointer CDta;
00126 
00127    CigiBaseSOF *Data = ( CigiBaseSOF *) Base;
00128 
00129 
00130    CDta.c = Buff;
00131 
00132    *CDta.c++ = PacketID;
00133    *CDta.c++ = PacketSize;
00134    *CDta.c++ = Version;
00135 
00136    *CDta.b++ = Data->DatabaseID;
00137    *CDta.c++ = Data->IGStatus;
00138 
00139    Cigi_uint8 HDta = (Data->TimestampValid) ? 0x04 : 0;
00140    HDta |= (Cigi_uint8)(Data->IGMode & 0x03);
00141    HDta |= (Cigi_uint8)((Data->EarthRefModel << 3) & 0x08);
00142 
00143    *CDta.c++ = HDta;
00144 
00145    *CDta.s++ = 0x8000;  // Byte Swap
00146    *CDta.l++ = Data->FrameCntr;
00147    *CDta.l++ = Data->TimeStampV3;
00148 
00149 
00150    return(PacketSize);
00151 
00152 }
00153 
00154 
00155 // ================================================
00156 // Unpack
00157 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00158 int CigiSOFV3::Unpack(Cigi_uint8 * Buff, bool Swap, void *Spec)
00159 {
00160 
00161    PackPointer CDta;
00162 
00163    CDta.c = Buff;
00164 
00165    CDta.c += 3;
00166 
00167    DatabaseID = *CDta.b++;
00168    IGStatus = *CDta.c++;
00169 
00170    Cigi_uint8 HDta = *CDta.c++;
00171 
00172    IGMode = (IGModeGrp)(HDta & 0x03);
00173    EarthRefModel = (EarthRefModelGrp)((HDta >> 3) & 0x01);
00174    TimestampValid = ((HDta & 0x04) != 0);
00175 
00176    ByteSwap = *CDta.s++;
00177 
00178    BSwapEn = (ByteSwap == 0x0080);
00179 
00180    if(!BSwapEn)
00181    {
00182       FrameCntr = *CDta.l++;
00183       TimeStampV3 = *CDta.l++;
00184    }
00185    else
00186    {
00187       CigiSwap4(&FrameCntr,CDta.l++);
00188       CigiSwap4(&TimeStampV3,CDta.l++);
00189    }
00190 
00191    TimeStampV2 = ((float)TimeStampV3) * 10.0f;
00192 
00193    LastRcvdHostFrame = FrameCntr;
00194 
00195    return(CIGI_SUCCESS);
00196 
00197 }
00198 
00199 
00200 
00201 
00202 // ====================================================================
00203 // Accessors
00204 // ====================================================================
00205 
00206 
00207 
00208 // ================================================
00209 // SetTimeStamp
00210 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00211 int CigiSOFV3::SetTimeStamp(const Cigi_uint32 TimeStamp, bool bndchk)
00212 {
00213 
00214    TimeStampV3 = TimeStamp;
00215    TimeStampV2 = ((float)TimeStampV3) * 10.0f;
00216 
00217    return(CIGI_SUCCESS);
00218 
00219 }
00220 
00221 // ================================================
00222 // SetEarthRefModel
00223 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00224 int CigiSOFV3::SetEarthRefModel(const EarthRefModelGrp EarthRefModelIn,
00225                                 bool bndchk)
00226 {
00227 
00228 #ifndef CIGI_NO_BND_CHK
00229    if(bndchk && ((EarthRefModelIn < 0)||(EarthRefModelIn > 1)))
00230    {
00231 #ifndef CIGI_NO_EXCEPT
00232       throw CigiValueOutOfRangeException("EarthRefModel",EarthRefModelIn,0,1);
00233 #endif
00234       return(CIGI_ERROR_VALUE_OUT_OF_RANGE);
00235    }
00236 #endif
00237 
00238    EarthRefModel = EarthRefModelIn;
00239 
00240    return(CIGI_SUCCESS);
00241 
00242 }
00243 

Generated on Wed Apr 29 08:59:59 2009 for CCL by  doxygen 1.4.7