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
00063
00064
00065
00066
00067
00068
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
00093
00094 CigiHatHotRespV3_2::~CigiHatHotRespV3_2()
00095 {
00096
00097 }
00098
00099
00100
00101
00102
00103
00104
00105
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
00161
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;
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
00256
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
00266
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
00277 CnvtInfo.CnvtPacketID = CIGI_HAT_HOT_RESP_PACKET_ID_V3;
00278 break;
00279 }
00280
00281 return(CIGI_SUCCESS);
00282 }
00283
00284
00285
00286
00287
00288
00289
00290
00291
00292
00293
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