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

📄 seriessampledlg.cpp

📁 EMBEDDED VC++4.0 对WINDOWS CE下的串口通信进行实验.将常用的串口功能封装为一个类,以回调方式读取串口数据,在S3C2410 ARM上通过
💻 CPP
📖 第 1 页 / 共 2 页
字号:
{
	int i,readLen,CurrPacketNo,prePacketNo,CheckSum;
	BYTE dataLen,PackType,CheckSumHigh,CheckSumLow;
	BYTE tmpBuf[MAX_PACKET_LEN];
	BYTE cBuf[2];
	BYTE recvMsg[MAX_PACKET_LEN];
	CString tempstr,tmpstr,MyExt,sendMsg;
    if(g_bPacketRecv_Flag)
	{
		// for test display recve data
		CSeriesSampleDlg *pDlg = (CSeriesSampleDlg *)this;
		CEdit * pEdit;
		pEdit = (CEdit*)pDlg->GetDlgItem(IDC_EDTRECV);

		CString strRecv = (char*)g_recvdata;
		CString strOld;
		/*pEdit->GetWindowText(strOld);
		pEdit->SetWindowText(strOld + strRecv);
		// end for test*/
		g_bPacketRecv_Flag=FALSE;
        for(i=0;i<8;i++)
          tmpBuf[i]=g_recvdata[i+3];
		//AfxMessageBox(_T("I AM ALIVE before checkdata!"));
        if(CheckData(g_recvdata,g_recvLen))
		{	
			//AfxMessageBox(_T("I AM ALIVE after checkdata!"));
            PackType=g_recvdata[2];
            g_dataPointer=0;
			switch(PackType)
			{
				case PT_SEARCHNWREQ:
					g_sendBuf[0]=PAA;
					g_sendBuf[1]=P55;
					g_sendBuf[2]=PT_SEARCHNWACK;
					g_sendBuf[3]=0x00;
					g_sendBuf[4]=0x00;
					g_sendBuf[5]=0x00;
					g_sendBuf[6]=0x00;
					g_sendBuf[7]=0x00;
					g_sendBuf[8]=0x00;
					g_sendBuf[9]=0x00;
					g_sendBuf[10]=0x00;
					g_sendBuf[11]=0x19;
					g_sendBuf[12]=0x00;
					g_sendBuf[13]=0x01;
					g_sendBuf[14]=0x00;
					g_sendBuf[15]=0x00;
					g_sendBuf[16]=0x01;
					g_sendBuf[17]=0x01;
					g_sendBuf[18]=0x01;
					g_sendBuf[19]=0x00;
					g_sendBuf[20]=0x00;
					g_sendBuf[21]=0x02;
					g_sendBuf[22]=0x02;
					g_sendBuf[23]=0x01;
					g_sendBuf[24]=0x00;
					g_sendBuf[25]=0x00;
					g_sendBuf[26]=0x03;
					g_sendBuf[27]=0x03;
					g_sendBuf[28]=0x01;
					g_sendBuf[29]=0x00;
					g_sendBuf[30]=0x00;
					g_sendBuf[31]=0x04;
					g_sendBuf[32]=0x05;
					g_sendBuf[33]=0x01;
					g_sendBuf[34]=0x00;
					g_sendBuf[35]=0x00;
					g_sendBuf[36]=0x05;
					CheckSum=0;
					for(i=0;i<37;i++)
						CheckSum=CheckSum+g_sendBuf[i];
					CheckSumHigh=CheckSum/256;
					CheckSumLow=CheckSum%256;
					g_sendBuf[37]=CheckSumHigh;
					g_sendBuf[38]=CheckSumLow;
					if (!m_ceSeries.WritePort(g_sendBuf,39))
					{
						AfxMessageBox(L"写入失败");
					}
					else
					{
						AfxMessageBox(L"搜索网络应答数据已发送!");
					}
					// for test display recve data
					pEdit->GetWindowText(strOld);
					pEdit->SetWindowText(strOld + strRecv);
					// end for test
					break;
				case PT_SEARCHNWACK:
					break;
				case PT_SEARCHNDREQ:
					g_sendBuf[0]=PAA;
					g_sendBuf[1]=P55;
					g_sendBuf[2]=PT_SEARCHNDACK;
					g_sendBuf[3]=0x00;
					g_sendBuf[4]=0x00;
					g_sendBuf[5]=0x00;
					g_sendBuf[6]=0x00;
					g_sendBuf[7]=0x00;
					g_sendBuf[8]=0x00;
					g_sendBuf[9]=0x00;
					g_sendBuf[10]=0x00;
					g_sendBuf[11]=0x18;
					g_sendBuf[12]=0x00;
					g_sendBuf[13]=0x01;
					g_sendBuf[14]=0x01;
					g_sendBuf[15]=0x00;
					g_sendBuf[16]=0x00;
					g_sendBuf[17]=0x01;
					g_sendBuf[18]=0x00;
					g_sendBuf[19]=0x02;
					g_sendBuf[20]=0x01;
					g_sendBuf[21]=0x00;
					g_sendBuf[22]=0x00;
					g_sendBuf[23]=0x02;
					g_sendBuf[24]=0x00;
					g_sendBuf[25]=0x03;
					g_sendBuf[26]=0x01;
					g_sendBuf[27]=0x00;
					g_sendBuf[28]=0x00;
					g_sendBuf[29]=0x03;
					g_sendBuf[30]=0x00;
					g_sendBuf[31]=0x04;
					g_sendBuf[32]=0x01;
					g_sendBuf[33]=0x00;
					g_sendBuf[34]=0x00;
					g_sendBuf[35]=0x04;
					CheckSum=0;
					for(i=0;i<36;i++)
						CheckSum=CheckSum+g_sendBuf[i];
					CheckSumHigh=CheckSum/256;
					CheckSumLow=CheckSum%256;
					g_sendBuf[36]=CheckSumHigh;
					g_sendBuf[37]=CheckSumLow;
					if (!m_ceSeries.WritePort(g_sendBuf,38))
					{
						AfxMessageBox(L"写入失败");
					}
					else
					{
						AfxMessageBox(L"搜索设备应答数据已发送!");
					}
					break;
				case PT_SEARCHNDACK:
					break;
				case PT_CONNREQ:
					g_sendBuf[0]=PAA;
					g_sendBuf[1]=P55;
					g_sendBuf[2]=PT_CONNACK;
					g_sendBuf[3]=0x00;
					g_sendBuf[4]=0x00;
					g_sendBuf[5]=0x00;
					g_sendBuf[6]=0x00;
					g_sendBuf[7]=0x00;
					g_sendBuf[8]=0x00;
					g_sendBuf[9]=0x00;
					g_sendBuf[10]=0x00;
					g_sendBuf[11]=0x00;
					CheckSum=0;
					for(i=0;i<12;i++)
					  CheckSum=CheckSum+g_sendBuf[i];
					CheckSumHigh=CheckSum/256;
					CheckSumLow=CheckSum%256;
					g_sendBuf[12]=CheckSumHigh;
					g_sendBuf[13]=CheckSumLow;
					if (!m_ceSeries.WritePort(g_sendBuf,14))
					{
						AfxMessageBox(L"写入失败");
					}
					else
					{
						AfxMessageBox(L"握手应答数据已发送!");
					}
					break;
				case PT_CONNACK:
					break;
				case PT_SENDMSGREQ:
					dataLen=g_recvdata[11];
					AfxMessageBox(_T("I AM ALIVE after recv msg pkt!"));
					//if((dataLen>0)&&(!g_bLargePacket))
					if(dataLen>0)
					{
						//if((g_recvdata[12]=PAA)&&(g_recvdata[13]=P55)) g_bLargePacket=TRUE;
						for(i=0;i<dataLen;i++)
						  recvMsg[i]=g_recvdata[i+12];
						g_PacketNo=0;
					}
					//if((g_recvdata[12]=PAA)&&(g_recvdata[13]=P55)) g_bLargePacket=TRUE;
					//else g_bLargePacket=FALSE;
					g_bLargePacket=FALSE;
					if(!g_bLargePacket)
					{
						sendMsg="You are WelCome,My Friend!欢迎你,我的朋友!";
						dataLen=sendMsg.GetLength();
						g_sendBuf[0]=PAA;
						g_sendBuf[1]=P55;
						g_sendBuf[2]=PT_SENDMSGACK;
						g_sendBuf[3]=0x00;
						g_sendBuf[4]=0x00;
						g_sendBuf[5]=0x00;
						g_sendBuf[6]=0x00;
						g_sendBuf[7]=0x00;
						g_sendBuf[8]=0x00;
						g_sendBuf[9]=0x00;
						g_sendBuf[10]=0x00;
						g_sendBuf[11]=dataLen;
						for(i=0;i<dataLen;i++)
						  g_sendBuf[i+12]=sendMsg[i];
						CheckSum=0;
						for(i=0;i<12+dataLen;i++)
							CheckSum=CheckSum+g_sendBuf[i];
						CheckSumHigh=CheckSum/256;
						CheckSumLow=CheckSum%256;
						g_sendBuf[12+dataLen]=CheckSumHigh;
						g_sendBuf[13+dataLen]=CheckSumLow;
						//MemoMsgRecv.Lines.Add(recvMsg);

						if (!m_ceSeries.WritePort(g_sendBuf,14+dataLen))
						{
							AfxMessageBox(L"写入失败");
						}
						else
						{
							AfxMessageBox(L"消息应答数据已发送!");
						}
					}
					else
					{
						if(dataLen<100) g_bLargePacket=false;
						g_sendBuf[0]=PAA;
						g_sendBuf[1]=P55;
						g_sendBuf[2]=PT_SENDMSGACK;
						g_sendBuf[3]=tmpBuf[0];
						g_sendBuf[4]=tmpBuf[1];
						g_sendBuf[5]=tmpBuf[2];
						g_sendBuf[6]=tmpBuf[3];
						g_sendBuf[7]=tmpBuf[6];
						g_sendBuf[8]=tmpBuf[7];
						g_sendBuf[9]=tmpBuf[4];
						g_sendBuf[10]=tmpBuf[5];
						g_sendBuf[11]=1;
						g_sendBuf[12]=PAA;
						CheckSum=0;
						for(i=0;i<13;i++)
							CheckSum=CheckSum+g_sendBuf[i];
						CheckSumHigh=CheckSum/256;
						CheckSumLow=CheckSum%256;
						g_sendBuf[13]=CheckSumHigh;
						g_sendBuf[14]=CheckSumLow;
						if (!m_ceSeries.WritePort(g_sendBuf,15))
						{
							AfxMessageBox(L"写入失败");
						}
					}
					pEdit->GetWindowText(strOld);
					pEdit->SetWindowText(strOld + strRecv);
					break;
				case PT_SENDMSGACK:
					dataLen=g_recvdata[11];
					if(dataLen>0)
					{
						for(i=0;i<MAX_PACKET_LEN;i++)
						  recvMsg[i]=0x00;
						for(i=0;i<dataLen;i++)
						  recvMsg[i]=g_recvdata[i+12];
					}
					cBuf[0]=0x0D;
					cBuf[1]=0x0A;
					tmpstr=cBuf;
					pEdit->GetWindowText(strOld);
					pEdit->SetWindowText(strOld + recvMsg+tmpstr);
					break;
				case PT_OBJTRANSACK:
					break;

				case PT_ZBQULITYRACK:
					break;
				case PT_ZBSENSITIVEACK:
					break;
				case PT_BROADCASTACK:
				default:
					break;
			}
		}
        for(i=0;i<MAX_PACKET_LEN;i++ )
          g_recvdata[i]=0x00;
        g_bDone=FALSE;
      }
}

