00001 00052 #define _EXPORT_CCL_ 00053 00054 #include "CigiMotionTrackCtrlV3.h" 00055 #include "CigiSwapping.h" 00056 #include "CigiExceptions.h" 00057 00058 00059 // ==================================================================== 00060 // Construction/Destruction 00061 // ==================================================================== 00062 00063 00064 // ================================================ 00065 // CigiMotionTrackCtrlV3 00066 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv 00067 CigiMotionTrackCtrlV3::CigiMotionTrackCtrlV3() 00068 { 00069 00070 PacketID = CIGI_MOTION_TRACK_CTRL_PACKET_ID_V3; 00071 PacketSize = CIGI_MOTION_TRACK_CTRL_PACKET_SIZE_V3; 00072 Version = 3; 00073 MinorVersion = 0; 00074 00075 ViewID = 0; 00076 TrackerID = 0; 00077 TrackerEn = false; 00078 BoresightEn = false; 00079 XEn = false; 00080 YEn = false; 00081 ZEn = false; 00082 RollEn = false; 00083 PitchEn = false; 00084 YawEn = false; 00085 Scope = View; 00086 00087 } 00088 00089 // ================================================ 00090 // ~CigiMotionTrackCtrlV3 00091 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv 00092 CigiMotionTrackCtrlV3::~CigiMotionTrackCtrlV3() 00093 { 00094 00095 } 00096 00097 // ==================================================================== 00098 // Pack and Unpack 00099 // ==================================================================== 00100 00101 // ================================================ 00102 // Pack 00103 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv 00104 int CigiMotionTrackCtrlV3::Pack(CigiBasePacket * Base, Cigi_uint8 * Buff, void *Spec) const 00105 { 00106 PackPointer CDta; 00107 00108 CigiBaseMotionTrackCtrl * Data = ( CigiBaseMotionTrackCtrl *)Base; 00109 00110 CDta.c = Buff; 00111 00112 *CDta.c++ = PacketID; 00113 *CDta.c++ = PacketSize; 00114 00115 *CDta.s++ = Data->ViewID; 00116 *CDta.c++ = Data->TrackerID; 00117 00118 Cigi_uint8 HDta = (Data->TrackerEn) ? 0x01 : 0; 00119 HDta |= (Data->BoresightEn) ? 0x02 : 0; 00120 HDta |= (Data->XEn) ? 0x04 : 0; 00121 HDta |= (Data->YEn) ? 0x08 : 0; 00122 HDta |= (Data->ZEn) ? 0x10 : 0; 00123 HDta |= (Data->RollEn) ? 0x20 : 0; 00124 HDta |= (Data->PitchEn) ? 0x40 : 0; 00125 HDta |= (Data->YawEn) ? 0x80 : 0; 00126 *CDta.c++ = HDta; 00127 00128 HDta = (Data->Scope) ? 0x01 : 0; 00129 *CDta.c++ = HDta; 00130 00131 *CDta.c++ = 0; 00132 00133 return(PacketSize); 00134 00135 } 00136 00137 // ================================================ 00138 // Unpack 00139 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv 00140 int CigiMotionTrackCtrlV3::Unpack(Cigi_uint8 * Buff, bool Swap, void *Spec) 00141 { 00142 PackPointer CDta; 00143 00144 CDta.c = Buff; 00145 00146 CDta.c += 2; // Step over packet id and size 00147 00148 if(!Swap) 00149 ViewID = *CDta.s++; 00150 else 00151 CigiSwap2(&ViewID, CDta.s++); 00152 00153 TrackerID = *CDta.c++; 00154 00155 Cigi_uint8 HDta = *CDta.c++; 00156 TrackerEn = ((HDta & 0x01) != 0); 00157 BoresightEn = ((HDta & 0x02) != 0); 00158 XEn = ((HDta & 0x04) != 0); 00159 YEn = ((HDta & 0x08) != 0); 00160 ZEn = ((HDta & 0x10) != 0); 00161 RollEn = ((HDta & 0x20) != 0); 00162 PitchEn = ((HDta & 0x40) != 0); 00163 YawEn = ((HDta & 0x80) != 0); 00164 00165 HDta = *CDta.c++; 00166 Scope = (ScopeGrp)(HDta & 0x01); 00167 00168 return(PacketSize); 00169 00170 } 00171 00172 00173 00174 // ==================================================================== 00175 // Accessors 00176 // ==================================================================== 00177 00178