CigiSensorRespV1.cpp

Go to the documentation of this file.
00001 
00055 #define _EXPORT_CCL_
00056 
00057 #include "CigiSensorRespV1.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 // CigiSensorRespV1
00084 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00085 CigiSensorRespV1::CigiSensorRespV1()
00086 {
00087 
00088    PacketID = CIGI_SENSOR_RESP_PACKET_ID_V1;
00089    PacketSize = CIGI_SENSOR_RESP_PACKET_SIZE_V1;
00090    Version = 1;
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 // ~CigiSensorRespV1
00111 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00112 CigiSensorRespV1::~CigiSensorRespV1()
00113 {
00114 
00115 }
00116 
00117 // ====================================================================
00118 // Pack and Unpack
00119 // ====================================================================
00120 
00121 // ================================================
00122 // Pack
00123 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00124 int CigiSensorRespV1::Pack(CigiBasePacket * Base, Cigi_uint8 * Buff, void *Spec) const
00125 {
00126    double DBuf[6];
00127 
00128    Cigi_uint8 *tBuf = (Cigi_uint8 *)DBuf;
00129 
00130    Cigi_int16  tsCnvt;
00131    Cigi_int32   tlCnvt;
00132    double tdCnvt;
00133 
00134    union Conversion_short
00135    {
00136       Cigi_uint16 u;
00137       Cigi_int16 s;
00138    } tuCnvt;
00139 
00140    PackPointer CDta;
00141 
00142    CigiBaseSensorResp * Data = ( CigiBaseSensorResp *)Base;
00143 
00144    CDta.d = DBuf;
00145 
00146    *CDta.c++ = PacketID;
00147    *CDta.c++ = PacketSize;
00148 
00149    Cigi_uint8 HDta = (Cigi_uint8)((Data->ViewID << 3) & 0x00f8);
00150    HDta |= (Cigi_uint8)((Data->SensorStat << 1) & 0x06);
00151    *CDta.c++ = HDta;
00152 
00153    *CDta.c++ = Data->SensorID;
00154 
00155    tdCnvt = (double)Data->GateXoff;
00156    if(tdCnvt < 0.0)
00157       tdCnvt += 360.0;
00158    tlCnvt = CIGI_FLOAT_TO_BA(tdCnvt);
00159    if((tlCnvt > 65535)||(tlCnvt < 0))
00160       tsCnvt = 0;
00161    else
00162    {
00163       tuCnvt.u = (Cigi_uint16)tlCnvt;
00164       tsCnvt = tuCnvt.s;
00165    }
00166    CIGI_SCOPY2(CDta.s++, &tsCnvt);
00167 
00168    tdCnvt = (double)Data->GateYoff;
00169    if(tdCnvt < 0.0)
00170       tdCnvt += 360.0;
00171    tlCnvt = CIGI_FLOAT_TO_BA(tdCnvt);
00172    if((tlCnvt > 65535)||(tlCnvt < 0))
00173       tsCnvt = 0;
00174    else
00175    {
00176       tuCnvt.u = (Cigi_uint16)tlCnvt;
00177       tsCnvt = tuCnvt.s;
00178    }
00179    CIGI_SCOPY2(CDta.s++, &tsCnvt);
00180 
00181    CIGI_SCOPY2(CDta.s++, &Data->GateSzX);
00182    CIGI_SCOPY2(CDta.s++, &Data->GateSzY);
00183 
00184    memcpy(Buff,tBuf,CIGI_SENSOR_RESP_PACKET_SIZE_V1);
00185 
00186    return(PacketSize);
00187 
00188 }
00189 
00190 // ================================================
00191 // Unpack
00192 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00193 int CigiSensorRespV1::Unpack(Cigi_uint8 * Buff, bool Swap, void *Spec)
00194 {
00195    double DBuf[6];
00196 
00197    Cigi_uint8 *tBuf = (Cigi_uint8 *)DBuf;
00198 
00199    Cigi_int16  tsCnvt;
00200 
00201    PackPointer CDta;
00202 
00203    memcpy(tBuf,Buff,CIGI_SENSOR_RESP_PACKET_SIZE_V1);
00204 
00205    CDta.d = DBuf;
00206 
00207    CDta.c += 2;  // Step over packet id and size
00208 
00209    Cigi_uint8 HDta = *CDta.c++;
00210    ViewID = (Cigi_uint16)((HDta >> 3) & 0x1f);
00211    SensorStat = (SensorStatGrp)((HDta >> 1) & 0x03);
00212    SensorID = *CDta.c++;
00213 
00214    CIGI_SCOPY2(&tsCnvt, CDta.s++);
00215    GateXoff = (float)CIGI_BA_TO_FLOAT(tsCnvt);
00216    if(GateXoff > 180.0)
00217       GateXoff -= 360.0;
00218 
00219    CIGI_SCOPY2(&tsCnvt, CDta.s++);
00220    GateYoff = (float)CIGI_BA_TO_FLOAT(tsCnvt);
00221    if(GateYoff > 180.0)
00222       GateYoff -= 360.0;
00223 
00224    CIGI_SCOPY2(&GateSzX, CDta.s++);
00225    CIGI_SCOPY2(&GateSzY, CDta.s++);
00226 
00227    return(PacketSize);
00228 
00229 }
00230 
00231 
00232 
00233 // ====================================================================
00234 // Accessors
00235 // ====================================================================
00236 
00237 
00238 // ================================================
00239 // ViewID
00240 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00241 int CigiSensorRespV1::SetViewID(const Cigi_uint16 ViewIDIn, bool bndchk)
00242 {
00243 
00244 #ifndef CIGI_NO_BND_CHK
00245    if(bndchk && ((ViewIDIn < 0)||(ViewIDIn > 32)))
00246    {
00247 #ifndef CIGI_NO_EXCEPT
00248       throw CigiValueOutOfRangeException("ViewID",(Cigi_uint16)ViewIDIn,0,32);
00249 #endif
00250       return(CIGI_ERROR_VALUE_OUT_OF_RANGE);
00251    }
00252 #endif
00253 
00254    ViewID = ViewIDIn;
00255    return(CIGI_SUCCESS);
00256 
00257 }
00258 
00259 

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