CigiRateCtrlV3.cpp

Go to the documentation of this file.
00001 
00058 #define _EXPORT_CCL_
00059 
00060 #include "CigiRateCtrlV3.h"
00061 #include "CigiSwapping.h"
00062 #include "CigiExceptions.h"
00063 
00064 
00065 // ====================================================================
00066 // Construction/Destruction
00067 // ====================================================================
00068 
00069 
00070 // ================================================
00071 // CigiRateCtrlV3
00072 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
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 // ~CigiRateCtrlV3
00097 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00098 CigiRateCtrlV3::~CigiRateCtrlV3()
00099 {
00100 
00101 }
00102 
00103 // ====================================================================
00104 // Pack and Unpack
00105 // ====================================================================
00106 
00107 // ================================================
00108 // Pack
00109 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
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 // Unpack
00145 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
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;  // Step over packet id and size
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 // Accessors
00217 // ====================================================================
00218 
00219 
00220 // ================================================
00221 // SetArtPartID
00222 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
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 // SetApplyToArtPart
00249 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
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    }

Generated on Wed Apr 29 08:59:59 2009 for CCL by  doxygen 1.4.7