CigiLosRespV1.cpp

Go to the documentation of this file.
00001 
00059 #define _EXPORT_CCL_
00060 
00061 #include "CigiLosRespV1.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 // CigiLosRespV1
00088 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00089 CigiLosRespV1::CigiLosRespV1()
00090 {
00091 
00092    PacketID = CIGI_LOS_RESP_PACKET_ID_V1;
00093    PacketSize = CIGI_LOS_RESP_PACKET_SIZE_V1;
00094    Version = 1;
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 // ~CigiLosRespV1
00123 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00124 CigiLosRespV1::~CigiLosRespV1()
00125 {
00126 
00127 }
00128 
00129 // ====================================================================
00130 // Pack and Unpack
00131 // ====================================================================
00132 
00133 // ================================================
00134 // Pack
00135 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00136 int CigiLosRespV1::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    *CDta.l++ = 0;
00164 
00165    CIGI_SCOPY4(CDta.l++, &Data->Material);
00166 
00167    float tflt = (float)Data->Range;
00168    CIGI_SCOPY4(CDta.f++, &tflt);
00169 
00170    tflt = (float)Data->AltOrZoff;
00171    CIGI_SCOPY4(CDta.f++, &tflt);
00172 
00173    CIGI_SCOPY8(CDta.d++, &Data->LatOrXoff);
00174    CIGI_SCOPY8(CDta.d++, &Data->LonOrYoff);
00175 
00176    memcpy(Buff,tBuf,CIGI_LOS_RESP_PACKET_SIZE_V1);
00177 
00178    return(PacketSize);
00179 
00180 }
00181 
00182 // ================================================
00183 // Unpack
00184 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00185 int CigiLosRespV1::Unpack(Cigi_uint8 * Buff, bool Swap, void *Spec)
00186 {
00187    double DBuf[6];
00188 
00189    Cigi_uint8 *tBuf = (Cigi_uint8 *)DBuf;
00190 
00191    PackPointer CDta;
00192 
00193    memcpy(tBuf,Buff,CIGI_LOS_RESP_PACKET_SIZE_V1);
00194 
00195    CDta.d = DBuf;
00196 
00197    CDta.c += 2;  // Step over packet id and size
00198 
00199    CIGI_SCOPY2(&LosID, CDta.s++);
00200 
00201    Cigi_uint8 HDta = *CDta.c++;
00202    Valid = ((HDta & 0x80) != 0);
00203    Visible = ((HDta & 0x40) != 0);
00204 
00205    CDta.c += 7;
00206 
00207    CIGI_SCOPY4(&Material, CDta.l++);
00208 
00209    float tflt;
00210 
00211    CIGI_SCOPY4(&tflt, CDta.f++);
00212    Range = (double)tflt;
00213 
00214    CIGI_SCOPY4(&tflt, CDta.f++);
00215    AltOrZoff = (double)tflt;
00216 
00217    CIGI_SCOPY8(&LatOrXoff, CDta.d++);
00218    CIGI_SCOPY8(&LonOrYoff, CDta.d++);
00219 
00220    HostFrame = 0;
00221 
00222    ValidV1or2 = true;
00223 
00224    return(PacketSize);
00225 
00226 }
00227 
00228 
00229 // ================================================
00230 // GetCnvt
00231 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00232 int CigiLosRespV1::GetCnvt(CigiVersionID &CnvtVersion,
00233                            CigiCnvtInfoType::Type &CnvtInfo)
00234 {
00235    CnvtInfo.ProcID = CigiProcessType::ProcStd;
00236 
00237    // Note:
00238    // CIGI_LOS_RESP_PACKET_ID_V1 &
00239    // CIGI_LOS_RESP_PACKET_ID_V2 are the same
00240    // CIGI_LOS_RESP_PACKET_ID_V3 &
00241    // CIGI_LOS_RESP_PACKET_ID_V3_2 are the same
00242    if(CnvtVersion.CigiMajorVersion < 3)
00243       CnvtInfo.CnvtPacketID = CIGI_LOS_RESP_PACKET_ID_V2;
00244    else
00245       CnvtInfo.CnvtPacketID = CIGI_LOS_RESP_PACKET_ID_V3;
00246 
00247    return(CIGI_SUCCESS);
00248 }
00249 
00250 
00251 
00252 
00253 
00254 
00255 // ====================================================================
00256 // Accessors
00257 // ====================================================================
00258 
00259 

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