CigiIGCtrlV1.cpp

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

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