00001
00054 #define _EXPORT_CCL_
00055
00056 #include "CigiHatHotXRespV3_2.h"
00057 #include "CigiSwapping.h"
00058 #include "CigiExceptions.h"
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
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
00093
00094 CigiHatHotXRespV3_2::~CigiHatHotXRespV3_2()
00095 {
00096
00097 }
00098
00099
00100
00101
00102
00103
00104
00105
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
00165
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;
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;
00230
00231 return(PacketSize);
00232
00233 }
00234
00235
00236
00237
00238
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
00254 CnvtInfo.CnvtPacketID = CIGI_HAT_HOT_XRESP_PACKET_ID_V3;
00255 break;
00256 }
00257
00258 return(CIGI_SUCCESS);
00259 }
00260
00261
00262
00263
00264
00265
00266
00267
00268
00269
00270
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
00292
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