ltkcpp_frameextract.cpp
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #include <assert.h>
00018 #include <stdio.h>
00019
00020 #include "ltkcpp_platform.h"
00021 #include "ltkcpp_base.h"
00022 #include "ltkcpp_frame.h"
00023
00024
00025 namespace LLRP
00026 {
00027
00028 CFrameExtract::CFrameExtract (void)
00029 {
00030 memset(this, 0, sizeof *this);
00031 }
00032
00033 CFrameExtract::CFrameExtract (
00034 const unsigned char * pBuffer,
00035 unsigned int nBuffer)
00036 {
00037 memset(this, 0, sizeof *this);
00038
00039 if(10u > nBuffer)
00040 {
00041 m_MessageLength = 10u;
00042 m_nBytesNeeded = m_MessageLength - nBuffer;
00043 m_eStatus = NEED_MORE;
00044 }
00045 else
00046 {
00047 llrp_u16_t VersType;
00048
00049 VersType = pBuffer[0];
00050 VersType <<= 8u;
00051 VersType |= pBuffer[1];
00052
00053 m_MessageLength = pBuffer[2];
00054 m_MessageLength <<= 8u;
00055 m_MessageLength |= pBuffer[3];
00056 m_MessageLength <<= 8u;
00057 m_MessageLength |= pBuffer[4];
00058 m_MessageLength <<= 8u;
00059 m_MessageLength |= pBuffer[5];
00060
00061
00062
00063
00064
00065 m_MessageType = VersType & 0x3FFu;
00066 m_ProtocolVersion = (VersType >> 10u) & 0x7u;
00067
00068 m_MessageID = pBuffer[6];
00069 m_MessageID <<= 8u;
00070 m_MessageID |= pBuffer[7];
00071 m_MessageID <<= 8u;
00072 m_MessageID |= pBuffer[8];
00073 m_MessageID <<= 8u;
00074 m_MessageID |= pBuffer[9];
00075
00076 if(10u > m_MessageLength)
00077 {
00078 m_nBytesNeeded = 0;
00079 m_eStatus = FRAME_ERROR;
00080 }
00081 else if(nBuffer >= m_MessageLength)
00082 {
00083 m_nBytesNeeded = 0;
00084 m_eStatus = READY;
00085 }
00086 else
00087 {
00088 m_nBytesNeeded = m_MessageLength - nBuffer;
00089 m_eStatus = NEED_MORE;
00090 }
00091 }
00092 }
00093
00094
00095 };
00096