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