00001
00055 #define _EXPORT_CCL_
00056
00057 #include "CigiArtPartCtrlV2.h"
00058 #include "CigiSwapping.h"
00059 #include "CigiExceptions.h"
00060
00061 #include <memory.h>
00062
00063
00064 #ifdef CIGI_LITTLE_ENDIAN
00065 #define CIGI_SCOPY2 CigiSwap2
00066 #define CIGI_SCOPY4 CigiSwap4
00067 #define CIGI_SCOPY8 CigiSwap8
00068 #else
00069 #define CIGI_SCOPY2 CigiCopy2
00070 #define CIGI_SCOPY4 CigiCopy4
00071 #define CIGI_SCOPY8 CigiCopy8
00072 #endif
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085 CigiArtPartCtrlV2::CigiArtPartCtrlV2()
00086 {
00087
00088 PacketID = CIGI_ART_PART_CTRL_PACKET_ID_V2;
00089 PacketSize = CIGI_ART_PART_CTRL_PACKET_SIZE_V2;
00090 Version = 2;
00091 MinorVersion = 0;
00092
00093 EntityID = 0;
00094 ArtPartIDV1 = 0;
00095 ArtPartIDV3 = 0;
00096 ArtPartEn = false;
00097 XOffEn = false;
00098 YOffEn = false;
00099 ZOffEn = false;
00100 RollEn = false;
00101 PitchEn = false;
00102 YawEn = false;
00103 XOff = 0.0;
00104 YOff = 0.0;
00105 ZOff = 0.0;
00106 Roll = 0.0;
00107 Pitch = 0.0;
00108 Yaw = 0.0;
00109
00110 }
00111
00112
00113
00114
00115 CigiArtPartCtrlV2::~CigiArtPartCtrlV2()
00116 {
00117
00118 }
00119
00120
00121
00122
00123
00124
00125
00126
00127 int CigiArtPartCtrlV2::Pack(CigiBasePacket * Base, Cigi_uint8 * Buff, void *Spec) const
00128 {
00129 double DBuf[6];
00130
00131 Cigi_uint8 *tBuf = (Cigi_uint8 *)DBuf;
00132
00133 PackPointer CDta;
00134
00135 CigiBaseArtPartCtrl * Data = ( CigiBaseArtPartCtrl *)Base;
00136
00137 CDta.d = DBuf;
00138
00139 *CDta.c++ = PacketID;
00140 *CDta.c++ = PacketSize;
00141
00142 CIGI_SCOPY2(CDta.s++, &Data->EntityID);
00143 *CDta.c++ = Data->ArtPartIDV1;
00144
00145 Cigi_uint8 HDta = 0;
00146
00147 if(Data->ArtPartEn)
00148 HDta = 0x80;
00149
00150 if(Data->XOffEn)
00151 HDta |= 0x40;
00152
00153 if(Data->YOffEn)
00154 HDta |= 0x20;
00155
00156 if(Data->ZOffEn)
00157 HDta |= 0x10;
00158
00159 if(Data->RollEn)
00160 HDta |= 0x08;
00161
00162 if(Data->PitchEn)
00163 HDta |= 0x04;
00164
00165 if(Data->YawEn)
00166 HDta |= 0x02;
00167
00168 *CDta.c++ = HDta;
00169
00170 *CDta.s++ = 0;
00171
00172 CIGI_SCOPY4(CDta.f++, &Data->XOff);
00173 CIGI_SCOPY4(CDta.f++, &Data->YOff);
00174 CIGI_SCOPY4(CDta.f++, &Data->ZOff);
00175 CIGI_SCOPY4(CDta.f++, &Data->Roll);
00176 CIGI_SCOPY4(CDta.f++, &Data->Pitch);
00177 CIGI_SCOPY4(CDta.f++, &Data->Yaw);
00178
00179 memcpy(Buff,tBuf,CIGI_ART_PART_CTRL_PACKET_SIZE_V2);
00180
00181 return(PacketSize);
00182
00183 }
00184
00185
00186
00187
00188 int CigiArtPartCtrlV2::Unpack(Cigi_uint8 * Buff, bool Swap, void *Spec)
00189 {
00190 union ArtPartConv
00191 {
00192 Cigi_uint8 uc;
00193 Cigi_int8 c;
00194 } ArtC;
00195
00196 double DBuf[6];
00197
00198 Cigi_uint8 *tBuf = (Cigi_uint8 *)DBuf;
00199
00200 PackPointer CDta;
00201
00202 memcpy(tBuf,Buff,CIGI_ART_PART_CTRL_PACKET_SIZE_V2);
00203
00204 CDta.d = DBuf;
00205
00206 CDta.c += 2;
00207
00208 CIGI_SCOPY2(&EntityID, CDta.s++);
00209 ArtPartIDV1 = *CDta.c++;
00210
00211 Cigi_uint16 HDta = *CDta.c++;
00212
00213 ArtPartEn = ((HDta & 0x80) != 0);
00214 XOffEn = ((HDta & 0x40) != 0);
00215 YOffEn = ((HDta & 0x20) != 0);
00216 ZOffEn = ((HDta & 0x10) != 0);
00217 RollEn = ((HDta & 0x08) != 0);
00218 PitchEn = ((HDta & 0x04) != 0);
00219 YawEn = ((HDta & 0x02) != 0);
00220
00221 CDta.s++;
00222
00223 CIGI_SCOPY4(&XOff, CDta.f++);
00224 CIGI_SCOPY4(&YOff, CDta.f++);
00225 CIGI_SCOPY4(&ZOff, CDta.f++);
00226 CIGI_SCOPY4(&Roll, CDta.f++);
00227 CIGI_SCOPY4(&Pitch, CDta.f++);
00228 CIGI_SCOPY4(&Yaw, CDta.f++);
00229
00230 ArtC.c = ArtPartIDV1;
00231 ArtPartIDV3 = ArtC.uc;
00232
00233 return(PacketSize);
00234
00235 }
00236
00237
00238
00239
00240
00241
00242
00243
00244
00245
00246
00247 int CigiArtPartCtrlV2::SetArtPartID(const Cigi_int8 ArtPartIDIn, bool bndchk)
00248 {
00249 union ArtPartConv
00250 {
00251 Cigi_uint8 uc;
00252 Cigi_int8 c;
00253 } ArtC;
00254
00255 ArtPartIDV1 = ArtPartIDIn;
00256
00257 ArtC.c = ArtPartIDV1;
00258 ArtPartIDV3 = ArtC.uc;
00259
00260 return(CIGI_SUCCESS);
00261 }
00262
00263
00264