00001
00058 #define _EXPORT_CCL_
00059
00060 #include "CigiRateCtrlV3.h"
00061 #include "CigiSwapping.h"
00062 #include "CigiExceptions.h"
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073 CigiRateCtrlV3::CigiRateCtrlV3()
00074 {
00075
00076 PacketID = CIGI_RATE_CTRL_PACKET_ID_V3;
00077 PacketSize = CIGI_RATE_CTRL_PACKET_SIZE_V3;
00078 Version = 3;
00079 MinorVersion = 0;
00080
00081 EntityID = 0;
00082 ArtPartIDV1 = 0;
00083 ArtPartIDV3 = 0;
00084 ApplyToArtPart = false;
00085 CoordSys = Local;
00086 XRate = 0.0;
00087 YRate = 0.0;
00088 ZRate = 0.0;
00089 RollRate = 0.0;
00090 PitchRate = 0.0;
00091 YawRate = 0.0;
00092
00093 }
00094
00095
00096
00097
00098 CigiRateCtrlV3::~CigiRateCtrlV3()
00099 {
00100
00101 }
00102
00103
00104
00105
00106
00107
00108
00109
00110 int CigiRateCtrlV3::Pack(CigiBasePacket * Base, Cigi_uint8 * Buff, void *Spec) const
00111 {
00112 PackPointer CDta;
00113
00114 CigiBaseRateCtrl * Data = ( CigiBaseRateCtrl *)Base;
00115
00116 CDta.c = Buff;
00117
00118 *CDta.c++ = PacketID;
00119 *CDta.c++ = PacketSize;
00120
00121 *CDta.s++ = Data->EntityID;
00122 *CDta.c++ = Data->ArtPartIDV3;
00123
00124 Cigi_uint8 HDta = 0;
00125
00126 if(Data->ApplyToArtPart)
00127 HDta = 0x01;
00128
00129 *CDta.c++ = HDta;
00130 *CDta.s++ = 0;
00131
00132 *CDta.f++ = Data->XRate;
00133 *CDta.f++ = Data->YRate;
00134 *CDta.f++ = Data->ZRate;
00135 *CDta.f++ = Data->RollRate;
00136 *CDta.f++ = Data->PitchRate;
00137 *CDta.f++ = Data->YawRate;
00138
00139 return(PacketSize);
00140
00141 }
00142
00143
00144
00145
00146 int CigiRateCtrlV3::Unpack(Cigi_uint8 * Buff, bool Swap, void *Spec)
00147 {
00148 union ArtPartConv
00149 {
00150 Cigi_uint8 uc;
00151 Cigi_int8 c;
00152 } ArtC;
00153
00154 PackPointer CDta;
00155
00156 CDta.c = Buff;
00157
00158 CDta.c += 2;
00159
00160 if(!Swap)
00161 {
00162 EntityID = *CDta.s++;
00163 ArtPartIDV3 = *CDta.c++;
00164
00165 Cigi_uint16 HDta = *CDta.c++;
00166
00167 ApplyToArtPart = ((HDta & 0x01) != 0);
00168
00169 CDta.s++;
00170
00171 XRate = *CDta.f++;
00172 YRate = *CDta.f++;
00173 ZRate = *CDta.f++;
00174 RollRate = *CDta.f++;
00175 PitchRate = *CDta.f++;
00176 YawRate = *CDta.f++;
00177 }
00178 else
00179 {
00180 CigiSwap2(&EntityID, CDta.s++);
00181 ArtPartIDV3 = *CDta.c++;
00182
00183 Cigi_uint16 HDta = *CDta.c++;
00184
00185 ApplyToArtPart = ((HDta & 0x01) != 0);
00186
00187 CDta.s++;
00188
00189 CigiSwap4(&XRate, CDta.f++);
00190 CigiSwap4(&YRate, CDta.f++);
00191 CigiSwap4(&ZRate, CDta.f++);
00192 CigiSwap4(&RollRate, CDta.f++);
00193 CigiSwap4(&PitchRate, CDta.f++);
00194 CigiSwap4(&YawRate, CDta.f++);
00195 }
00196
00197 if(ApplyToArtPart)
00198 {
00199
00200 ArtC.uc = ArtPartIDV3;
00201 ArtPartIDV1 = ArtC.c;
00202
00203 }
00204 else
00205 ArtPartIDV1 = -1;
00206
00207 CoordSys = Local;
00208
00209 return(PacketSize);
00210
00211 }
00212
00213
00214
00215
00216
00217
00218
00219
00220
00221
00222
00223 int CigiRateCtrlV3::SetArtPartID(const Cigi_uint8 ArtPartIDIn, bool bndchk)
00224 {
00225 union ArtPartConv
00226 {
00227 Cigi_uint8 uc;
00228 Cigi_int8 c;
00229 } ArtC;
00230
00231 ArtPartIDV3 = ArtPartIDIn;
00232
00233 if(ApplyToArtPart)
00234 {
00235
00236 ArtC.uc = ArtPartIDV3;
00237 ArtPartIDV1 = ArtC.c;
00238
00239 }
00240 else
00241 ArtPartIDV1 = -1;
00242
00243
00244 return(CIGI_SUCCESS);
00245 }
00246
00247
00248
00249
00250 int CigiRateCtrlV3::SetApplyToArtPart(const bool ApplyToArtPartIn, bool bndchk)
00251 {
00252 union ArtPartConv
00253 {
00254 Cigi_uint8 uc;
00255 Cigi_int8 c;
00256 } ArtC;
00257
00258 ApplyToArtPart = ApplyToArtPartIn;
00259
00260 if(ApplyToArtPart)
00261 {
00262
00263 ArtC.uc = ArtPartIDV3;
00264 ArtPartIDV1 = ArtC.c;
00265
00266 }
00267 else
00268 ArtPartIDV1 = -1;
00269
00270 return(CIGI_SUCCESS);
00271 }