CigiHatHotXRespV3.cpp

Go to the documentation of this file.
00001 
00063 #define _EXPORT_CCL_
00064 
00065 #include "CigiHatHotXRespV3.h"
00066 #include "CigiSwapping.h"
00067 #include "CigiExceptions.h"
00068 
00069 
00070 // ====================================================================
00071 // Construction/Destruction
00072 // ====================================================================
00073 
00074 
00075 // ================================================
00076 // CigiHatHotXRespV3
00077 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00078 CigiHatHotXRespV3::CigiHatHotXRespV3()
00079 {
00080 
00081    PacketID = CIGI_HAT_HOT_XRESP_PACKET_ID_V3;
00082    PacketSize = CIGI_HAT_HOT_XRESP_PACKET_SIZE_V3;
00083    Version = 3;
00084    MinorVersion = 0;
00085 
00086    HatHotID = 0;
00087    Valid = false;
00088    ReqType = HAT;
00089    HostFrame = 0;
00090    Hat = 0.0;
00091    Hot = 0.0;
00092    Material = 0;
00093    NormAz = 0.0;
00094    NormEl = 0.0;
00095    VldHat = false;
00096    VldHot = false;
00097 
00098 }
00099 
00100 // ================================================
00101 // ~CigiHatHotXRespV3
00102 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00103 CigiHatHotXRespV3::~CigiHatHotXRespV3()
00104 {
00105 
00106 }
00107 
00108 // ====================================================================
00109 // Pack and Unpack
00110 // ====================================================================
00111 
00112 // ================================================
00113 // Pack
00114 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00115 int CigiHatHotXRespV3::Pack(CigiBasePacket * Base, Cigi_uint8 * Buff, void *Spec) const
00116 {
00117    PackPointer CDta;
00118 
00119    CigiBaseHatHotResp * Data = ( CigiBaseHatHotResp *)Base;
00120 
00121    CDta.c = Buff;
00122 
00123    *CDta.c++ = PacketID;
00124    *CDta.c++ = PacketSize;
00125 
00126    *CDta.s++ = Data->HatHotID;
00127 
00128    bool tValid = Data->Valid;
00129    if(!Data->VldHat && !Data->VldHot)
00130       tValid = false;
00131    *CDta.c++ = (tValid) ? 0x01 : 0;
00132 
00133    *CDta.c++ = 0;
00134    *CDta.s++ = 0;
00135 
00136    if(tValid)
00137    {
00138       if(Data->VldHat)
00139          *CDta.d++ = Data->Hat;
00140       else
00141          *CDta.d++ = 0.0;
00142 
00143       if(Data->VldHot)
00144          *CDta.d++ = Data->Hot;
00145       else
00146          *CDta.d++ = 0.0;
00147 
00148       *CDta.l++ = Data->Material;
00149       *CDta.f++ = Data->NormAz;
00150       *CDta.f++ = Data->NormEl;
00151 
00152    }
00153    else
00154    {
00155       *CDta.d++ = 0.0;
00156       *CDta.d++ = 0.0;
00157       *CDta.l++ = 0;
00158       *CDta.f++ = 0.0f;
00159       *CDta.f++ = 0.0f;
00160    }
00161 
00162 
00163    *CDta.l++ = 0;
00164 
00165    return(PacketSize);
00166 
00167 }
00168 
00169 // ================================================
00170 // Unpack
00171 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00172 int CigiHatHotXRespV3::Unpack(Cigi_uint8 * Buff, bool Swap, void *Spec)
00173 {
00174    PackPointer CDta;
00175 
00176    CDta.c = Buff;
00177 
00178    CDta.c += 2;  // Step over packet id and size
00179 
00180    if(!Swap)
00181    {
00182       HatHotID = *CDta.s++;
00183 
00184       Valid = (*CDta.c++ != 0);
00185 
00186       CDta.c += 3;
00187 
00188       Hat = *CDta.d++;
00189       Hot = *CDta.d++;
00190       Material = *CDta.l++;
00191       NormAz = *CDta.f++;
00192       NormEl = *CDta.f++;
00193 
00194       if(Valid)
00195       {
00196          VldHat = true;
00197          VldHot = true;
00198       }
00199       else
00200       {
00201          VldHat = false;
00202          VldHot = false;
00203       }
00204    }
00205    else
00206    {
00207       CigiSwap2(&HatHotID, CDta.s++);
00208 
00209       Valid = (*CDta.c++ != 0);
00210 
00211       CDta.c += 3;
00212 
00213       CigiSwap8(&Hat, CDta.d++);
00214       CigiSwap8(&Hot, CDta.d++);
00215       CigiSwap4(&Material, CDta.l++);
00216       CigiSwap4(&NormAz, CDta.f++);
00217       CigiSwap4(&NormEl, CDta.f++);
00218 
00219       if(Valid)
00220       {
00221          VldHat = true;
00222          VldHot = true;
00223       }
00224       else
00225       {
00226          VldHat = false;
00227          VldHot = false;
00228       }
00229    }
00230 
00231    ReqType = HAT;  // For Cigi Version 1 and 2 compatibility
00232 
00233    HostFrame = 0;
00234 
00235    return(PacketSize);
00236 
00237 }
00238 
00239 
00240 // ================================================
00241 // GetCnvt
00242 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00243 int CigiHatHotXRespV3::GetCnvt(CigiVersionID &CnvtVersion,
00244                                CigiCnvtInfoType::Type &CnvtInfo)
00245 {
00246    CnvtInfo.ProcID = CigiProcessType::ProcStd;
00247 
00248    switch(CnvtVersion.CigiMajorVersion)
00249    {
00250    case 1:
00251       CnvtInfo.CnvtPacketID = CIGI_HAT_RESP_PACKET_ID_V1;
00252       break;
00253    case 2:
00254       CnvtInfo.CnvtPacketID = CIGI_HOT_RESP_PACKET_ID_V2;
00255       break;
00256    default:
00257       // The Packet ID for all V3 HatHotXResp are the same ID
00258       CnvtInfo.CnvtPacketID = CIGI_HAT_HOT_XRESP_PACKET_ID_V3;
00259       break;
00260    }
00261 
00262    return(CIGI_SUCCESS);
00263 }
00264 
00265 
00266 
00267 // ====================================================================
00268 // Accessors
00269 // ====================================================================
00270 
00271 
00272 // ================================================
00273 // NormAz
00274 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00275 int CigiHatHotXRespV3::SetNormAz(const float NormAzIn, bool bndchk)
00276 {
00277 
00278 #ifndef CIGI_NO_BND_CHK
00279    if(bndchk && ((NormAzIn < -180.0)||(NormAzIn > 180.0)))
00280    {
00281 #ifndef CIGI_NO_EXCEPT
00282       throw CigiValueOutOfRangeException("NormAz",(float)NormAzIn,-180.0,180.0);
00283 #endif
00284       return(CIGI_ERROR_VALUE_OUT_OF_RANGE);
00285    }
00286 #endif
00287 
00288    NormAz = NormAzIn;
00289    return(CIGI_SUCCESS);
00290 
00291 }
00292 
00293 
00294 // ================================================
00295 // NormEl
00296 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00297 int CigiHatHotXRespV3::SetNormEl(const float NormElIn, bool bndchk)
00298 {
00299 
00300 #ifndef CIGI_NO_BND_CHK
00301    if(bndchk && ((NormElIn < -90.0)||(NormElIn > 90.0)))
00302    {
00303 #ifndef CIGI_NO_EXCEPT
00304       throw CigiValueOutOfRangeException("NormEl",(float)NormElIn,-90.0,90.0);
00305 #endif
00306       return(CIGI_ERROR_VALUE_OUT_OF_RANGE);
00307    }
00308 #endif
00309 
00310    NormEl = NormElIn;
00311    return(CIGI_SUCCESS);
00312 
00313 }
00314 
00315 

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