📄 intbusframe.cpp
字号:
#include "intbusframe.h"////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////bool CIntbusFrame::FrameToBuffer(CDataNode &dn){ bool bRet = false; if(m_bIsSetup) { WORD wDataSize = GetDataSize(); dn.SetSize(wDataSize+4); dn.m_pbyData[0]=m_byAddr; dn.m_pbyData[1]=wDataSize+3; dn.m_pbyData[2]=m_byCID; if (wDataSize) memcpy(dn.m_pbyData+3,m_pData,wDataSize); *(dn.m_pbyData+3+wDataSize) = xor_(dn.m_pbyData,wDataSize+3); BYTE byA = 1; BYTE by1Count = 0; BYTE* pbyTemp = dn.m_pbyData; BYTE byValue = *pbyTemp; for (BYTE b=0;b<7;b++,byA<<=1) if ((byValue & byA) == byA) by1Count++; if (by1Count%2 == 0) *pbyTemp |= 0x80; pbyTemp++; for (WORD w=0;w<3+wDataSize;w++,pbyTemp++) { byA=1; by1Count = 0; byValue = *pbyTemp; for (BYTE b=0;b<7;b++,byA<<=1) if ((byValue & byA) == byA) by1Count++; if (by1Count%2 == 1) *pbyTemp |= 0x80; } bRet = true; } return bRet;}void CIntbusFrame::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 CIntbusFrame::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 CIntbusFrame::BufferToFrame(CDQue* pPhyDQ){ Reset(); CDataNode *pDN = NULL; bool bRet = false; while (pPhyDQ->Get(pDN,200) && pDN) { if (m_wInLength + pDN->m_wSize >= 258) { delete pDN; break; } if (m_bStart == false) { if (pDN->m_pbyData[0] == 0x5a) m_bStart = true; } if (m_bStart) { memcpy(&m_pbyInBuf[m_wInLength],pDN->m_pbyData,pDN->m_wSize); m_wInLength += pDN->m_wSize; delete pDN; if (m_wInLength >= 3) { m_wEchoLen = m_pbyInBuf[2] +1; if (m_wInLength>=m_wEchoLen) { m_wInLength = m_wEchoLen; if (m_pbyInBuf[m_wInLength-1] == xor_(m_pbyInBuf,m_wInLength-1)) bRet = true; break; } } } else delete pDN; } if (bRet) { BYTE* pTemp = m_pbyInBuf; pTemp++; m_byAddr = *pTemp++; m_wLength = m_wInLength - 5; pTemp++; m_byCID = *pTemp++; if (m_wLength > 0) { memcpy(m_pData,pTemp,m_wLength); } } return bRet;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -