📄 isaframe.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 + -