CigiHatHotXRespV3_2.cpp

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

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