CigiSOFV3_2.cpp

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

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