00001
00063 #define _EXPORT_CCL_
00064
00065 #include "CigiIGCtrlV2.h"
00066 #include "CigiExceptions.h"
00067 #include "CigiSwapping.h"
00068 #include <memory.h>
00069
00070
00071 #ifdef CIGI_LITTLE_ENDIAN
00072 #define CIGI_SCOPY2 CigiSwap2
00073 #define CIGI_SCOPY4 CigiSwap4
00074 #define CIGI_SCOPY8 CigiSwap8
00075 #else
00076 #define CIGI_SCOPY2 CigiCopy2
00077 #define CIGI_SCOPY4 CigiCopy4
00078 #define CIGI_SCOPY8 CigiCopy8
00079 #endif
00080
00081
00082
00083
00084
00085
00086
00087
00088 CigiIGCtrlV2::CigiIGCtrlV2()
00089 {
00090
00091 PacketID = CIGI_IG_CTRL_PACKET_ID_V2;
00092 PacketSize = CIGI_IG_CTRL_PACKET_SIZE_V2;
00093 Version = 2;
00094 MinorVersion = 0;
00095
00096 BSwapEn = false;
00097 DatabaseID = 0;
00098 FrameCntr = 0;
00099 TimeStampV1 = 0;
00100 TimeStampV2 = 0.0f;
00101 TimeStampV3 = 0;
00102 ByteSwap = 0x8000;
00103 IGMode = Standby;
00104 TrackDeviceEn = Disable;
00105 BoresightTrackDevice = false;
00106 TimestampValid = false;
00107 SmoothingEn = false;
00108 LastRcvdIGFrame = 0;
00109
00110 }
00111
00112
00113
00114
00115
00116 CigiIGCtrlV2::~CigiIGCtrlV2()
00117 {
00118
00119 }
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129
00130 int CigiIGCtrlV2::Pack(CigiBasePacket * Base, Cigi_uint8 * Buff, void *Spec) const
00131 {
00132 PackPointer CDta;
00133
00134 CigiBaseIGCtrl *Data = ( CigiBaseIGCtrl *) Base;
00135
00136
00137 CDta.c = Buff;
00138
00139 *CDta.c++ = PacketID;
00140 *CDta.c++ = PacketSize;
00141 *CDta.c++ = Version;
00142
00143 *CDta.b++ = Data->DatabaseID;
00144
00145 Cigi_uint8 HDta = (Data->BoresightTrackDevice) ? 0x10 : 0;
00146 HDta |= (Cigi_uint8)((Data->TrackDeviceEn << 5) & 0x20);
00147 HDta |= (Cigi_uint8)((Data->IGMode << 6) & 0xc0);
00148
00149 *CDta.c++ = HDta;
00150 *CDta.c++ = 0;
00151 *CDta.c++ = 0;
00152 *CDta.c++ = 0;
00153
00154 CIGI_SCOPY4(CDta.l++, &Data->FrameCntr);
00155 CIGI_SCOPY4(CDta.f++, &Data->TimeStampV2);
00156
00157 return(PacketSize);
00158
00159 }
00160
00161
00162
00163
00164
00165 int CigiIGCtrlV2::Unpack(Cigi_uint8 * Buff, bool Swap, void *Spec)
00166 {
00167
00168 PackPointer CDta;
00169
00170 CDta.c = Buff;
00171
00172 CDta.c += 3;
00173
00174 DatabaseID = *CDta.b++;
00175 Cigi_uint8 HDta = *CDta.c;
00176
00177 IGMode = (IGModeGrp)((HDta >> 6) & 0x03);
00178 TrackDeviceEn = (TrackDeviceEnGrp)((HDta >> 5) & 0x01);
00179 BoresightTrackDevice = ((HDta & 0x10) != 0);
00180
00181 CDta.l++;
00182
00183 CIGI_SCOPY4(&FrameCntr,CDta.l++);
00184 CIGI_SCOPY4(&TimeStampV2,CDta.f++);
00185
00186 TimeStampV1 = (Cigi_uint32)TimeStampV2;
00187 TimeStampV3 = TimeStampV1 / 10;
00188
00189 LastRcvdIGFrame = FrameCntr;
00190
00191 Swap = false;
00192
00193 return(CIGI_SUCCESS);
00194
00195 }
00196
00197
00198
00199
00200
00201
00202
00203
00204
00205
00206
00207 int CigiIGCtrlV2::SetTimeStamp(const float TimeStamp, bool bndchk)
00208 {
00209
00210 TimeStampV2 = TimeStamp;
00211 TimeStampV1 = (Cigi_uint32)TimeStamp;
00212 TimeStampV3 = TimeStampV1 / 10;
00213
00214 TimestampValid = true;
00215
00216 return(CIGI_SUCCESS);
00217
00218 }
00219
00220
00221
00222
00223
00224 int CigiIGCtrlV2::SetTrackDeviceEn(const TrackDeviceEnGrp TrackDeviceEnIn, bool bndchk)
00225 {
00226
00227 #ifndef CIGI_NO_BND_CHK
00228 if(bndchk && ((TrackDeviceEnIn < 0)||(TrackDeviceEnIn > 1)))
00229 {
00230 #ifndef CIGI_NO_EXCEPT
00231 throw CigiValueOutOfRangeException("TrackDeviceEn",TrackDeviceEnIn,0,1);
00232 #endif
00233 return(CIGI_ERROR_VALUE_OUT_OF_RANGE);
00234 }
00235 #endif
00236
00237 TrackDeviceEn = TrackDeviceEnIn;
00238
00239 return(CIGI_SUCCESS);
00240
00241 }
00242
00243