00001
00062 #define _EXPORT_CCL_
00063
00064 #include "CigiHatHotRespV3.h"
00065 #include "CigiBaseHatHotReq.h"
00066 #include "CigiSwapping.h"
00067 #include "CigiExceptions.h"
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078 CigiHatHotRespV3::CigiHatHotRespV3()
00079 {
00080
00081 PacketID = CIGI_HAT_HOT_RESP_PACKET_ID_V3;
00082 PacketSize = CIGI_HAT_HOT_RESP_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
00102
00103 CigiHatHotRespV3::~CigiHatHotRespV3()
00104 {
00105
00106 }
00107
00108
00109
00110
00111
00112
00113
00114
00115 int CigiHatHotRespV3::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 ReqTypeGrp tReqType = Data->ReqType;
00130
00131 if(tValid)
00132 {
00133 if(!((Data->VldHat && (tReqType == HAT)) ||
00134 (Data->VldHot && (tReqType == HOT))))
00135 {
00136 if(Data->VldHat)
00137 tReqType = HAT;
00138 else if(Data->VldHot)
00139 tReqType = HOT;
00140 else
00141 tValid = false;
00142 }
00143 }
00144
00145
00146 Cigi_uint8 HDta = (tValid) ? 0x01 : 0;
00147 HDta |= (Cigi_uint8)((tReqType << 1) & 0x02);
00148 *CDta.c++ = HDta;
00149 *CDta.c++ = 0;
00150 *CDta.s++ = 0;
00151
00152 if(tValid)
00153 {
00154 if(tReqType == HAT)
00155 *CDta.d++ = Data->Hat;
00156 else
00157 *CDta.d++ = Data->Hot;
00158 }
00159 else
00160 *CDta.d++ = 0.0;
00161
00162
00163 return(PacketSize);
00164
00165 }
00166
00167
00168
00169
00170 int CigiHatHotRespV3::Unpack(Cigi_uint8 * Buff, bool Swap, void *Spec)
00171 {
00172 PackPointer CDta;
00173
00174 CDta.c = Buff;
00175
00176 CDta.c += 2;
00177
00178 if(!Swap)
00179 {
00180 HatHotID = *CDta.s++;
00181
00182 Cigi_uint8 HDta = *CDta.c++;
00183 Valid = ((HDta & 0x01) != 0);
00184 ReqType = (ReqTypeGrp)((HDta >> 1) & 0x01);
00185
00186 CDta.c += 3;
00187
00188 if(Valid)
00189 {
00190 if(ReqType == HAT)
00191 {
00192 Hat = *CDta.d++;
00193 Hot = 0.0;
00194 VldHat = true;
00195 VldHot = false;
00196 }
00197 else
00198 {
00199 Hat = 0.0;
00200 Hot = *CDta.d++;
00201 VldHat = false;
00202 VldHot = true;
00203 }
00204
00205 }
00206 else
00207 {
00208 Hat = 0.0;
00209 Hot = 0.0;
00210 VldHat = false;
00211 VldHot = false;
00212 }
00213
00214 }
00215 else
00216 {
00217 CigiSwap2(&HatHotID, CDta.s++);
00218
00219 Cigi_uint8 HDta = *CDta.c++;
00220 Valid = ((HDta & 0x01) != 0);
00221 ReqType = (ReqTypeGrp)((HDta >> 1) & 0x01);
00222
00223 CDta.c += 3;
00224
00225 if(Valid)
00226 {
00227 if(ReqType == HAT)
00228 {
00229 CigiSwap8(&Hat, CDta.d++);
00230 Hot = 0.0;
00231 VldHat = true;
00232 VldHot = false;
00233 }
00234 else
00235 {
00236 Hat = 0.0;
00237 CigiSwap8(&Hot, CDta.d++);
00238 VldHat = false;
00239 VldHot = true;
00240 }
00241
00242 }
00243 else
00244 {
00245 Hat = 0.0;
00246 Hot = 0.0;
00247 VldHat = false;
00248 VldHot = false;
00249 }
00250
00251 }
00252
00253 HostFrame = 0;
00254
00255 Material = 0;
00256
00257 return(PacketSize);
00258
00259 }
00260
00261
00262
00263
00264
00265 int CigiHatHotRespV3::GetCnvt(CigiVersionID &CnvtVersion,
00266 CigiCnvtInfoType::Type &CnvtInfo)
00267 {
00268 CnvtInfo.ProcID = CigiProcessType::TwoPassCnvtProcStd;
00269
00270 switch(CnvtVersion.CigiMajorVersion)
00271 {
00272 case 1:
00273
00274
00275 CnvtInfo.CnvtPacketID = CIGI_HAT_RESP_PACKET_ID_V1;
00276 break;
00277 case 2:
00278 if(ReqType == CigiBaseHatHotReq::HAT)
00279 CnvtInfo.CnvtPacketID = CIGI_HAT_RESP_PACKET_ID_V2;
00280 else
00281 CnvtInfo.CnvtPacketID = CIGI_HOT_RESP_PACKET_ID_V2;
00282 break;
00283 default:
00284
00285 CnvtInfo.CnvtPacketID = CIGI_HAT_HOT_RESP_PACKET_ID_V3;
00286 break;
00287 }
00288
00289 return(CIGI_SUCCESS);
00290 }
00291
00292
00293
00294
00295
00296
00297
00298
00299
00300
00301
00302 int CigiHatHotRespV3::SetReqType(const ReqTypeGrp ReqTypeIn, bool bndchk)
00303 {
00304
00305 #ifndef CIGI_NO_BND_CHK
00306 if(bndchk && ((ReqTypeIn < 0)||(ReqTypeIn > 1)))
00307 {
00308 #ifndef CIGI_NO_EXCEPT
00309 throw CigiValueOutOfRangeException("ReqType",(ReqTypeGrp)ReqTypeIn,0,1);
00310 #endif
00311 return(CIGI_ERROR_VALUE_OUT_OF_RANGE);
00312 }
00313 #endif
00314
00315 ReqType = ReqTypeIn;
00316 return(CIGI_SUCCESS);
00317
00318 }
00319
00320