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

📄 onboardsimulserial.cpp

📁 串口通信程序
💻 CPP
字号:
// OnBoardSimulSerial.cpp: implementation of the COnBoardSimulSerial class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "OnBoardSimulSerial.h"
#include "OnBoardSimul.h"

#include "OnBoardSimulDlg.h"


//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

COnBoardSimulSerial g_OnBoardSimul; //串口全局变量
unsigned char szRecvBuffer[50]; //存放完整的帧
recv_entry_t  recvEntry;

COnBoardSimulSerial::COnBoardSimulSerial()
{

}

COnBoardSimulSerial::~COnBoardSimulSerial()
{

}

void COnBoardSimulSerial::OnRecvData(char *pBuffer, int nLen)
{
	for (int i=0; i<nLen; i++)
	{
		if (GetOneFrame(&recvEntry, (unsigned char *)szRecvBuffer, pBuffer[i]) == 0)
		{
			continue;
		}
		COnBoardSimulDlg * pWnd = (COnBoardSimulDlg *)(::AfxGetApp()->m_pMainWnd);
		pWnd->Display(szRecvBuffer, recvEntry.u16Len+6, szRecvBuffer[4]);
		
	}
}
BOOL COnBoardSimulSerial::SendData(char *pBuffer, int nLen)
{
	return CSerialCtrl::SendData(pBuffer, nLen);
}

int COnBoardSimulSerial::GetOneFrame(recv_entry_t* pEntry,unsigned char* pu8Dst,unsigned char u8Src)
{
	switch( pEntry->s32State )
	{
	case 0:
		if( u8Src == FLAG1 )
		{
			pu8Dst[0] = FLAG1;
			pEntry->s32State = 1;
		}
		break;
	case 1:
		if (u8Src == FLAG2)
		{
			pu8Dst[1] = FLAG2;
			pEntry->s32State = 2;
		}
		break;
	case 2:
		if( u8Src == FLAG3 )
		{
			pu8Dst[2] = FLAG3;
			pEntry->s32State = 3;
		}
		else if( u8Src != FLAG1 )
			pEntry->s32State = 0;
		break;
	case 3:
		pu8Dst[3] = u8Src;
		pEntry->u16Len = pu8Dst[3];
		if( pEntry->u16Len < 2 || pEntry->u16Len > 30 )
			pEntry->s32State = 0;
		else
		{
			pEntry->s32State = 4;
			pEntry->pu8Cur = pu8Dst + 4;
		}
		break;
	case 4:
		*(pEntry->pu8Cur) = u8Src;
		(pEntry->pu8Cur)++;
		if( pEntry->pu8Cur - pu8Dst >= (pEntry->u16Len+ 6))
		{
			
			pEntry->s32State = 0;
			return 1;
		}
		break;
	default:
		pEntry->s32State = 0;
		break;
	}
	
	return 0;
}

⌨️ 快捷键说明

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