CigiSensorRespV2.cpp

Go to the documentation of this file.
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 // Construction/Destruction
00079 // ====================================================================
00080 
00081 
00082 // ================================================
00083 // CigiSensorRespV2
00084 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
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 // ~CigiSensorRespV2
00111 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00112 CigiSensorRespV2::~CigiSensorRespV2()
00113 {
00114 
00115 }
00116 
00117 // ====================================================================
00118 // Pack and Unpack
00119 // ====================================================================
00120 
00121 // ================================================
00122 // Pack
00123 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
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 // Unpack
00164 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
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;  // Step over packet id and size
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 // Accessors
00204 // ====================================================================
00205 
00206 
00207 // ================================================
00208 // ViewID
00209 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
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 

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