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