📄 ja05frame.cpp
字号:
#include "ja05frame.h"////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////bool CJA05Frame::FrameToBuffer(CDataNode &dn){ bool bRet = false; if(m_bIsSetup) { WORD wDataSize = GetDataSize(); dn.SetSize(GetSize()); dn.m_pbyData[0]=0xaa; dn.m_pbyData[1]=m_byAddr; dn.m_pbyData[2]=wDataSize+1; dn.m_pbyData[3]=m_byCID; if (GetDataSize()) memcpy(dn.m_pbyData+4,m_pData,wDataSize); BYTE* pby = dn.m_pbyData+4+wDataSize; *pby++ = xor_(dn.m_pbyData+3,wDataSize+1); *pby = 0xd; bRet = true; } return bRet;}void CJA05Frame::SetupFrame(CFrameNode *pFNSend){ m_byAddr = pFNSend->m_byDesAddr; if (pFNSend->m_pbyData && pFNSend->m_wSize) { m_wLength = pFNSend->m_wSize; memcpy(m_pData,pFNSend->m_pbyData,pFNSend->m_wSize); } else m_wLength = 0; m_byCID = pFNSend->m_byCID; m_bIsSetup = true;}void CJA05Frame::FrameToBuf(CFrameNode& fn){ fn.m_byCID = m_byCID; fn.m_bySrcAddr = m_byAddr; if (m_wLength) { fn.SetSize(m_wLength); memcpy(fn.m_pbyData,m_pData,m_wLength); }}bool CJA05Frame::BufferToFrame(CDQue* pPhyDQ){ Reset(); CDataNode *pDN = NULL; bool bRet = false; while (pPhyDQ->Get(pDN,100) && pDN) { WORD wSize = 0; while ((wSize<pDN->m_wSize) && (pDN->m_wSize < 16)) { if (ByteIn(pDN->m_pbyData[wSize++])) { delete pDN; bRet = true; goto check; } } delete pDN; }check: if (bRet) { BYTE* pTemp = m_pbyInBuf+1; m_byAddr = *pTemp++; m_wLength = (*pTemp++) - 1; m_byCID = *pTemp++; if (m_wLength > 0) { memcpy(m_pData,pTemp,m_wLength); pTemp += m_wLength; } } return bRet;}bool CJA05Frame::ByteIn(BYTE b)//BOOL CISAFrame::ByteIn(BYTE b,BYTE* pbyInBuf,WORD& wLength){ BOOL bRet = FALSE; if (!m_bStart) { if (0xaa == b) { m_pbyInBuf[m_wInLength++] = b; if (m_wInLength == 1) m_bStart = TRUE; } else m_wInLength = 0; } else if (m_wInLength == 2) { m_wLength = b - 1; m_pbyInBuf[m_wInLength++] = b; } else if (m_wInLength == (m_wLength+5)) { if (b==0xd) { m_pbyInBuf[m_wInLength++] = b; if (xor_(m_pbyInBuf+3,m_wInLength-5) == m_pbyInBuf[m_wInLength-2]) bRet = TRUE; } if (!bRet) { m_bStart = false; m_wInLength = 0; m_wLength = 0; } } else m_pbyInBuf[m_wInLength++] = b; return bRet;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -