⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 intbusframe.cpp

📁 一个通讯管理机的源代码。比较好用。推荐
💻 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 + -