CigiLosXRespV3_2.cpp

Go to the documentation of this file.
00001 
00053 #define _EXPORT_CCL_
00054 
00055 #include "CigiLosXRespV3_2.h"
00056 #include "CigiSwapping.h"
00057 #include "CigiExceptions.h"
00058 
00059 
00060 // ====================================================================
00061 // Construction/Destruction
00062 // ====================================================================
00063 
00064 
00065 // ================================================
00066 // CigiLosXRespV3_2
00067 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00068 CigiLosXRespV3_2::CigiLosXRespV3_2()
00069 {
00070 
00071    PacketID = CIGI_LOS_XRESP_PACKET_ID_V3_2;
00072    PacketSize = CIGI_LOS_XRESP_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 = true;
00097 
00098 }
00099 
00100 // ================================================
00101 // ~CigiLosXRespV3_2
00102 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00103 CigiLosXRespV3_2::~CigiLosXRespV3_2()
00104 {
00105 
00106 }
00107 
00108 // ====================================================================
00109 // Pack and Unpack
00110 // ====================================================================
00111 
00112 // ================================================
00113 // Pack
00114 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00115 int CigiLosXRespV3_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->RangeValid) ? 0x04 : 0x00;
00131    HDta |= (Data->Visible) ? 0x08 : 0x00;
00132    HDta |= (Data->HostFrame << 4) & 0xf0;
00133    *CDta.c++ = HDta;
00134 
00135    *CDta.c++ = Data->RespCount;
00136    *CDta.s++ = Data->EntityID;
00137    *CDta.d++ = Data->Range;
00138    *CDta.d++ = Data->LatOrXoff;
00139    *CDta.d++ = Data->LonOrYoff;
00140    *CDta.d++ = Data->AltOrZoff;
00141    *CDta.c++ = Data->Red;
00142    *CDta.c++ = Data->Green;
00143    *CDta.c++ = Data->Blue;
00144    *CDta.c++ = Data->Alpha;
00145    *CDta.l++ = Data->Material;
00146    *CDta.f++ = Data->NormalAz;
00147    *CDta.f++ = Data->NormalEl;
00148 
00149    return(PacketSize);
00150 
00151 }
00152 
00153 // ================================================
00154 // Unpack
00155 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00156 int CigiLosXRespV3_2::Unpack(Cigi_uint8 * Buff, bool Swap, void *Spec)
00157 {
00158    PackPointer CDta;
00159 
00160    CDta.c = Buff;
00161 
00162    CDta.c += 2;  // Step over packet id and size
00163 
00164    if(!Swap)
00165    {
00166       LosID = *CDta.s++;
00167 
00168       Cigi_uint8 HDta = *CDta.c++;
00169       Valid = ((HDta & 0x01) != 0);
00170       EntityIDValid = ((HDta & 0x02) != 0);
00171       RangeValid = ((HDta & 0x04) != 0);
00172       Visible = ((HDta & 0x08) != 0);
00173       HostFrame = (Cigi_uint8)((HDta >> 4) & 0x0f);
00174 
00175       RespCount = *CDta.c++;
00176       EntityID = *CDta.s++;
00177       Range = *CDta.d++;
00178       LatOrXoff = *CDta.d++;
00179       LonOrYoff = *CDta.d++;
00180       AltOrZoff = *CDta.d++;
00181       Red = *CDta.c++;
00182       Green = *CDta.c++;
00183       Blue = *CDta.c++;
00184       Alpha = *CDta.c++;
00185       Material = *CDta.l++;
00186       NormalAz = *CDta.f++;
00187       NormalEl = *CDta.f++;
00188 
00189    }
00190    else
00191    {
00192       CigiSwap2(&LosID, CDta.s++);
00193 
00194       Cigi_uint8 HDta = *CDta.c++;
00195       Valid = ((HDta & 0x01) != 0);
00196       EntityIDValid = ((HDta & 0x02) != 0);
00197       RangeValid = ((HDta & 0x04) != 0);
00198       Visible = ((HDta & 0x08) != 0);
00199       HostFrame = (Cigi_uint8)((HDta >> 4) & 0x0f);
00200 
00201       RespCount = *CDta.c++;
00202       CigiSwap2(&EntityID, CDta.s++);
00203       CigiSwap8(&Range, CDta.d++);
00204       CigiSwap8(&LatOrXoff, CDta.d++);
00205       CigiSwap8(&LonOrYoff, CDta.d++);
00206       CigiSwap8(&AltOrZoff, CDta.d++);
00207       Red = *CDta.c++;
00208       Green = *CDta.c++;
00209       Blue = *CDta.c++;
00210       Alpha = *CDta.c++;
00211       CigiSwap4(&Material, CDta.l++);
00212       CigiSwap4(&NormalAz, CDta.f++);
00213       CigiSwap4(&NormalEl, CDta.f++);
00214 
00215    }
00216 
00217    if(EntityIDValid)
00218    {
00219       ValidV1or2 = false;
00220       IntersectionCoordSys = Entity;
00221    }
00222    else
00223    {
00224       ValidV1or2 = true;
00225       IntersectionCoordSys = Geodetic;
00226    }
00227 
00228    return(PacketSize);
00229 
00230 }
00231 
00232 
00233 // ================================================
00234 // GetCnvt
00235 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00236 int CigiLosXRespV3_2::GetCnvt(CigiVersionID &CnvtVersion,
00237                               CigiCnvtInfoType::Type &CnvtInfo)
00238 {
00239    CnvtInfo.ProcID = CigiProcessType::ProcStd;
00240 
00241    // Note:
00242    // CIGI_LOS_RESP_PACKET_ID_V1 &
00243    // CIGI_LOS_RESP_PACKET_ID_V2 are the same
00244    // CIGI_LOS_XRESP_PACKET_ID_V3 &
00245    // CIGI_LOS_XRESP_PACKET_ID_V3_2 are the same
00246    if(CnvtVersion.CigiMajorVersion < 3)
00247       CnvtInfo.CnvtPacketID = CIGI_LOS_RESP_PACKET_ID_V2;
00248    else
00249       CnvtInfo.CnvtPacketID = CIGI_LOS_XRESP_PACKET_ID_V3;
00250 
00251    return(CIGI_SUCCESS);
00252 }
00253 
00254 
00255 
00256 // ====================================================================
00257 // Accessors
00258 // ====================================================================
00259 
00260 
00261 // ================================================
00262 // NormalAz
00263 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00264 int CigiLosXRespV3_2::SetNormalAz(const float NormalAzIn, bool bndchk)
00265 {
00266 
00267 #ifndef CIGI_NO_BND_CHK
00268    if(bndchk && ((NormalAzIn < -180.0)||(NormalAzIn > 180.0)))
00269    {
00270 #ifndef CIGI_NO_EXCEPT
00271       throw CigiValueOutOfRangeException("NormalAz",(float)NormalAzIn,-180.0,180.0);
00272 #endif
00273       return(CIGI_ERROR_VALUE_OUT_OF_RANGE);
00274    }
00275 #endif
00276 
00277    NormalAz = NormalAzIn;
00278    return(CIGI_SUCCESS);
00279 
00280 }
00281 
00282 
00283 // ================================================
00284 // NormalEl
00285 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00286 int CigiLosXRespV3_2::SetNormalEl(const float NormalElIn, bool bndchk)
00287 {
00288 
00289 #ifndef CIGI_NO_BND_CHK
00290    if(bndchk && ((NormalElIn < -90.0)||(NormalElIn > 90.0)))
00291    {
00292 #ifndef CIGI_NO_EXCEPT
00293       throw CigiValueOutOfRangeException("NormalEl",(float)NormalElIn,-90.0,90.0);
00294 #endif
00295       return(CIGI_ERROR_VALUE_OUT_OF_RANGE);
00296    }
00297 #endif
00298 
00299    NormalEl = NormalElIn;
00300    return(CIGI_SUCCESS);
00301 
00302 }
00303 
00304 

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