00001
00059 #define _EXPORT_CCL_
00060
00061 #include "CigiLosRespV1.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 CigiLosRespV1::CigiLosRespV1()
00090 {
00091
00092 PacketID = CIGI_LOS_RESP_PACKET_ID_V1;
00093 PacketSize = CIGI_LOS_RESP_PACKET_SIZE_V1;
00094 Version = 1;
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 CigiLosRespV1::~CigiLosRespV1()
00125 {
00126
00127 }
00128
00129
00130
00131
00132
00133
00134
00135
00136 int CigiLosRespV1::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 *CDta.l++ = 0;
00164
00165 CIGI_SCOPY4(CDta.l++, &Data->Material);
00166
00167 float tflt = (float)Data->Range;
00168 CIGI_SCOPY4(CDta.f++, &tflt);
00169
00170 tflt = (float)Data->AltOrZoff;
00171 CIGI_SCOPY4(CDta.f++, &tflt);
00172
00173 CIGI_SCOPY8(CDta.d++, &Data->LatOrXoff);
00174 CIGI_SCOPY8(CDta.d++, &Data->LonOrYoff);
00175
00176 memcpy(Buff,tBuf,CIGI_LOS_RESP_PACKET_SIZE_V1);
00177
00178 return(PacketSize);
00179
00180 }
00181
00182
00183
00184
00185 int CigiLosRespV1::Unpack(Cigi_uint8 * Buff, bool Swap, void *Spec)
00186 {
00187 double DBuf[6];
00188
00189 Cigi_uint8 *tBuf = (Cigi_uint8 *)DBuf;
00190
00191 PackPointer CDta;
00192
00193 memcpy(tBuf,Buff,CIGI_LOS_RESP_PACKET_SIZE_V1);
00194
00195 CDta.d = DBuf;
00196
00197 CDta.c += 2;
00198
00199 CIGI_SCOPY2(&LosID, CDta.s++);
00200
00201 Cigi_uint8 HDta = *CDta.c++;
00202 Valid = ((HDta & 0x80) != 0);
00203 Visible = ((HDta & 0x40) != 0);
00204
00205 CDta.c += 7;
00206
00207 CIGI_SCOPY4(&Material, CDta.l++);
00208
00209 float tflt;
00210
00211 CIGI_SCOPY4(&tflt, CDta.f++);
00212 Range = (double)tflt;
00213
00214 CIGI_SCOPY4(&tflt, CDta.f++);
00215 AltOrZoff = (double)tflt;
00216
00217 CIGI_SCOPY8(&LatOrXoff, CDta.d++);
00218 CIGI_SCOPY8(&LonOrYoff, CDta.d++);
00219
00220 HostFrame = 0;
00221
00222 ValidV1or2 = true;
00223
00224 return(PacketSize);
00225
00226 }
00227
00228
00229
00230
00231
00232 int CigiLosRespV1::GetCnvt(CigiVersionID &CnvtVersion,
00233 CigiCnvtInfoType::Type &CnvtInfo)
00234 {
00235 CnvtInfo.ProcID = CigiProcessType::ProcStd;
00236
00237
00238
00239
00240
00241
00242 if(CnvtVersion.CigiMajorVersion < 3)
00243 CnvtInfo.CnvtPacketID = CIGI_LOS_RESP_PACKET_ID_V2;
00244 else
00245 CnvtInfo.CnvtPacketID = CIGI_LOS_RESP_PACKET_ID_V3;
00246
00247 return(CIGI_SUCCESS);
00248 }
00249
00250
00251
00252
00253
00254
00255
00256
00257
00258
00259