CigiLosRespV2.cpp

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

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