00001
00052 #define _EXPORT_CCL_
00053
00054 #include "CigiSensorXRespV3.h"
00055 #include "CigiSwapping.h"
00056 #include "CigiExceptions.h"
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067 CigiSensorXRespV3::CigiSensorXRespV3()
00068 {
00069
00070 PacketID = CIGI_SENSOR_XRESP_PACKET_ID_V3;
00071 PacketSize = CIGI_SENSOR_XRESP_PACKET_SIZE_V3;
00072 Version = 3;
00073 MinorVersion = 0;
00074
00075 ViewID = 0;
00076 SensorID = 0;
00077 SensorStat = Searching;
00078 EntityTgt = false;
00079 EntityID = 0;
00080 GateSzX = 0;
00081 GateSzY = 0;
00082 GateXoff = 0.0;
00083 GateYoff = 0.0;
00084 FrameCntr = 0;
00085 TrackPntLat = 0.0;
00086 TrackPntLon = 0.0;
00087 TrackPntAlt = 0.0;
00088
00089 }
00090
00091
00092
00093
00094 CigiSensorXRespV3::~CigiSensorXRespV3()
00095 {
00096
00097 }
00098
00099
00100
00101
00102
00103
00104
00105
00106 int CigiSensorXRespV3::Pack(CigiBasePacket * Base, Cigi_uint8 * Buff, void *Spec) const
00107 {
00108 PackPointer CDta;
00109
00110 CigiBaseSensorResp * Data = ( CigiBaseSensorResp *)Base;
00111
00112 CDta.c = Buff;
00113
00114 *CDta.c++ = PacketID;
00115 *CDta.c++ = PacketSize;
00116
00117 *CDta.s++ = Data->ViewID;
00118 *CDta.c++ = Data->SensorID;
00119
00120 Cigi_uint8 HDta = (Data->EntityTgt) ? 0x04 : 0x00;
00121 HDta |= (Cigi_uint8)(Data->SensorStat & 0x03);
00122 *CDta.c++ = HDta;
00123
00124 *CDta.s++ = Data->EntityID;
00125 *CDta.s++ = Data->GateSzX;
00126 *CDta.s++ = Data->GateSzY;
00127 *CDta.f++ = Data->GateXoff;
00128 *CDta.f++ = Data->GateYoff;
00129 *CDta.l++ = Data->FrameCntr;
00130 *CDta.d++ = Data->TrackPntLat;
00131 *CDta.d++ = Data->TrackPntLon;
00132 *CDta.d++ = Data->TrackPntAlt;
00133
00134 return(PacketSize);
00135
00136 }
00137
00138
00139
00140
00141 int CigiSensorXRespV3::Unpack(Cigi_uint8 * Buff, bool Swap, void *Spec)
00142 {
00143 PackPointer CDta;
00144
00145 CDta.c = Buff;
00146
00147 CDta.c += 2;
00148
00149 if(!Swap)
00150 {
00151 ViewID = *CDta.s++;
00152 SensorID = *CDta.c++;
00153
00154 Cigi_uint8 HDta = *CDta.c++;
00155 SensorStat = (SensorStatGrp)(HDta & 0x03);
00156 EntityTgt = ((HDta & 0x04) != 0);
00157
00158 EntityID = *CDta.s++;
00159 GateSzX = *CDta.s++;
00160 GateSzY = *CDta.s++;
00161 GateXoff = *CDta.f++;
00162 GateYoff = *CDta.f++;
00163 FrameCntr = *CDta.l++;
00164 TrackPntLat = *CDta.d++;
00165 TrackPntLon = *CDta.d++;
00166 TrackPntAlt = *CDta.d++;
00167 }
00168 else
00169 {
00170 CigiSwap2(&ViewID, CDta.s++);
00171 SensorID = *CDta.c++;
00172
00173 Cigi_uint8 HDta = *CDta.c++;
00174 SensorStat = (SensorStatGrp)(HDta & 0x03);
00175 EntityTgt = ((HDta & 0x04) != 0);
00176
00177 CigiSwap2(&EntityID, CDta.s++);
00178 CigiSwap2(&GateSzX, CDta.s++);
00179 CigiSwap2(&GateSzY, CDta.s++);
00180 CigiSwap4(&GateXoff, CDta.f++);
00181 CigiSwap4(&GateYoff, CDta.f++);
00182 CigiSwap4(&FrameCntr, CDta.l++);
00183 CigiSwap8(&TrackPntLat, CDta.d++);
00184 CigiSwap8(&TrackPntLon, CDta.d++);
00185 CigiSwap8(&TrackPntAlt, CDta.d++);
00186 }
00187
00188 return(PacketSize);
00189
00190 }
00191
00192
00193
00194
00195
00196
00197
00198
00199
00200
00201 int CigiSensorXRespV3::GetCnvt(CigiVersionID &CnvtVersion,
00202 CigiCnvtInfoType::Type &CnvtInfo)
00203 {
00204 CnvtInfo.ProcID = CigiProcessType::ProcStd;
00205
00206
00207
00208 if(CnvtVersion.CigiMajorVersion < 3)
00209 CnvtInfo.CnvtPacketID = CIGI_SENSOR_RESP_PACKET_ID_V2;
00210 else
00211 CnvtInfo.CnvtPacketID = CIGI_SENSOR_XRESP_PACKET_ID_V3;
00212
00213 return(CIGI_SUCCESS);
00214 }
00215
00216
00217
00218
00219
00220
00221
00222
00223
00224
00225
00226
00227
00228 int CigiSensorXRespV3::SetTrackPntLat(const double TrackPntLatIn, bool bndchk)
00229 {
00230
00231 #ifndef CIGI_NO_BND_CHK
00232 if(bndchk && ((TrackPntLatIn < -90.0)||(TrackPntLatIn > 90.0)))
00233 {
00234 #ifndef CIGI_NO_EXCEPT
00235 throw CigiValueOutOfRangeException("TrackPntLat",(double)TrackPntLatIn,-90.0,90.0);
00236 #endif
00237 return(CIGI_ERROR_VALUE_OUT_OF_RANGE);
00238 }
00239 #endif
00240
00241 TrackPntLat = TrackPntLatIn;
00242 return(CIGI_SUCCESS);
00243
00244 }
00245
00246
00247
00248
00249
00250 int CigiSensorXRespV3::SetTrackPntLon(const double TrackPntLonIn, bool bndchk)
00251 {
00252
00253 #ifndef CIGI_NO_BND_CHK
00254 if(bndchk && ((TrackPntLonIn < -180.0)||(TrackPntLonIn > 180.0)))
00255 {
00256 #ifndef CIGI_NO_EXCEPT
00257 throw CigiValueOutOfRangeException("TrackPntLon",(double)TrackPntLonIn,-180.0,180.0);
00258 #endif
00259 return(CIGI_ERROR_VALUE_OUT_OF_RANGE);
00260 }
00261 #endif
00262
00263 TrackPntLon = TrackPntLonIn;
00264 return(CIGI_SUCCESS);
00265
00266 }
00267
00268