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

📄 isaframe.cpp

📁 一个通讯管理机的源代码。比较好用。推荐
💻 CPP
字号:
#include "isaframe.h"const BYTE CISAFrame::m_abySOI[5] = {0xeb,0x90,0xeb,0x90,2};WORD CISAFrame::GetCHKSUM(){	WORD wRet = 0;	wRet += m_byCID;	wRet += m_wLength + 2;	for (BYTE b=0; m_pData && (b<m_wLength); b++)		wRet += m_pData[b];	return wRet;}bool CISAFrame::ByteIn(BYTE b)//BOOL CISAFrame::ByteIn(BYTE b,BYTE* pbyInBuf,WORD& wLength){	BOOL bRet = FALSE;	if (!m_bStart)	{		if (m_abySOI[m_wInLength] == b)		{			m_pbyInBuf[m_wInLength++] = b;			if (m_wInLength == 5)	m_bStart = TRUE;		}		else m_wInLength = 0;	}	else if (m_wInLength == 6)	{		m_pbyInBuf[m_wInLength++] = b;		if ((b == 0x6) || (b == 0x15) || (b == 0x48))		{			m_wLength = 0;			bRet = TRUE;		}	}	else if (m_wInLength == 7)	{		m_wLength = b - 2;		m_pbyInBuf[m_wInLength++] = b;	}	else if (m_wInLength == (m_wLength+10))	{		if (b==0x03)		{			m_pbyInBuf[m_wInLength++] = b;			bRet = TRUE;		}		else		{			m_bStart = false;			bRet = FALSE;			m_wInLength = 0;			m_wLength = 0;		}	}	else m_pbyInBuf[m_wInLength++] = b;	return bRet;}bool CISAFrame::FrameToBuffer(CDataNode &dn)//WORD CISAFrame::FrameToBuffer(BYTE* &pBuffer){	WORD w = 0;	if (m_bIsSetup)	{		WORD wSize;		if ((m_byCID == 0x6) || (m_byCID == 0x15) ||(m_byCID == 0x48))			wSize = 7;		else wSize = m_wLength + 11;		dn.SetSize(wSize);		BYTE* pBuffer = dn.m_pbyData;//new BYTE [wSize];		memcpy(&pBuffer[0],m_abySOI,100);		pBuffer[5] = m_byAddr;		pBuffer[6] = m_byCID;		if (wSize != 7)		{			pBuffer[7] = m_wLength + 2;			for (w = 1; m_pData && (w<m_wLength+1); w++)				pBuffer[7+w] = m_pData[w-1];			m_wCHKSUM = GetCHKSUM();			pBuffer[7+w++] = (BYTE)(m_wCHKSUM);			pBuffer[7+w++] = (BYTE)(m_wCHKSUM>>8);			pBuffer[7+w++] = 3;		}	}	dn.m_wSize = 7+w;	return true;}/*bool CCDTFrame::BufferToFrame(CDQue* pPhyDQ){	Reset();	CDataNode *pDN;	bool bIsComplete;	m_wInLength = 0;	while (bIsComplete = pPhyDQ->Get(pDN,50))	{		WORD wSize = 0;		while ((wSize<pDN->m_wSize) && (pDN->m_wSize < 256*6))		{			if (ByteIn(pDN->m_pbyData[wSize++]))			{				delete pDN;				goto check;			}		}		delete pDN;	}check:	if (bIsComplete)	{		WORD wSize = 0;		for (WORD w=0; w<m_wInLength; w++)		{			if (w < 6)			{				if (m_abyCDTHEAD[w] != m_pbyInBuf[w])					return false;			}			else if (w == 6)			{				if(!VerifyCRC(&m_pbyInBuf[6]))					return false;			}			else if (w == 7)	m_byCID = m_pbyInBuf[7];			else if (w == 8)	m_wLength = 6 * m_pbyInBuf[8];			else if ((w-12)%6 == 0)			{				if(!VerifyCRC(&m_pbyInBuf[w]))				{					m_wLength -= 6;					wSize += 6;				}				else memcpy(m_pData + w-12-wSize, &m_pbyInBuf[w],6);			}		}	}	return bIsComplete;}*/bool CISAFrame::BufferToFrame(CDQue* pPhyDQ)//BOOL CISAFrame::BufferToFrame(BYTE* pBuffer,WORD wSize){	Reset();	CDataNode *pDN;	bool bIsComplete;//	m_wInLength = 0;	while (bIsComplete = pPhyDQ->Get(pDN,10))	{		WORD wSize = 0;		while ((wSize<pDN->m_wSize) && (pDN->m_wSize < 256*6))		{			if (ByteIn(pDN->m_pbyData[wSize++]))			{				delete pDN;				goto check;			}		}		delete pDN;	}check:	if (bIsComplete)	{//		Reset();		for (WORD w=0; w<m_wInLength; w++)		{			if (w < 5)			{				if (m_abySOI[w] != m_pbyInBuf[w])					break;			}			else if (w == 5) m_byAddr = m_pbyInBuf[w];			else if (w == 6)			{				m_byCID = m_pbyInBuf[w];				if ((m_byCID == 0x6) || (m_byCID == 0x15) || (m_byCID == 0x48))					m_bIsSetup = TRUE;			}			else if (w == 7)			{				m_wLength = m_pbyInBuf[w] - 2;//				if (m_wLength > 0) m_pData = new BYTE[m_wLength];			}			else if ((w > 7) && (w - 8 < m_wLength))				m_pData[w - 8] = m_pbyInBuf[w];			else if ((w > 7) && (w - 8 == m_wLength))				m_wCHKSUM = m_pbyInBuf[w];			else if ((w > 7) && (w - 8 == m_wLength + 1))			{				m_wCHKSUM += (WORD)(m_pbyInBuf[w])<<8;				if (m_wCHKSUM != GetCHKSUM()) break;			}			else if ((w > 7) && (m_wLength == w - 10))			{				if (m_pbyInBuf[w] == 3)					m_bIsSetup = true;			}		}	}	return m_bIsSetup;}void CISAFrame::SetupFrame(CFrameNode *pFNSend)//SetupFrame(BYTE byAddr,BYTE byCID,BYTE* pbyData,WORD wSize){	m_byAddr = pFNSend->m_byDesAddr;	if (pFNSend->m_wSize)	{		m_wLength = pFNSend->m_wSize;		memcpy(m_pData, pFNSend->m_pbyData,m_wLength);	}	else m_wLength = 0;	m_byCID = pFNSend->m_byCID;	m_wCHKSUM = GetCHKSUM();	m_bIsSetup = true;}void CISAFrame::FrameToBuf(CFrameNode& fn){	fn.m_byCID = m_byCID;	fn.m_bySrcAddr = m_byAddr;	fn.m_wSize = m_wLength;	if ((fn.m_wSize > 0) && (fn.m_wSize < 256*6))	{		fn.SetSize(fn.m_wSize);		memcpy(fn.m_pbyData,m_pData,fn.m_wSize);	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -