CigiSensorXRespV3.cpp

Go to the documentation of this file.
00001 
00052 #define _EXPORT_CCL_
00053 
00054 #include "CigiSensorXRespV3.h"
00055 #include "CigiSwapping.h"
00056 #include "CigiExceptions.h"
00057 
00058 
00059 // ====================================================================
00060 // Construction/Destruction
00061 // ====================================================================
00062 
00063 
00064 // ================================================
00065 // CigiSensorXRespV3
00066 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
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 // ~CigiSensorXRespV3
00093 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00094 CigiSensorXRespV3::~CigiSensorXRespV3()
00095 {
00096 
00097 }
00098 
00099 // ====================================================================
00100 // Pack and Unpack
00101 // ====================================================================
00102 
00103 // ================================================
00104 // Pack
00105 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
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 // Unpack
00140 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
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;  // Step over packet id and size
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 // Conversion Control
00195 // ====================================================================
00196 
00197 
00198 // ================================================
00199 // GetCnvt
00200 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00201 int CigiSensorXRespV3::GetCnvt(CigiVersionID &CnvtVersion,
00202                                 CigiCnvtInfoType::Type &CnvtInfo)
00203 {
00204    CnvtInfo.ProcID = CigiProcessType::ProcStd;
00205 
00206    // Note: CIGI_SENSOR_RESP_PACKET_ID_V1 &
00207    // CIGI_SENSOR_RESP_PACKET_ID_V2 are the same
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 // Accessors
00222 // ====================================================================
00223 
00224 
00225 // ================================================
00226 // TrackPntLat
00227 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
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 // TrackPntLon
00249 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
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 

Generated on Wed Apr 29 08:59:59 2009 for CCL by  doxygen 1.4.7