CigiCollDetSegDefV2.cpp

Go to the documentation of this file.
00001 
00055 #define _EXPORT_CCL_
00056 
00057 #include "CigiCollDetSegDefV2.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 // CigiCollDetSegDefV2
00084 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00085 CigiCollDetSegDefV2::CigiCollDetSegDefV2()
00086 {
00087 
00088    PacketID = CIGI_COLL_DET_SEG_DEF_PACKET_ID_V2;
00089    PacketSize = CIGI_COLL_DET_SEG_DEF_PACKET_SIZE_V2;
00090    Version = 2;
00091    MinorVersion = 0;
00092 
00093    EntityID = 0;
00094    SegmentID = 0;
00095    SegmentEn = false;
00096    X1 = 0.0;
00097    Y1 = 0.0;
00098    Z1 = 0.0;
00099    X2 = 0.0;
00100    Y2 = 0.0;
00101    Z2 = 0.0;
00102    Mask = 0;
00103 
00104 }
00105 
00106 // ================================================
00107 // ~CigiCollDetSegDefV2
00108 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00109 CigiCollDetSegDefV2::~CigiCollDetSegDefV2()
00110 {
00111 
00112 }
00113 
00114 // ====================================================================
00115 // Pack and Unpack
00116 // ====================================================================
00117 
00118 // ================================================
00119 // Pack
00120 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00121 int CigiCollDetSegDefV2::Pack(CigiBasePacket * Base, Cigi_uint8 * Buff, void *Spec) const
00122 {
00123    double DBuf[6];
00124 
00125    Cigi_uint8 *tBuf = (Cigi_uint8 *)DBuf;
00126 
00127    PackPointer CDta;
00128 
00129    CigiBaseCollDetSegDef * Data = ( CigiBaseCollDetSegDef *)Base;
00130 
00131    CDta.d = DBuf;
00132 
00133    *CDta.c++ = PacketID;
00134    *CDta.c++ = PacketSize;
00135 
00136    CIGI_SCOPY2(CDta.s++, &Data->EntityID);
00137 
00138    Cigi_uint8 HDta = Data->SegmentID;
00139    if(HDta > 127)
00140       HDta = 127;
00141 
00142    HDta |= (Data->SegmentEn) ? 0x80 : 0x00;
00143 
00144    *CDta.c++ = HDta;
00145 
00146    *CDta.c++ = 0;
00147    *CDta.s++ = 0;
00148 
00149    CIGI_SCOPY4(CDta.l++, &Data->Mask);
00150 
00151    float tpt;
00152    Cigi_int16 stpt;
00153    
00154    tpt = Data->X1 / 0.015625f;
00155    if(tpt > 32767.0f)
00156       stpt = 32767;
00157    else if(tpt < -32768.0f)
00158       stpt = -32768;
00159    else
00160       stpt = (Cigi_int16)tpt;
00161 
00162    CIGI_SCOPY2(CDta.s++, &stpt);
00163 
00164    tpt = Data->Y1 / 0.015625f;
00165    if(tpt > 32767.0f)
00166       stpt = 32767;
00167    else if(tpt < -32768.0f)
00168       stpt = -32768;
00169    else
00170       stpt = (Cigi_int16)tpt;
00171 
00172    CIGI_SCOPY2(CDta.s++, &stpt);
00173 
00174    tpt = Data->Z1 / 0.015625f;
00175    if(tpt > 32767.0f)
00176       stpt = 32767;
00177    else if(tpt < -32768.0f)
00178       stpt = -32768;
00179    else
00180       stpt = (Cigi_int16)tpt;
00181 
00182    CIGI_SCOPY2(CDta.s++, &stpt);
00183 
00184    tpt = Data->X2 / 0.015625f;
00185    if(tpt > 32767.0f)
00186       stpt = 32767;
00187    else if(tpt < -32768.0f)
00188       stpt = -32768;
00189    else
00190       stpt = (Cigi_int16)tpt;
00191 
00192    CIGI_SCOPY2(CDta.s++, &stpt);
00193 
00194    tpt = Data->Y2 / 0.015625f;
00195    if(tpt > 32767.0f)
00196       stpt = 32767;
00197    else if(tpt < -32768.0f)
00198       stpt = -32768;
00199    else
00200       stpt = (Cigi_int16)tpt;
00201 
00202    CIGI_SCOPY2(CDta.s++, &stpt);
00203 
00204    tpt = Data->Z2 / 0.015625f;
00205    if(tpt > 32767.0f)
00206       stpt = 32767;
00207    else if(tpt < -32768.0f)
00208       stpt = -32768;
00209    else
00210       stpt = (Cigi_int16)tpt;
00211 
00212    CIGI_SCOPY2(CDta.s++, &stpt);
00213 
00214 
00215    memcpy(Buff,tBuf,CIGI_COLL_DET_SEG_DEF_PACKET_SIZE_V2);
00216 
00217    return(PacketSize);
00218 
00219 }
00220 
00221 // ================================================
00222 // Unpack
00223 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00224 int CigiCollDetSegDefV2::Unpack(Cigi_uint8 * Buff, bool Swap, void *Spec)
00225 {
00226    double DBuf[6];
00227 
00228    Cigi_uint8 *tBuf = (Cigi_uint8 *)DBuf;
00229 
00230    PackPointer CDta;
00231 
00232    memcpy(tBuf,Buff,CIGI_COLL_DET_SEG_DEF_PACKET_SIZE_V2);
00233 
00234    CDta.d = DBuf;
00235 
00236    CDta.c += 2;  // Step over packet id and size
00237 
00238    CIGI_SCOPY2(&EntityID, CDta.s++);
00239 
00240    Cigi_uint8 HDta = *CDta.c++;
00241    SegmentID = HDta & 0x7f;
00242    SegmentEn = ((HDta & 0x80) != 0);
00243 
00244    CDta.c += 3;
00245 
00246    CIGI_SCOPY4(&Mask, CDta.l++);
00247 
00248    Cigi_int16 stpt;
00249    float tpt;
00250 
00251    CIGI_SCOPY2(&stpt, CDta.s++);
00252    tpt = (float)stpt;
00253    X1 = tpt * 0.015625f;
00254 
00255    CIGI_SCOPY2(&stpt, CDta.s++);
00256    tpt = (float)stpt;
00257    Y1 = tpt * 0.015625f;
00258 
00259    CIGI_SCOPY2(&stpt, CDta.s++);
00260    tpt = (float)stpt;
00261    Z1 = tpt * 0.015625f;
00262 
00263    CIGI_SCOPY2(&stpt, CDta.s++);
00264    tpt = (float)stpt;
00265    X2 = tpt * 0.015625f;
00266 
00267    CIGI_SCOPY2(&stpt, CDta.s++);
00268    tpt = (float)stpt;
00269    Y2 = tpt * 0.015625f;
00270 
00271    CIGI_SCOPY2(&stpt, CDta.s++);
00272    tpt = (float)stpt;
00273    Z2 = tpt * 0.015625f;
00274 
00275    return(PacketSize);
00276 
00277 }
00278 
00279 
00280 
00281 // ====================================================================
00282 // Accessors
00283 // ====================================================================
00284 
00285 
00286 // ================================================
00287 // SegmentID
00288 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00289 int CigiCollDetSegDefV2::SetSegmentID(const Cigi_uint8 SegmentIDIn, bool bndchk)
00290 {
00291 
00292 #ifndef CIGI_NO_BND_CHK
00293    if(bndchk && ((SegmentIDIn < 0)||(SegmentIDIn > 127)))
00294    {
00295 #ifndef CIGI_NO_EXCEPT
00296       throw CigiValueOutOfRangeException("SegmentID",(Cigi_uint8)SegmentIDIn,0,127);
00297 #endif
00298       return(CIGI_ERROR_VALUE_OUT_OF_RANGE);
00299    }
00300 #endif
00301 
00302    SegmentID = SegmentIDIn;
00303    return(CIGI_SUCCESS);
00304 
00305 }
00306 
00307 

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