CigiHatHotRespV3_2.cpp

Go to the documentation of this file.
00001 
00053 #define _EXPORT_CCL_
00054 
00055 #include "CigiHatHotRespV3_2.h"
00056 #include "CigiBaseHatHotReq.h"
00057 #include "CigiSwapping.h"
00058 #include "CigiExceptions.h"
00059 
00060 
00061 // ====================================================================
00062 // Construction/Destruction
00063 // ====================================================================
00064 
00065 
00066 // ================================================
00067 // CigiHatHotRespV3_2
00068 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00069 CigiHatHotRespV3_2::CigiHatHotRespV3_2()
00070 {
00071 
00072    PacketID = CIGI_HAT_HOT_RESP_PACKET_ID_V3_2;
00073    PacketSize = CIGI_HAT_HOT_RESP_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 // ~CigiHatHotRespV3_2
00093 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00094 CigiHatHotRespV3_2::~CigiHatHotRespV3_2()
00095 {
00096 
00097 }
00098 
00099 // ====================================================================
00100 // Pack and Unpack
00101 // ====================================================================
00102 
00103 // ================================================
00104 // Pack
00105 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00106 int CigiHatHotRespV3_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    ReqTypeGrp tReqType = Data->ReqType;
00121 
00122    if(tValid)
00123    {
00124       if(!((Data->VldHat && (tReqType == HAT)) ||
00125            (Data->VldHot && (tReqType == HOT))))
00126       {
00127          if(Data->VldHat)
00128             tReqType = HAT;
00129          else if(Data->VldHot)
00130             tReqType = HOT;
00131          else
00132             tValid = false;
00133       }
00134    }
00135 
00136 
00137    Cigi_uint8 HDta = (tValid) ? 0x01 : 0;
00138    HDta |= (Cigi_uint8)((tReqType << 1) & 0x02);
00139    HDta |= (Data->HostFrame << 4) & 0xf0;
00140    *CDta.c++ = HDta;
00141    *CDta.c++ = 0;
00142    *CDta.s++ = 0;
00143 
00144    if(tValid)
00145    {
00146       if(tReqType == HAT)
00147          *CDta.d++ = Data->Hat;
00148       else
00149          *CDta.d++ = Data->Hot;
00150    }
00151    else
00152       *CDta.d++ = 0.0;
00153 
00154 
00155    return(PacketSize);
00156 
00157 }
00158 
00159 // ================================================
00160 // Unpack
00161 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00162 int CigiHatHotRespV3_2::Unpack(Cigi_uint8 * Buff, bool Swap, void *Spec)
00163 {
00164    PackPointer CDta;
00165 
00166    CDta.c = Buff;
00167 
00168    CDta.c += 2;  // Step over packet id and size
00169 
00170    if(!Swap)
00171    {
00172       HatHotID = *CDta.s++;
00173 
00174       Cigi_uint8 HDta = *CDta.c++;
00175       Valid = ((HDta & 0x01) != 0);
00176       ReqType = (ReqTypeGrp)((HDta >> 1) & 0x01);
00177       HostFrame = (Cigi_uint8)((HDta >> 4) & 0x0f);
00178 
00179       CDta.c += 3;
00180 
00181       if(Valid)
00182       {
00183          if(ReqType == HAT)
00184          {
00185             Hat = *CDta.d++;
00186             Hot = 0.0;
00187             VldHat = true;
00188             VldHot = false;
00189          }
00190          else
00191          {
00192             Hat = 0.0;
00193             Hot = *CDta.d++;
00194             VldHat = false;
00195             VldHot = true;
00196          }
00197 
00198       }
00199       else
00200       {
00201          Hat = 0.0;
00202          Hot = 0.0;
00203          VldHat = false;
00204          VldHot = false;
00205       }
00206 
00207    }
00208    else
00209    {
00210       CigiSwap2(&HatHotID, CDta.s++);
00211 
00212       Cigi_uint8 HDta = *CDta.c++;
00213       Valid = ((HDta & 0x01) != 0);
00214       ReqType = (ReqTypeGrp)((HDta >> 1) & 0x01);
00215       HostFrame = (Cigi_uint8)((HDta >> 4) & 0x0f);
00216 
00217       CDta.c += 3;
00218 
00219       if(Valid)
00220       {
00221          if(ReqType == HAT)
00222          {
00223             CigiSwap8(&Hat, CDta.d++);
00224             Hot = 0.0;
00225             VldHat = true;
00226             VldHot = false;
00227          }
00228          else
00229          {
00230             Hat = 0.0;
00231             CigiSwap8(&Hot, CDta.d++);
00232             VldHat = false;
00233             VldHot = true;
00234          }
00235 
00236       }
00237       else
00238       {
00239          Hat = 0.0;
00240          Hot = 0.0;
00241          VldHat = false;
00242          VldHot = false;
00243       }
00244 
00245    }
00246 
00247    Material = 0;
00248 
00249    return(PacketSize);
00250 
00251 }
00252 
00253 
00254 // ================================================
00255 // GetCnvt
00256 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00257 int CigiHatHotRespV3_2::GetCnvt(CigiVersionID &CnvtVersion,
00258                                 CigiCnvtInfoType::Type &CnvtInfo)
00259 {
00260    CnvtInfo.ProcID = CigiProcessType::TwoPassCnvtProcStd;
00261 
00262    switch(CnvtVersion.CigiMajorVersion)
00263    {
00264    case 1:
00265       // Note: This will result in an incorrect value
00266       // if the V3_2 response is a HOT value.
00267       CnvtInfo.CnvtPacketID = CIGI_HAT_RESP_PACKET_ID_V1;
00268       break;
00269    case 2:
00270       if(ReqType == CigiBaseHatHotReq::HAT)
00271          CnvtInfo.CnvtPacketID = CIGI_HAT_RESP_PACKET_ID_V2;
00272       else
00273          CnvtInfo.CnvtPacketID = CIGI_HOT_RESP_PACKET_ID_V2;
00274       break;
00275    default:
00276       // The Packet ID for all V3 HatHotReq are the same ID
00277       CnvtInfo.CnvtPacketID = CIGI_HAT_HOT_RESP_PACKET_ID_V3;
00278       break;
00279    }
00280 
00281    return(CIGI_SUCCESS);
00282 }
00283 
00284 
00285 
00286 // ====================================================================
00287 // Accessors
00288 // ====================================================================
00289 
00290 
00291 // ================================================
00292 // ReqType
00293 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00294 int CigiHatHotRespV3_2::SetReqType(const ReqTypeGrp ReqTypeIn, bool bndchk)
00295 {
00296 
00297 #ifndef CIGI_NO_BND_CHK
00298    if(bndchk && ((ReqTypeIn < 0)||(ReqTypeIn > 1)))
00299    {
00300 #ifndef CIGI_NO_EXCEPT
00301       throw CigiValueOutOfRangeException("ReqType",(ReqTypeGrp)ReqTypeIn,0,1);
00302 #endif
00303       return(CIGI_ERROR_VALUE_OUT_OF_RANGE);
00304    }
00305 #endif
00306 
00307    ReqType = ReqTypeIn;
00308    return(CIGI_SUCCESS);
00309 
00310 }
00311 
00312 

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