00001
00055 #define _EXPORT_CCL_
00056
00057 #include "CigiSensorRespV2.h"
00058 #include "CigiSwapping.h"
00059 #include "CigiExceptions.h"
00060
00061 #include <memory.h>
00062
00063
00064 #ifdef CIGI_LITTLE_ENDIAN
00065 #define CIGI_SCOPY2 CigiSwap2
00066 #define CIGI_SCOPY4 CigiSwap4
00067 #define CIGI_SCOPY8 CigiSwap8
00068 #else
00069 #define CIGI_SCOPY2 CigiCopy2
00070 #define CIGI_SCOPY4 CigiCopy4
00071 #define CIGI_SCOPY8 CigiCopy8
00072 #endif
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085 CigiSensorRespV2::CigiSensorRespV2()
00086 {
00087
00088 PacketID = CIGI_SENSOR_RESP_PACKET_ID_V2;
00089 PacketSize = CIGI_SENSOR_RESP_PACKET_SIZE_V2;
00090 Version = 2;
00091 MinorVersion = 0;
00092
00093 ViewID = 0;
00094 SensorID = 0;
00095 SensorStat = Searching;
00096 EntityTgt = false;
00097 EntityID = 0;
00098 GateSzX = 0;
00099 GateSzY = 0;
00100 GateXoff = 0.0;
00101 GateYoff = 0.0;
00102 FrameCntr = 0;
00103 TrackPntLat = 0.0;
00104 TrackPntLon = 0.0;
00105 TrackPntAlt = 0.0;
00106
00107 }
00108
00109
00110
00111
00112 CigiSensorRespV2::~CigiSensorRespV2()
00113 {
00114
00115 }
00116
00117
00118
00119
00120
00121
00122
00123
00124 int CigiSensorRespV2::Pack(CigiBasePacket * Base, Cigi_uint8 * Buff, void *Spec) const
00125 {
00126 double DBuf[6];
00127
00128 Cigi_uint8 *tBuf = (Cigi_uint8 *)DBuf;
00129
00130 PackPointer CDta;
00131
00132 CigiBaseSensorResp * Data = ( CigiBaseSensorResp *)Base;
00133
00134 CDta.d = DBuf;
00135
00136 *CDta.c++ = PacketID;
00137 *CDta.c++ = PacketSize;
00138
00139 Cigi_uint8 HDta = (Cigi_uint8)((Data->ViewID << 3) & 0x00f8);
00140 HDta |= (Cigi_uint8)((Data->SensorStat << 1) & 0x06);
00141 *CDta.c++ = HDta;
00142
00143 *CDta.c++ = Data->SensorID;
00144
00145 float tfoff = (float)Data->GateXoff / 0.015625f;
00146 Cigi_int16 tsoff = (Cigi_int16)tfoff;
00147 CIGI_SCOPY2(CDta.s++, &tsoff);
00148
00149 tfoff = Data->GateYoff / 0.015625f;
00150 tsoff = (Cigi_int16)tfoff;
00151 CIGI_SCOPY2(CDta.s++, &tsoff);
00152
00153 CIGI_SCOPY2(CDta.s++, &Data->GateSzX);
00154 CIGI_SCOPY2(CDta.s++, &Data->GateSzY);
00155
00156 memcpy(Buff,tBuf,CIGI_SENSOR_RESP_PACKET_SIZE_V2);
00157
00158 return(PacketSize);
00159
00160 }
00161
00162
00163
00164
00165 int CigiSensorRespV2::Unpack(Cigi_uint8 * Buff, bool Swap, void *Spec)
00166 {
00167 double DBuf[6];
00168
00169 Cigi_uint8 *tBuf = (Cigi_uint8 *)DBuf;
00170
00171 PackPointer CDta;
00172
00173 memcpy(tBuf,Buff,CIGI_SENSOR_RESP_PACKET_SIZE_V2);
00174
00175 CDta.d = DBuf;
00176
00177 CDta.c += 2;
00178
00179 Cigi_uint8 HDta = *CDta.c++;
00180 ViewID = (Cigi_uint16)((HDta >> 3) & 0x1f);
00181 SensorStat = (SensorStatGrp)((HDta >> 1) & 0x03);
00182 SensorID = *CDta.c++;
00183
00184 Cigi_int16 tsoff;
00185 CIGI_SCOPY2(&tsoff, CDta.s++);
00186 float tfoff = (float)tsoff;
00187 GateXoff = tfoff * 0.015625f;
00188
00189 CIGI_SCOPY2(&tsoff, CDta.s++);
00190 tfoff = (float)tsoff;
00191 GateYoff = tfoff * 0.015625f;
00192
00193 CIGI_SCOPY2(&GateSzX, CDta.s++);
00194 CIGI_SCOPY2(&GateSzY, CDta.s++);
00195
00196 return(PacketSize);
00197
00198 }
00199
00200
00201
00202
00203
00204
00205
00206
00207
00208
00209
00210 int CigiSensorRespV2::SetViewID(const Cigi_uint16 ViewIDIn, bool bndchk)
00211 {
00212
00213 #ifndef CIGI_NO_BND_CHK
00214 if(bndchk && ((ViewIDIn < 0)||(ViewIDIn > 32)))
00215 {
00216 #ifndef CIGI_NO_EXCEPT
00217 throw CigiValueOutOfRangeException("ViewID",(Cigi_uint16)ViewIDIn,0,32);
00218 #endif
00219 return(CIGI_ERROR_VALUE_OUT_OF_RANGE);
00220 }
00221 #endif
00222
00223 ViewID = ViewIDIn;
00224 return(CIGI_SUCCESS);
00225
00226 }
00227
00228