void CSeriesSampleDlg::PacketData(BYTE *tmpSndSBuf, BYTE PktType, int PktNo, unsigned short destaddr, unsigned short sourceaddr, BYTE sLen)
{
	int  i,j,k;
	unsigned short CheckSum;
	BYTE bufLen,CheckSumHigh,CheckSumLow;
	CString tempstr;
	for(i=0;i<MAX_PACKET_LEN;i++)
		g_sendBuf[i]=0x00;
	bufLen=sLen;
	g_sendBuf[0]=PAA;
	g_sendBuf[1]=P55;
	g_sendBuf[2]=PktType;
	g_sendBuf[3]=(BYTE)PktNo;
	g_sendBuf[4]=(BYTE)PktNo>>8;
	g_sendBuf[5]=(BYTE)PktNo>>16;
	g_sendBuf[6]=(BYTE)PktNo>>24;
	g_sendBuf[7]=(BYTE)destaddr;
	g_sendBuf[8]=(BYTE)destaddr>>8;
	g_sendBuf[9]=(BYTE)sourceaddr;
	g_sendBuf[10]=(BYTE)sourceaddr>>16;
	g_sendBuf[11]=bufLen;
	for(i=0;i<bufLen;i++)
		g_sendBuf[12+i]=tmpSndSBuf[i];
	CheckSum=0;
	for(i=0;i<bufLen+12;i++)
      CheckSum=CheckSum+g_sendBuf[i];
	CheckSumHigh=CheckSum/256;
	CheckSumLow=CheckSum%256;
	g_sendBuf[bufLen+12]=CheckSumHigh;
	g_sendBuf[bufLen+13]=CheckSumLow;
}

⌨️ 快捷键说明

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