CigiIGCtrlV3_2.cpp

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

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