CigiIGCtrlV3_3.cpp

Go to the documentation of this file.
00001 
00043 #define _EXPORT_CCL_
00044 
00045 #include "CigiIGCtrlV3_3.h"
00046 #include "CigiSwapping.h"
00047 #include "CigiVersionID.h"
00048 
00049 
00050 // ====================================================================
00051 // Construction/Destruction
00052 // ====================================================================
00053 
00054 // ================================================
00055 // CigiIGCtrlV3_3
00056 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00057 CigiIGCtrlV3_3::CigiIGCtrlV3_3()
00058 {
00059 
00060    PacketID = CIGI_IG_CTRL_PACKET_ID_V3_2;
00061    PacketSize = CIGI_IG_CTRL_PACKET_SIZE_V3_2;
00062    Version = 3;
00063    MinorVersion = 3;
00064 
00065    BSwapEn = false;
00066    DatabaseID = 0;
00067    FrameCntr = 0;
00068    TimeStampV1 = 0;
00069    TimeStampV2 = 0.0f;
00070    TimeStampV3 = 0;
00071    ByteSwap = 0x8000;
00072    IGMode = Standby;
00073    TrackDeviceEn = Disable;
00074    BoresightTrackDevice = false;
00075    TimestampValid = false;
00076    SmoothingEn = false;
00077    LastRcvdIGFrame = 0;
00078 
00079 }
00080 
00081 // ================================================
00082 // ~CigiIGCtrlV3_3
00083 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00084 CigiIGCtrlV3_3::~CigiIGCtrlV3_3()
00085 {
00086 
00087 }
00088 
00089 
00090 // ====================================================================
00091 // Pack and Unpack
00092 // ====================================================================
00093 
00094 // ================================================
00095 // Pack
00096 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00097 int CigiIGCtrlV3_3::Pack(CigiBasePacket * Base, Cigi_uint8 * Buff, void *Spec) const
00098 {
00099    PackPointer CDta;
00100    CigiVersionID PackingVer = *((CigiVersionID *)Spec);
00101 
00102    CigiBaseIGCtrl *Data = ( CigiBaseIGCtrl *) Base;
00103 
00104    if(PackingVer.GetCombinedCigiVersion() < 0x0303)
00105       PackingVer.SetCigiVersion(3,3);
00106 
00107    CDta.c = Buff;
00108 
00109    *CDta.c++ = PacketID;
00110    *CDta.c++ = PacketSize;
00111    *CDta.c++ = PackingVer.CigiMajorVersion;
00112 
00113    *CDta.b++ = Data->DatabaseID;
00114 
00115    Cigi_uint8 HDta = (PackingVer.CigiMinorVersion << 4) & 0xf0;
00116    HDta |= (Data->SmoothingEn) ? 0x08 : 0;
00117    HDta |= (Data->TimestampValid) ? 0x04 : 0;
00118    HDta |= (Cigi_uint8)(Data->IGMode & 0x03);
00119 
00120    *CDta.c++ = HDta;
00121    *CDta.c++ = 0;
00122    *CDta.s++ = 0x8000;  // Byte Swap value
00123 
00124    *CDta.l++ = Data->FrameCntr;
00125    *CDta.l++ = Data->TimeStampV3;
00126    *CDta.l++ = Data->LastRcvdIGFrame;
00127    *CDta.l++ = 0;
00128 
00129    return(PacketSize);
00130 
00131 }
00132 
00133 
00134 // ================================================
00135 // Unpack
00136 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00137 int CigiIGCtrlV3_3::Unpack(Cigi_uint8 * Buff, bool Swap, void *Spec)
00138 {
00139 
00140    PackPointer CDta;
00141 
00142    CDta.c = Buff;
00143 
00144    CDta.c += 3;
00145 
00146    DatabaseID = *CDta.b++;
00147 
00148    Cigi_uint8 HDta = *CDta.c++;
00149 
00150    IGMode = (IGModeGrp)(HDta & 0x03);
00151    TimestampValid = ((HDta & 0x04) != 0);
00152    SmoothingEn = ((HDta & 0x08) != 0);
00153 
00154    CDta.c++;
00155 
00156    ByteSwap = *CDta.s++;
00157    BSwapEn = (ByteSwap == 0x0080);
00158 
00159 
00160    if(!BSwapEn)
00161    {
00162       FrameCntr = *CDta.l++;
00163       TimeStampV3 = *CDta.l++;
00164       LastRcvdIGFrame = *CDta.l++;
00165    }
00166    else
00167    {
00168       CigiSwap4(&FrameCntr, CDta.l++);
00169       CigiSwap4(&TimeStampV3, CDta.l++);
00170       CigiSwap4(&LastRcvdIGFrame, CDta.l++);
00171    }
00172 
00173    TimeStampV1 = TimeStampV3 / 10;
00174    TimeStampV2 = (float)TimeStampV1;
00175 
00176 
00177 
00178    return(CIGI_SUCCESS);
00179 
00180 }
00181 
00182 
00183 // ====================================================================
00184 // Accessors
00185 // ====================================================================
00186 
00187 
00188 
00189 // ================================================
00190 // SetTimeStamp
00191 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00192 int CigiIGCtrlV3_3::SetTimeStamp(const Cigi_uint32 TimeStamp, bool bndchk)
00193 {
00194 
00195    TimeStampV3 = TimeStamp;
00196    TimeStampV1 = TimeStampV3 / 10;
00197    TimeStampV2 = (float)TimeStampV1;
00198 
00199    return(CIGI_SUCCESS);
00200 
00201 }
00202 
00203 

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