00001
00052 #define _EXPORT_CCL_
00053
00054 #include "CigiSensorRespV3.h"
00055 #include "CigiSwapping.h"
00056 #include "CigiExceptions.h"
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067 CigiSensorRespV3::CigiSensorRespV3()
00068 {
00069
00070 PacketID = CIGI_SENSOR_RESP_PACKET_ID_V3;
00071 PacketSize = CIGI_SENSOR_RESP_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 CigiSensorRespV3::~CigiSensorRespV3()
00095 {
00096
00097 }
00098
00099
00100
00101
00102
00103
00104
00105
00106 int CigiSensorRespV3::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++ = 0;
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
00131 return(PacketSize);
00132
00133 }
00134
00135
00136
00137
00138 int CigiSensorRespV3::Unpack(Cigi_uint8 * Buff, bool Swap, void *Spec)
00139 {
00140 PackPointer CDta;
00141
00142 CDta.c = Buff;
00143
00144 CDta.c += 2;
00145
00146 if(!Swap)
00147 {
00148 ViewID = *CDta.s++;
00149 SensorID = *CDta.c++;
00150
00151 Cigi_uint8 HDta = *CDta.c++;
00152 SensorStat = (SensorStatGrp)(HDta & 0x03);
00153 EntityTgt = ((HDta & 0x04) != 0);
00154
00155 CDta.s++;
00156
00157 GateSzX = *CDta.s++;
00158 GateSzY = *CDta.s++;
00159 GateXoff = *CDta.f++;
00160 GateYoff = *CDta.f++;
00161 FrameCntr = *CDta.l++;
00162 }
00163 else
00164 {
00165 CigiSwap2(&ViewID, CDta.s++);
00166 SensorID = *CDta.c++;
00167
00168 Cigi_uint8 HDta = *CDta.c++;
00169 SensorStat = (SensorStatGrp)(HDta & 0x03);
00170 EntityTgt = ((HDta & 0x04) != 0);
00171
00172 CDta.s++;
00173
00174 CigiSwap2(&GateSzX, CDta.s++);
00175 CigiSwap2(&GateSzY, CDta.s++);
00176 CigiSwap4(&GateXoff, CDta.f++);
00177 CigiSwap4(&GateYoff, CDta.f++);
00178 CigiSwap4(&FrameCntr, CDta.l++);
00179 }
00180
00181 return(PacketSize);
00182
00183 }
00184
00185
00186
00187
00188
00189
00190
00191