CigiIGCtrlV2.cpp

Go to the documentation of this file.
00001 
00063 #define _EXPORT_CCL_
00064 
00065 #include "CigiIGCtrlV2.h"
00066 #include "CigiExceptions.h"
00067 #include "CigiSwapping.h"
00068 #include <memory.h>
00069 
00070 
00071 #ifdef CIGI_LITTLE_ENDIAN
00072    #define CIGI_SCOPY2 CigiSwap2
00073    #define CIGI_SCOPY4 CigiSwap4
00074    #define CIGI_SCOPY8 CigiSwap8
00075 #else
00076    #define CIGI_SCOPY2 CigiCopy2
00077    #define CIGI_SCOPY4 CigiCopy4
00078    #define CIGI_SCOPY8 CigiCopy8
00079 #endif
00080 
00081 // ====================================================================
00082 // Construction/Destruction
00083 // ====================================================================
00084 
00085 // ================================================
00086 // CigiIGCtrlV2
00087 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00088 CigiIGCtrlV2::CigiIGCtrlV2()
00089 {
00090 
00091    PacketID = CIGI_IG_CTRL_PACKET_ID_V2;
00092    PacketSize = CIGI_IG_CTRL_PACKET_SIZE_V2;
00093    Version = 2;
00094    MinorVersion = 0;
00095 
00096    BSwapEn = false;
00097    DatabaseID = 0;
00098    FrameCntr = 0;
00099    TimeStampV1 = 0;
00100    TimeStampV2 = 0.0f;
00101    TimeStampV3 = 0;
00102    ByteSwap = 0x8000;
00103    IGMode = Standby;
00104    TrackDeviceEn = Disable;
00105    BoresightTrackDevice = false;
00106    TimestampValid = false;
00107    SmoothingEn = false;
00108    LastRcvdIGFrame = 0;
00109 
00110 }
00111 
00112 
00113 // ================================================
00114 // ~CigiIGCtrlV2
00115 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00116 CigiIGCtrlV2::~CigiIGCtrlV2()
00117 {
00118 
00119 }
00120 
00121 
00122 
00123 // ====================================================================
00124 // Pack and Unpack
00125 // ====================================================================
00126 
00127 // ================================================
00128 // Pack
00129 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00130 int CigiIGCtrlV2::Pack(CigiBasePacket * Base, Cigi_uint8 * Buff, void *Spec) const
00131 {
00132    PackPointer CDta;
00133 
00134    CigiBaseIGCtrl *Data = ( CigiBaseIGCtrl *) Base;
00135 
00136 
00137    CDta.c = Buff;
00138 
00139    *CDta.c++ = PacketID;
00140    *CDta.c++ = PacketSize;
00141    *CDta.c++ = Version;
00142 
00143    *CDta.b++ = Data->DatabaseID;
00144 
00145    Cigi_uint8 HDta = (Data->BoresightTrackDevice) ? 0x10 : 0;
00146    HDta |= (Cigi_uint8)((Data->TrackDeviceEn << 5) & 0x20);
00147    HDta |= (Cigi_uint8)((Data->IGMode << 6) & 0xc0);
00148 
00149    *CDta.c++ = HDta;
00150    *CDta.c++ = 0;
00151    *CDta.c++ = 0;
00152    *CDta.c++ = 0;
00153 
00154    CIGI_SCOPY4(CDta.l++, &Data->FrameCntr);
00155    CIGI_SCOPY4(CDta.f++, &Data->TimeStampV2);
00156 
00157    return(PacketSize);
00158 
00159 }
00160 
00161 
00162 // ================================================
00163 // Unpack
00164 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00165 int CigiIGCtrlV2::Unpack(Cigi_uint8 * Buff, bool Swap, void *Spec)
00166 {
00167 
00168    PackPointer CDta;
00169 
00170    CDta.c = Buff;
00171 
00172    CDta.c += 3;
00173 
00174    DatabaseID = *CDta.b++;
00175    Cigi_uint8 HDta = *CDta.c;
00176 
00177    IGMode = (IGModeGrp)((HDta >> 6) & 0x03);
00178    TrackDeviceEn = (TrackDeviceEnGrp)((HDta >> 5) & 0x01);
00179    BoresightTrackDevice = ((HDta & 0x10) != 0);
00180 
00181    CDta.l++;
00182 
00183    CIGI_SCOPY4(&FrameCntr,CDta.l++);
00184    CIGI_SCOPY4(&TimeStampV2,CDta.f++);
00185 
00186    TimeStampV1 = (Cigi_uint32)TimeStampV2;
00187    TimeStampV3 = TimeStampV1 / 10;
00188 
00189    LastRcvdIGFrame = FrameCntr;
00190 
00191    Swap = false;
00192 
00193    return(CIGI_SUCCESS);
00194 
00195 }
00196 
00197 
00198 // ====================================================================
00199 // Accessors
00200 // ====================================================================
00201 
00202 
00203 
00204 // ================================================
00205 // SetTimeStamp
00206 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00207 int CigiIGCtrlV2::SetTimeStamp(const float TimeStamp, bool bndchk)
00208 {
00209 
00210    TimeStampV2 = TimeStamp;
00211    TimeStampV1 = (Cigi_uint32)TimeStamp;
00212    TimeStampV3 = TimeStampV1 / 10;
00213 
00214    TimestampValid = true;
00215 
00216    return(CIGI_SUCCESS);
00217 
00218 }
00219 
00220 
00221 // ================================================
00222 // SetTrackDeviceEn
00223 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00224 int CigiIGCtrlV2::SetTrackDeviceEn(const TrackDeviceEnGrp TrackDeviceEnIn, bool bndchk)
00225 {
00226 
00227 #ifndef CIGI_NO_BND_CHK
00228    if(bndchk && ((TrackDeviceEnIn < 0)||(TrackDeviceEnIn > 1)))
00229    {
00230 #ifndef CIGI_NO_EXCEPT
00231       throw CigiValueOutOfRangeException("TrackDeviceEn",TrackDeviceEnIn,0,1);
00232 #endif
00233       return(CIGI_ERROR_VALUE_OUT_OF_RANGE);
00234    }
00235 #endif
00236 
00237    TrackDeviceEn = TrackDeviceEnIn;
00238 
00239    return(CIGI_SUCCESS);
00240 
00241 }
00242 
00243 

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