CigiLosRespV3_2.cpp

Go to the documentation of this file.
00001 
00053 #define _EXPORT_CCL_
00054 
00055 #include "CigiLosRespV3_2.h"
00056 #include "CigiSwapping.h"
00057 #include "CigiExceptions.h"
00058 
00059 
00060 // ====================================================================
00061 // Construction/Destruction
00062 // ====================================================================
00063 
00064 
00065 // ================================================
00066 // CigiLosRespV3_2
00067 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00068 CigiLosRespV3_2::CigiLosRespV3_2()
00069 {
00070 
00071    PacketID = CIGI_LOS_RESP_PACKET_ID_V3_2;
00072    PacketSize = CIGI_LOS_RESP_PACKET_SIZE_V3_2;
00073    Version = 3;
00074    MinorVersion = 2;
00075 
00076    LosID = 0;
00077    Valid = false;
00078    EntityIDValid = false;
00079    RangeValid = false;
00080    Visible = false;
00081    IntersectionCoordSys = Geodetic;
00082    HostFrame = 0;
00083    RespCount = 0;
00084    EntityID = 0;
00085    Range = 0.0;
00086    LatOrXoff = 0.0;
00087    LonOrYoff = 0.0;
00088    AltOrZoff = 0.0;
00089    Red = 0;
00090    Green = 0;
00091    Blue = 0;
00092    Alpha = 0;
00093    Material = 0;
00094    NormalAz = 0.0;
00095    NormalEl = 0.0;
00096    ValidV1or2 = false;
00097 
00098 }
00099 
00100 // ================================================
00101 // ~CigiLosRespV3_2
00102 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00103 CigiLosRespV3_2::~CigiLosRespV3_2()
00104 {
00105 
00106 }
00107 
00108 // ====================================================================
00109 // Pack and Unpack
00110 // ====================================================================
00111 
00112 // ================================================
00113 // Pack
00114 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00115 int CigiLosRespV3_2::Pack(CigiBasePacket * Base, Cigi_uint8 * Buff, void *Spec) const
00116 {
00117    PackPointer CDta;
00118 
00119    CigiBaseLosResp * Data = ( CigiBaseLosResp *)Base;
00120 
00121    CDta.c = Buff;
00122 
00123    *CDta.c++ = PacketID;
00124    *CDta.c++ = PacketSize;
00125 
00126    *CDta.s++ = Data->LosID;
00127 
00128    Cigi_uint8 HDta = (Data->Valid) ? 0x01 : 0x00;
00129    HDta |= (Data->EntityIDValid) ? 0x02 : 0x00;
00130    HDta |= (Data->Visible) ? 0x04 : 0x00;
00131    HDta |= (Data->HostFrame << 4) & 0xf0;
00132    *CDta.c++ = HDta;
00133 
00134    *CDta.c++ = Data->RespCount;
00135    *CDta.s++ = Data->EntityID;
00136    *CDta.d++ = Data->Range;
00137 
00138    return(PacketSize);
00139 
00140 }
00141 
00142 // ================================================
00143 // Unpack
00144 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00145 int CigiLosRespV3_2::Unpack(Cigi_uint8 * Buff, bool Swap, void *Spec)
00146 {
00147    PackPointer CDta;
00148 
00149    CDta.c = Buff;
00150 
00151    CDta.c += 2;  // Step over packet id and size
00152 
00153    if(!Swap)
00154    {
00155       LosID = *CDta.s++;
00156 
00157       Cigi_uint8 HDta = *CDta.c++;
00158       Valid = ((HDta & 0x01) != 0);
00159       EntityIDValid = ((HDta & 0x02) != 0);
00160       Visible = ((HDta & 0x04) != 0);
00161       HostFrame = (Cigi_uint8)((HDta >> 4) & 0x0f);
00162 
00163       RespCount = *CDta.c++;
00164       EntityID = *CDta.s++;
00165       Range = *CDta.d++;
00166 
00167    }
00168    else
00169    {
00170       CigiSwap2(&LosID, CDta.s++);
00171 
00172       Cigi_uint8 HDta = *CDta.c++;
00173       Valid = ((HDta & 0x01) != 0);
00174       EntityIDValid = ((HDta & 0x02) != 0);
00175       Visible = ((HDta & 0x04) != 0);
00176       HostFrame = (Cigi_uint8)((HDta >> 4) & 0x0f);
00177 
00178       RespCount = *CDta.c++;
00179       CigiSwap2(&EntityID, CDta.s++);
00180       CigiSwap8(&Range, CDta.d++);
00181 
00182    }
00183 
00184 
00185    LatOrXoff = 0.0;
00186    LonOrYoff = 0.0;
00187    AltOrZoff = 0.0;
00188    Material = 0;
00189 
00190    ValidV1or2 = false;
00191 
00192    return(PacketSize);
00193 
00194 }
00195 
00196 
00197 // ================================================
00198 // GetCnvt
00199 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00200 int CigiLosRespV3_2::GetCnvt(CigiVersionID &CnvtVersion,
00201                            CigiCnvtInfoType::Type &CnvtInfo)
00202 {
00203    CnvtInfo.ProcID = CigiProcessType::ProcStd;
00204 
00205    // Note:
00206    // CIGI_LOS_RESP_PACKET_ID_V1 &
00207    // CIGI_LOS_RESP_PACKET_ID_V2 are the same
00208    // CIGI_LOS_RESP_PACKET_ID_V3 &
00209    // CIGI_LOS_RESP_PACKET_ID_V3_2 are the same
00210    if(CnvtVersion.CigiMajorVersion < 3)
00211       CnvtInfo.CnvtPacketID = CIGI_LOS_RESP_PACKET_ID_V2;
00212    else
00213       CnvtInfo.CnvtPacketID = CIGI_LOS_RESP_PACKET_ID_V3;
00214 
00215 
00216 
00217    return(CIGI_SUCCESS);
00218 }
00219 
00220 
00221 
00222 // ====================================================================
00223 // Accessors
00224 // ====================================================================
00225 
00226 
00227 

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