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