00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00029 namespace LLRP
00030 {
00031 class CFrameExtract;
00032 class CFrameDecoder;
00033 class CFrameDecoderStream;
00034 class CFrameEncoder;
00035 class CFrameEncoderStream;
00036
00037 class CFrameExtract
00038 {
00039 public:
00040 enum {
00041 UNKNOWN,
00042 READY,
00043 FRAME_ERROR,
00044 NEED_MORE
00045 } m_eStatus;
00046
00047 llrp_u32_t m_MessageLength;
00048 llrp_u16_t m_MessageType;
00049 llrp_u8_t m_ProtocolVersion;
00050 llrp_u32_t m_MessageID;
00051
00052 unsigned int m_nBytesNeeded;
00053
00054 CFrameExtract (void);
00055
00056 CFrameExtract (
00057 const unsigned char * pBuffer,
00058 unsigned int nBuffer);
00059 };
00060
00061 class CFrameDecoder : public CDecoder
00062 {
00063 friend class CFrameDecoderStream;
00064
00065 public:
00066 CFrameDecoder (
00067 const CTypeRegistry * pTypeRegistry,
00068 unsigned char * pBuffer,
00069 unsigned int nBuffer);
00070
00071 ~CFrameDecoder (void);
00072
00073 CMessage *
00074 decodeMessage (void);
00075
00076 private:
00077 unsigned char * m_pBuffer;
00078 unsigned int m_nBuffer;
00079
00080 unsigned int m_iNext;
00081 unsigned int m_BitFieldBuffer;
00082 unsigned int m_nBitFieldResid;
00083
00084 llrp_u8_t
00085 next_u8(void);
00086
00087 llrp_u16_t
00088 next_u16(void);
00089
00090 llrp_u32_t
00091 next_u32(void);
00092
00093 llrp_u64_t
00094 next_u64(void);
00095 };
00096
00097 class CFrameDecoderStream : public CDecoderStream
00098 {
00099 friend class CFrameDecoder;
00100
00101 public:
00102
00103
00104
00105
00106 llrp_u8_t
00107 get_u8 (
00108 const CFieldDescriptor * pFieldDescriptor);
00109
00110 llrp_s8_t
00111 get_s8 (
00112 const CFieldDescriptor * pFieldDescriptor);
00113
00114 llrp_u8v_t
00115 get_u8v (
00116 const CFieldDescriptor * pFieldDescriptor);
00117
00118 llrp_s8v_t
00119 get_s8v (
00120 const CFieldDescriptor * pFieldDescriptor);
00121
00122
00123
00124
00125
00126 llrp_u16_t
00127 get_u16 (
00128 const CFieldDescriptor * pFieldDescriptor);
00129
00130 llrp_s16_t
00131 get_s16 (
00132 const CFieldDescriptor * pFieldDescriptor);
00133
00134 llrp_u16v_t
00135 get_u16v (
00136 const CFieldDescriptor * pFieldDescriptor);
00137
00138 llrp_s16v_t
00139 get_s16v (
00140 const CFieldDescriptor * pFieldDescriptor);
00141
00142
00143
00144
00145
00146 llrp_u32_t
00147 get_u32 (
00148 const CFieldDescriptor * pFieldDescriptor);
00149
00150 llrp_s32_t
00151 get_s32 (
00152 const CFieldDescriptor * pFieldDescriptor);
00153
00154 llrp_u32v_t
00155 get_u32v (
00156 const CFieldDescriptor * pFieldDescriptor);
00157
00158 llrp_s32v_t
00159 get_s32v (
00160 const CFieldDescriptor * pFieldDescriptor);
00161
00162
00163
00164
00165
00166 llrp_u64_t
00167 get_u64 (
00168 const CFieldDescriptor * pFieldDescriptor);
00169
00170 llrp_s64_t
00171 get_s64 (
00172 const CFieldDescriptor * pFieldDescriptor);
00173
00174 llrp_u64v_t
00175 get_u64v (
00176 const CFieldDescriptor * pFieldDescriptor);
00177
00178 llrp_s64v_t
00179 get_s64v (
00180 const CFieldDescriptor * pFieldDescriptor);
00181
00182
00183
00184
00185
00186 llrp_u1_t
00187 get_u1 (
00188 const CFieldDescriptor * pFieldDescriptor);
00189
00190 llrp_u1v_t
00191 get_u1v (
00192 const CFieldDescriptor * pFieldDescriptor);
00193
00194 llrp_u2_t
00195 get_u2 (
00196 const CFieldDescriptor * pFieldDescriptor);
00197
00198 llrp_u96_t
00199 get_u96 (
00200 const CFieldDescriptor * pFieldDescriptor);
00201
00202 llrp_utf8v_t
00203 get_utf8v (
00204 const CFieldDescriptor * pFieldDescriptor);
00205
00206 llrp_bytesToEnd_t
00207 get_bytesToEnd (
00208 const CFieldDescriptor * pFieldDescriptor);
00209
00210
00211
00212
00213
00214 int
00215 get_e1 (
00216 const CFieldDescriptor * pFieldDescriptor);
00217
00218 int
00219 get_e2 (
00220 const CFieldDescriptor * pFieldDescriptor);
00221
00222 int
00223 get_e8 (
00224 const CFieldDescriptor * pFieldDescriptor);
00225
00226 int
00227 get_e16 (
00228 const CFieldDescriptor * pFieldDescriptor);
00229
00230 int
00231 get_e32 (
00232 const CFieldDescriptor * pFieldDescriptor);
00233
00234 llrp_u8v_t
00235 get_e8v (
00236 const CFieldDescriptor * pFieldDescriptor);
00237
00238
00239
00240
00241
00242 void
00243 get_reserved (
00244 unsigned int nBit);
00245
00246 private:
00247 CFrameDecoder * m_pDecoder;
00248 CFrameDecoderStream * m_pEnclosingDecoderStream;
00249 const CTypeDescriptor * m_pRefType;
00250 unsigned int m_iBegin;
00251 unsigned int m_iLimit;
00252
00253 CFrameDecoderStream (
00254 CFrameDecoder * pDecoder);
00255
00256 CFrameDecoderStream (
00257 CFrameDecoderStream * pEnclosingDecoderStream);
00258
00259
00260
00261 CMessage *
00262 getMessage (void);
00263
00264 CParameter *
00265 getParameter (void);
00266
00267 unsigned int
00268 getRemainingByteCount (void);
00269
00270 llrp_bool_t
00271 checkAvailable (
00272 unsigned int nByte,
00273 const CFieldDescriptor * pFieldDescriptor);
00274
00275 unsigned int
00276 getBitField (
00277 unsigned int nBit,
00278 const CFieldDescriptor * pFieldDescriptor);
00279
00280 llrp_u16_t
00281 getVarlenCount (
00282 const CFieldDescriptor * pFieldDescriptor);
00283
00284 llrp_bool_t
00285 verifyVectorAllocation (
00286 const void * pValue,
00287 const CFieldDescriptor * pFieldDescriptor);
00288 };
00289
00290 class CFrameEncoder : public CEncoder
00291 {
00292 friend class CFrameEncoderStream;
00293
00294 public:
00295 CFrameEncoder (
00296 unsigned char * pBuffer,
00297 unsigned int nBuffer);
00298
00299 ~CFrameEncoder (void);
00300
00301 void
00302 encodeElement (
00303 const CElement * pElement);
00304
00305 unsigned int
00306 getLength(void);
00307
00308 private:
00309 unsigned char * m_pBuffer;
00310 unsigned int m_nBuffer;
00311
00312 unsigned int m_iNext;
00313 unsigned int m_BitFieldBuffer;
00314 unsigned int m_nBitFieldResid;
00315
00316 void
00317 next_u8 (
00318 llrp_u8_t Value);
00319
00320 void
00321 next_u16 (
00322 llrp_u16_t Value);
00323
00324 void
00325 next_u32 (
00326 llrp_u32_t Value);
00327
00328 void
00329 next_u64 (
00330 llrp_u64_t Value);
00331 };
00332
00333 class CFrameEncoderStream : public CEncoderStream
00334 {
00335 friend class CFrameEncoder;
00336
00337 public:
00338 void
00339 putRequiredSubParameter (
00340 const CParameter * pParameter,
00341 const CTypeDescriptor * pRefType);
00342
00343 void
00344 putOptionalSubParameter (
00345 const CParameter * pParameter,
00346 const CTypeDescriptor * pRefType);
00347
00348 void
00349 putRequiredSubParameterList (
00350 const tListOfParameters * pParameterList,
00351 const CTypeDescriptor * pRefType);
00352
00353 void
00354 putOptionalSubParameterList (
00355 const tListOfParameters * pParameterList,
00356 const CTypeDescriptor * pRefType);
00357
00358
00359
00360
00361
00362 void
00363 put_u8 (
00364 llrp_u8_t Value,
00365 const CFieldDescriptor * pFieldDescriptor);
00366
00367 void
00368 put_s8 (
00369 llrp_s8_t Value,
00370 const CFieldDescriptor * pFieldDescriptor);
00371
00372 void
00373 put_u8v (
00374 llrp_u8v_t Value,
00375 const CFieldDescriptor * pFieldDescriptor);
00376
00377 void
00378 put_s8v (
00379 llrp_s8v_t Value,
00380 const CFieldDescriptor * pFieldDescriptor);
00381
00382
00383
00384
00385
00386 void
00387 put_u16 (
00388 llrp_u16_t Value,
00389 const CFieldDescriptor * pFieldDescriptor);
00390
00391 void
00392 put_s16 (
00393 llrp_s16_t Value,
00394 const CFieldDescriptor * pFieldDescriptor);
00395
00396 void
00397 put_u16v (
00398 llrp_u16v_t Value,
00399 const CFieldDescriptor * pFieldDescriptor);
00400
00401 void
00402 put_s16v (
00403 llrp_s16v_t Value,
00404 const CFieldDescriptor * pFieldDescriptor);
00405
00406
00407
00408
00409
00410 void
00411 put_u32 (
00412 llrp_u32_t Value,
00413 const CFieldDescriptor * pFieldDescriptor);
00414
00415 void
00416 put_s32 (
00417 llrp_s32_t Value,
00418 const CFieldDescriptor * pFieldDescriptor);
00419
00420 void
00421 put_u32v (
00422 llrp_u32v_t Value,
00423 const CFieldDescriptor * pFieldDescriptor);
00424
00425 void
00426 put_s32v (
00427 llrp_s32v_t Value,
00428 const CFieldDescriptor * pFieldDescriptor);
00429
00430
00431
00432
00433
00434 void
00435 put_u64 (
00436 llrp_u64_t Value,
00437 const CFieldDescriptor * pFieldDescriptor);
00438
00439 void
00440 put_s64 (
00441 llrp_s64_t Value,
00442 const CFieldDescriptor * pFieldDescriptor);
00443
00444 void
00445 put_u64v (
00446 llrp_u64v_t Value,
00447 const CFieldDescriptor * pFieldDescriptor);
00448
00449 void
00450 put_s64v (
00451 llrp_s64v_t Value,
00452 const CFieldDescriptor * pFieldDescriptor);
00453
00454
00455
00456
00457
00458 void
00459 put_u1 (
00460 llrp_u1_t Value,
00461 const CFieldDescriptor * pFieldDescriptor);
00462
00463 void
00464 put_u1v (
00465 llrp_u1v_t Value,
00466 const CFieldDescriptor * pFieldDescriptor);
00467
00468 void
00469 put_u2 (
00470 llrp_u2_t Value,
00471 const CFieldDescriptor * pFieldDescriptor);
00472
00473 void
00474 put_u96 (
00475 llrp_u96_t Value,
00476 const CFieldDescriptor * pFieldDescriptor);
00477
00478 void
00479 put_utf8v (
00480 llrp_utf8v_t Value,
00481 const CFieldDescriptor * pFieldDescriptor);
00482
00483 void
00484 put_bytesToEnd (
00485 llrp_bytesToEnd_t Value,
00486 const CFieldDescriptor * pFieldDescriptor);
00487
00488
00489
00490
00491
00492 void
00493 put_e1 (
00494 int eValue,
00495 const CFieldDescriptor * pFieldDescriptor);
00496
00497 void
00498 put_e2 (
00499 int eValue,
00500 const CFieldDescriptor * pFieldDescriptor);
00501
00502 void
00503 put_e8 (
00504 int eValue,
00505 const CFieldDescriptor * pFieldDescriptor);
00506
00507 void
00508 put_e16 (
00509 int eValue,
00510 const CFieldDescriptor * pFieldDescriptor);
00511
00512 void
00513 put_e32 (
00514 int eValue,
00515 const CFieldDescriptor *pFieldDescriptor);
00516
00517 void
00518 put_e8v (
00519 llrp_u8v_t Value,
00520 const CFieldDescriptor * pFieldDescriptor);
00521
00522
00523
00524
00525
00526 void
00527 put_reserved (
00528 unsigned int nBits);
00529
00530 private:
00531 CFrameEncoder * m_pEncoder;
00532 CFrameEncoderStream * m_pEnclosingEncoderStream;
00533 const CTypeDescriptor * m_pRefType;
00534 unsigned int m_iBegin;
00535
00536 CFrameEncoderStream (
00537 CFrameEncoder * pEncoder);
00538
00539 CFrameEncoderStream (
00540 CFrameEncoderStream * pEnclosingEncoderStream);
00541
00542
00543
00544 void
00545 putElement (
00546 const CElement * pElement);
00547
00548 llrp_bool_t
00549 checkAvailable (
00550 unsigned int nByte,
00551 const CFieldDescriptor * pFieldDescriptor);
00552
00553 llrp_bool_t
00554 putBitField (
00555 unsigned int nBit,
00556 unsigned int Value,
00557 const CFieldDescriptor * pFieldDescriptor);
00558 };
00559
00560
00561 };