00001
00052 #define _EXPORT_CCL_
00053
00054 #include "CigiCollDetVolRespV2.h"
00055 #include "CigiSwapping.h"
00056 #include "CigiExceptions.h"
00057
00058 #include <memory.h>
00059
00060
00061 #ifdef CIGI_LITTLE_ENDIAN
00062 #define CIGI_SCOPY2 CigiSwap2
00063 #define CIGI_SCOPY4 CigiSwap4
00064 #define CIGI_SCOPY8 CigiSwap8
00065 #else
00066 #define CIGI_SCOPY2 CigiCopy2
00067 #define CIGI_SCOPY4 CigiCopy4
00068 #define CIGI_SCOPY8 CigiCopy8
00069 #endif
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082 CigiCollDetVolRespV2::CigiCollDetVolRespV2()
00083 {
00084
00085 PacketID = CIGI_COLL_DET_VOL_RESP_PACKET_ID_V2;
00086 PacketSize = CIGI_COLL_DET_VOL_RESP_PACKET_SIZE_V2;
00087 Version = 2;
00088 MinorVersion = 0;
00089
00090 EntityID = 0;
00091 VolID = 0;
00092 CollType = NonEntity;
00093 CollEntityID = 0;
00094 CollVolID = 0;
00095
00096 }
00097
00098
00099
00100
00101 CigiCollDetVolRespV2::~CigiCollDetVolRespV2()
00102 {
00103
00104 }
00105
00106
00107
00108
00109
00110
00111
00112
00113 int CigiCollDetVolRespV2::Pack(CigiBasePacket * Base, Cigi_uint8 * Buff, void *Spec) const
00114 {
00115 double DBuf[6];
00116
00117 Cigi_uint8 *tBuf = (Cigi_uint8 *)DBuf;
00118
00119 PackPointer CDta;
00120
00121 CigiBaseCollDetVolResp * Data = ( CigiBaseCollDetVolResp *)Base;
00122
00123 CDta.d = DBuf;
00124
00125 *CDta.c++ = PacketID;
00126 *CDta.c++ = PacketSize;
00127
00128 CIGI_SCOPY2(CDta.s++, &Data->EntityID);
00129
00130 Cigi_uint8 HDta = (Data->VolID << 1) & 0xfe;
00131 HDta |= (Cigi_uint16)(Data->CollType & 0x01);
00132 *CDta.c++ = HDta;
00133
00134 *CDta.c++ = 0;
00135
00136 CIGI_SCOPY2(CDta.s++, &Data->CollEntityID);
00137
00138 memcpy(Buff,tBuf,CIGI_COLL_DET_VOL_RESP_PACKET_SIZE_V2);
00139
00140 return(PacketSize);
00141
00142 }
00143
00144
00145
00146
00147 int CigiCollDetVolRespV2::Unpack(Cigi_uint8 * Buff, bool Swap, void *Spec)
00148 {
00149 double DBuf[6];
00150
00151 Cigi_uint8 *tBuf = (Cigi_uint8 *)DBuf;
00152
00153 PackPointer CDta;
00154
00155 memcpy(tBuf,Buff,CIGI_COLL_DET_VOL_RESP_PACKET_SIZE_V2);
00156
00157 CDta.d = DBuf;
00158
00159 CDta.c += 2;
00160
00161 CIGI_SCOPY2(&EntityID, CDta.s++);
00162
00163 Cigi_uint8 HDta = *CDta.c++;
00164 VolID = (HDta >> 1) & 0x7f;
00165 CollType = (CollTypeGrp)(HDta & 0x01);
00166
00167 CDta.c++;
00168
00169 CIGI_SCOPY2(&CollEntityID, CDta.s++);
00170
00171 return(PacketSize);
00172
00173 }
00174
00175
00176
00177
00178
00179
00180
00181
00182
00183
00184
00185 int CigiCollDetVolRespV2::SetVolID(const Cigi_uint8 VolIDIn, bool bndchk)
00186 {
00187
00188 #ifndef CIGI_NO_BND_CHK
00189 if(bndchk && ((VolIDIn < 0)||(VolIDIn > 127)))
00190 {
00191 #ifndef CIGI_NO_EXCEPT
00192 throw CigiValueOutOfRangeException("VolID",(Cigi_uint8)VolIDIn,0,127);
00193 #endif
00194 return(CIGI_ERROR_VALUE_OUT_OF_RANGE);
00195 }
00196 #endif
00197
00198 VolID = VolIDIn;
00199 return(CIGI_SUCCESS);
00200
00201 }
00202
00203