00001
00063 #define _EXPORT_CCL_
00064
00065 #include "CigiHatHotXRespV3.h"
00066 #include "CigiSwapping.h"
00067 #include "CigiExceptions.h"
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
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
00102
00103 CigiHatHotXRespV3::~CigiHatHotXRespV3()
00104 {
00105
00106 }
00107
00108
00109
00110
00111
00112
00113
00114
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
00171
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;
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;
00232
00233 HostFrame = 0;
00234
00235 return(PacketSize);
00236
00237 }
00238
00239
00240
00241
00242
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
00258 CnvtInfo.CnvtPacketID = CIGI_HAT_HOT_XRESP_PACKET_ID_V3;
00259 break;
00260 }
00261
00262 return(CIGI_SUCCESS);
00263 }
00264
00265
00266
00267
00268
00269
00270
00271
00272
00273
00274
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
00296
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