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