00001
00059 #define _EXPORT_CCL_
00060
00061 #include "CigiLosRespV2.h"
00062 #include "CigiSwapping.h"
00063 #include "CigiExceptions.h"
00064
00065 #include <memory.h>
00066
00067
00068 #ifdef CIGI_LITTLE_ENDIAN
00069 #define CIGI_SCOPY2 CigiSwap2
00070 #define CIGI_SCOPY4 CigiSwap4
00071 #define CIGI_SCOPY8 CigiSwap8
00072 #else
00073 #define CIGI_SCOPY2 CigiCopy2
00074 #define CIGI_SCOPY4 CigiCopy4
00075 #define CIGI_SCOPY8 CigiCopy8
00076 #endif
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089 CigiLosRespV2::CigiLosRespV2()
00090 {
00091
00092 PacketID = CIGI_LOS_RESP_PACKET_ID_V2;
00093 PacketSize = CIGI_LOS_RESP_PACKET_SIZE_V2;
00094 Version = 2;
00095 MinorVersion = 0;
00096
00097 LosID = 0;
00098 Valid = false;
00099 EntityIDValid = false;
00100 RangeValid = false;
00101 Visible = false;
00102 IntersectionCoordSys = Geodetic;
00103 HostFrame = 0;
00104 RespCount = 0;
00105 EntityID = 0;
00106 Range = 0.0;
00107 LatOrXoff = 0.0;
00108 LonOrYoff = 0.0;
00109 AltOrZoff = 0.0;
00110 Red = 0;
00111 Green = 0;
00112 Blue = 0;
00113 Alpha = 0;
00114 Material = 0;
00115 NormalAz = 0.0;
00116 NormalEl = 0.0;
00117 ValidV1or2 = true;
00118
00119 }
00120
00121
00122
00123
00124 CigiLosRespV2::~CigiLosRespV2()
00125 {
00126
00127 }
00128
00129
00130
00131
00132
00133
00134
00135
00136 int CigiLosRespV2::Pack(CigiBasePacket * Base, Cigi_uint8 * Buff, void *Spec) const
00137 {
00138 double DBuf[6];
00139
00140 Cigi_uint8 *tBuf = (Cigi_uint8 *)DBuf;
00141
00142 PackPointer CDta;
00143
00144 CigiBaseLosResp * Data = ( CigiBaseLosResp *)Base;
00145
00146 if(!Data->ValidV1or2)
00147 return(0);
00148
00149 CDta.d = DBuf;
00150
00151 *CDta.c++ = PacketID;
00152 *CDta.c++ = PacketSize;
00153
00154 CIGI_SCOPY2(CDta.s++, &Data->LosID);
00155
00156 Cigi_uint8 HDta = (Data->Valid) ? 0x80 : 0x00;
00157 HDta |= (Data->Visible) ? 0x40 : 0x00;
00158 *CDta.c++ = HDta;
00159
00160 *CDta.c++ = 0;
00161 *CDta.s++ = 0;
00162
00163 CIGI_SCOPY4(CDta.l++, &Data->Material);
00164
00165 float tflt = (float)Data->Range;
00166 CIGI_SCOPY4(CDta.f++, &tflt);
00167
00168 CIGI_SCOPY8(CDta.d++, &Data->AltOrZoff);
00169
00170 CIGI_SCOPY8(CDta.d++, &Data->LatOrXoff);
00171 CIGI_SCOPY8(CDta.d++, &Data->LonOrYoff);
00172
00173 memcpy(Buff,tBuf,CIGI_LOS_RESP_PACKET_SIZE_V2);
00174
00175 return(PacketSize);
00176
00177 }
00178
00179
00180
00181
00182 int CigiLosRespV2::Unpack(Cigi_uint8 * Buff, bool Swap, void *Spec)
00183 {
00184 double DBuf[6];
00185
00186 Cigi_uint8 *tBuf = (Cigi_uint8 *)DBuf;
00187
00188 PackPointer CDta;
00189
00190 memcpy(tBuf,Buff,CIGI_LOS_RESP_PACKET_SIZE_V2);
00191
00192 CDta.d = DBuf;
00193
00194 CDta.c += 2;
00195
00196 CIGI_SCOPY2(&LosID, CDta.s++);
00197
00198 Cigi_uint8 HDta = *CDta.c++;
00199 Valid = ((HDta & 0x80) != 0);
00200 Visible = ((HDta & 0x40) != 0);
00201
00202 CDta.c += 3;
00203
00204 CIGI_SCOPY4(&Material, CDta.l++);
00205
00206 float tflt;
00207
00208 CIGI_SCOPY4(&tflt, CDta.f++);
00209 Range = (double)tflt;
00210
00211 CIGI_SCOPY8(&AltOrZoff, CDta.d++);
00212
00213 CIGI_SCOPY8(&LatOrXoff, CDta.d++);
00214 CIGI_SCOPY8(&LonOrYoff, CDta.d++);
00215
00216
00217 HostFrame = 0;
00218
00219 ValidV1or2 = true;
00220
00221 return(PacketSize);
00222
00223 }
00224
00225
00226
00227
00228
00229 int CigiLosRespV2::GetCnvt(CigiVersionID &CnvtVersion,
00230 CigiCnvtInfoType::Type &CnvtInfo)
00231 {
00232 CnvtInfo.ProcID = CigiProcessType::ProcStd;
00233
00234
00235
00236
00237
00238
00239 if(CnvtVersion.CigiMajorVersion < 3)
00240 CnvtInfo.CnvtPacketID = CIGI_LOS_RESP_PACKET_ID_V2;
00241 else
00242 CnvtInfo.CnvtPacketID = CIGI_LOS_RESP_PACKET_ID_V3;
00243
00244 return(CIGI_SUCCESS);
00245 }
00246
00247
00248
00249
00250
00251
00252
00253