CigiViewCtrlV2.cpp

Go to the documentation of this file.
00001 
00055 #define _EXPORT_CCL_
00056 
00057 #include "CigiViewCtrlV2.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 // Construction/Destruction
00079 // ====================================================================
00080 
00081 
00082 // ================================================
00083 // CigiViewCtrlV2
00084 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00085 CigiViewCtrlV2::CigiViewCtrlV2()
00086 {
00087 
00088    PacketID = CIGI_VIEW_CTRL_PACKET_ID_V2;
00089    PacketSize = CIGI_VIEW_CTRL_PACKET_SIZE_V2;
00090    Version = 2;
00091    MinorVersion = 0;
00092 
00093    EntityID = 0;
00094    ViewID = 0;
00095    GroupID = 0;
00096    XOffEn = false;
00097    YOffEn = false;
00098    ZOffEn = false;
00099    RollEn = false;
00100    PitchEn = false;
00101    YawEn = false;
00102    XOff = 0.0;
00103    YOff = 0.0;
00104    ZOff = 0.0;
00105    Roll = 0.0;
00106    Pitch = 0.0;
00107    Yaw = 0.0;
00108 
00109 }
00110 
00111 // ================================================
00112 // ~CigiViewCtrlV2
00113 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00114 CigiViewCtrlV2::~CigiViewCtrlV2()
00115 {
00116 
00117 }
00118 
00119 // ====================================================================
00120 // Pack and Unpack
00121 // ====================================================================
00122 
00123 // ================================================
00124 // Pack
00125 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00126 int CigiViewCtrlV2::Pack(CigiBasePacket * Base, Cigi_uint8 * Buff, void *Spec) const
00127 {
00128    double DBuf[6];
00129 
00130    Cigi_uint8 *tBuf = (Cigi_uint8 *)DBuf;
00131 
00132    PackPointer CDta;
00133 
00134    CigiBaseViewCtrl * Data = ( CigiBaseViewCtrl *)Base;
00135 
00136    CDta.d = DBuf;
00137 
00138    *CDta.c++ = PacketID;
00139    *CDta.c++ = PacketSize;
00140 
00141    CIGI_SCOPY2(CDta.s++, &Data->EntityID);
00142 
00143    Cigi_uint8 HDta = 0;
00144 
00145    if(Data->ViewID < 32)
00146       HDta = (Cigi_uint8)((Data->ViewID << 3) & 0xf8);
00147    else
00148       HDta = (Cigi_uint8)0xf8;
00149 
00150    if(Data->GroupID < 8)
00151       HDta |= (Cigi_uint8)(Data->GroupID & 0x07);
00152    else
00153       HDta |= (Cigi_uint8)0x07;
00154 
00155    *CDta.c++ = HDta;
00156 
00157    HDta = 0;
00158 
00159    if(Data->XOffEn)
00160       HDta |= 0x80;
00161 
00162    if(Data->YOffEn)
00163       HDta |= 0x40;
00164 
00165    if(Data->ZOffEn)
00166       HDta |= 0x20;
00167 
00168    if(Data->RollEn)
00169       HDta |= 0x10;
00170 
00171    if(Data->PitchEn)
00172       HDta |= 0x08;
00173 
00174    if(Data->YawEn)
00175       HDta |= 0x04;
00176 
00177    *CDta.c++ = HDta;
00178 
00179    *CDta.c++ = 0;
00180    *CDta.c++ = 0;
00181 
00182    CIGI_SCOPY4(CDta.f++, &Data->XOff);
00183    CIGI_SCOPY4(CDta.f++, &Data->YOff);
00184    CIGI_SCOPY4(CDta.f++, &Data->ZOff);
00185    CIGI_SCOPY4(CDta.f++, &Data->Roll);
00186    CIGI_SCOPY4(CDta.f++, &Data->Pitch);
00187    CIGI_SCOPY4(CDta.f++, &Data->Yaw);
00188 
00189    memcpy(Buff,tBuf,CIGI_VIEW_CTRL_PACKET_SIZE_V2);
00190 
00191    return(PacketSize);
00192 
00193 }
00194 
00195 // ================================================
00196 // Unpack
00197 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00198 int CigiViewCtrlV2::Unpack(Cigi_uint8 * Buff, bool Swap, void *Spec)
00199 {
00200    double DBuf[6];
00201 
00202    Cigi_uint8 *tBuf = (Cigi_uint8 *)DBuf;
00203 
00204    PackPointer CDta;
00205 
00206    memcpy(tBuf,Buff,CIGI_VIEW_CTRL_PACKET_SIZE_V2);
00207 
00208    CDta.d = DBuf;
00209 
00210    CDta.c += 2;  // Step over packet id and size
00211 
00212    CIGI_SCOPY2(&EntityID, CDta.s++);
00213 
00214    Cigi_uint8 HDta = *CDta.c++;
00215 
00216    ViewID = (Cigi_uint16)((HDta >> 3) & 0x1f);
00217    GroupID = (Cigi_uint8)(HDta & 0x07);
00218 
00219    HDta = *CDta.c++;
00220 
00221    XOffEn  = ((HDta & 0x80) != 0);
00222    YOffEn  = ((HDta & 0x40) != 0);
00223    ZOffEn  = ((HDta & 0x20) != 0);
00224    RollEn  = ((HDta & 0x10) != 0);
00225    PitchEn = ((HDta & 0x08) != 0);
00226    YawEn   = ((HDta & 0x04) != 0);
00227 
00228    CDta.c += 2;
00229    
00230    CIGI_SCOPY4(&XOff, CDta.f++);
00231    CIGI_SCOPY4(&YOff, CDta.f++);
00232    CIGI_SCOPY4(&ZOff, CDta.f++);
00233    CIGI_SCOPY4(&Roll, CDta.f++);
00234    CIGI_SCOPY4(&Pitch, CDta.f++);
00235    CIGI_SCOPY4(&Yaw, CDta.f++);
00236 
00237    return(PacketSize);
00238 
00239 }
00240 
00241 
00242 
00243 // ====================================================================
00244 // Accessors
00245 // ====================================================================
00246 
00247 
00248 // ================================================
00249 // ViewID
00250 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00251 int CigiViewCtrlV2::SetViewID(const Cigi_uint8 ViewIDIn, bool bndchk)
00252 {
00253 
00254 #ifndef CIGI_NO_BND_CHK
00255    if(bndchk && ((ViewIDIn < 0)||(ViewIDIn > 31)))
00256    {
00257 #ifndef CIGI_NO_EXCEPT
00258       throw CigiValueOutOfRangeException("ViewID",(Cigi_uint16)ViewIDIn,0,31);
00259 #endif
00260       return(CIGI_ERROR_VALUE_OUT_OF_RANGE);
00261    }
00262 #endif
00263 
00264    ViewID = (Cigi_uint16)ViewIDIn;
00265    return(CIGI_SUCCESS);
00266 
00267 }
00268 
00269 
00270 // ================================================
00271 // GroupID
00272 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00273 int CigiViewCtrlV2::SetGroupID(const Cigi_uint8 GroupIDIn, bool bndchk)
00274 {
00275 
00276 #ifndef CIGI_NO_BND_CHK
00277    if(bndchk && ((GroupIDIn < 0)||(GroupIDIn > 7)))
00278    {
00279 #ifndef CIGI_NO_EXCEPT
00280       throw CigiValueOutOfRangeException("GroupID",(Cigi_uint8)GroupIDIn,0,7);
00281 #endif
00282       return(CIGI_ERROR_VALUE_OUT_OF_RANGE);
00283    }
00284 #endif
00285 
00286    GroupID = GroupIDIn;
00287    return(CIGI_SUCCESS);
00288 
00289 }
00290 
00291 

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