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

📄 cf_test_dlg.cpp

📁 arm lpc2000 应用历程 arm lpc2000 应用历程
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	COMMAND.Format("ZLG:%02X%08X%02X",CommandCode,NULL,SectorCount);//将字符送入临时变量strtemp存放
	m_COMM.SetOutput(COleVariant(COMMAND));			//发送数据
}

BEGIN_EVENTSINK_MAP(CCF_TEST_Dlg, CDialog)
    //{{AFX_EVENTSINK_MAP(CCF_TEST_Dlg)
	ON_EVENT(CCF_TEST_Dlg, IDC_COMM, 1 /* OnComm */, OnCom, VTS_NONE)
	//}}AFX_EVENTSINK_MAP
END_EVENTSINK_MAP()


/***********************************************************
** 函数名称: CString IntToASCII(unsigned char input)
** 功能描述: 将两位的无符号整数转换为字符串
** 输   入:   unsigned char input : 16进制数
** 输    出:   input  的字符串形式  

  ** 例    如: 0xFF - > "FF" 
************************************************************/
CString IntToASCII(unsigned char input)
{
	char temp[2];
	char exchange;
	CString output = "";		
	itoa(input,temp,16);		//结果高位放于temp[0],低位放于temp[1]
	
	if (temp[1] == 0)	        //因为如果input为0x0F 时,结果为 'F','0';	
	{						    //所以要交换一下temp[1]与temp[0]
		exchange = temp[1];
		temp[1]  = temp[0];
		temp[0]  = exchange;
	}	
	
	if (temp[0] == 0)  output += "0";
	   else	           output += temp[0];
	   
	   if (temp[1] == 0)  output += "0";
	   else            output += temp[1];
	   
	   return output;
}


/***********************************************************
** 函数名称: void StrToHex(CString str,__int16 len,unsigned char *databuff)
** 功能描述: 将一串字符串转换为一串两位的16进制数
** 输   入: CString   str              : 输入的字符串
__int16   len              : 字符串的长度
** 输    出: unsigned char  *databuff   : 输出的16进制数串

  ** 例    如: "FF" - > 0xFF ; "1236" - > 12 36
  ** 备    注:len <= 24
************************************************************/
void StrToHex(CString str,__int16 len,unsigned char *databuff)
{
    __int16 intdata[12];							//len必须小于等于12
	
	for (__int16 i = 0; i < len; i++)
	{
		CString StrChar = str.Mid(2 * i,2);			//取出其中的两个字符
		sscanf(StrChar,"%x",&intdata[i]);			//转换为16进制数
		databuff[i] = (unsigned char)intdata[i];
	}
}
void CCF_TEST_Dlg::OnCom() 
{
	// TODO: Add your control notification handler code here
	VARIANT variant_inp;
    COleSafeArray safearray_inp;
    LONG len,k;
    CString strtemp;
  

//	PIDINFO pIdInfo;
len = m_COMM.GetCommEvent();
	if(m_COMM.GetCommEvent()==2)							//事件值为2表示接收缓冲区内有字符
    {														//以下你可以根据自己的通信协议加入处理代码
        variant_inp=m_COMM.GetInput();						//读缓冲区
        safearray_inp=variant_inp;							//VARIANT型变量转换为ColeSafeArray型变量
		len=safearray_inp.GetOneDimSize();					//得到有效数据长度
        
		for(k=0;k<len;k++,RXDATALEN++)
		{	
            safearray_inp.GetElement(&k,rxdata+RXDATALEN);	//转换为BYTE型数组
        }

		switch(CommandCode)									//指令数据处理
		{
		case 0xE0:	// 电机停止转动
			if((RXDATALEN >= 7)&&
			   (rxdata[0]=='S')&&(rxdata[1]=='T')&&
			   (rxdata[2]=='A')&&(rxdata[3]=='T')&&
			   (rxdata[4]=='E')&&(rxdata[5]==':'))
			{
				RXDATALEN =0;
				CommandCode = 0xff;
				if(rxdata[6]=='Y')
				{
					m_Edit_State="电机停止转动";		//指令执行正确
				}
				else
					m_Edit_State="指令执行出错!";	//指令执行出错
			}
			else
				m_Edit_State="指令正在执行...";
				
			break;
		case 0xE1:	// 电机开始转动
			if((RXDATALEN >= 7)&&
				(rxdata[0]=='S')&&(rxdata[1]=='T')&&
				(rxdata[2]=='A')&&(rxdata[3]=='T')&&
				(rxdata[4]=='E')&&(rxdata[5]==':'))
			{
				RXDATALEN=0;
				CommandCode = 0xff;
				if(rxdata[6]=='Y')
				{
					m_Edit_State="硬盘开始转动。";	//指令执行正确
				}
				else
					m_Edit_State="指令执行出错";	//指令执行出错
			}
			else
				m_Edit_State="指令正在执行...";
			break;
		case 0x30:	//写扇区
			if((RXDATALEN >= 7)&&
				(rxdata[0]=='S')&&(rxdata[1]=='T')&&
				(rxdata[2]=='A')&&(rxdata[3]=='T')&&
				(rxdata[4]=='E')&&(rxdata[5]==':'))
			{
				RXDATALEN=0;
				CommandCode = 0xff;
				if(rxdata[6]=='Y')
				{
					m_Edit_State="写扇区指令执行正确。";	//指令执行正确
				}
				else
					m_Edit_State="写扇区指令执行出错";	//指令执行出错
			}
			else
				m_Edit_State="指令正在执行...";
			break;
			
		case 0x20:	//读扇区
			if((RXDATALEN == 6)&&
				(rxdata[0]=='S')&&(rxdata[1]=='T')&&
				(rxdata[2]=='A')&&(rxdata[3]=='T')&&
				(rxdata[4]=='E')&&(rxdata[5]==':'))
			{
				RXDATALEN=0;
				CommandCode = 0xff;
				if(rxdata[6]=='N')
					m_Edit_State="读扇区指令执行失败,请检查设备是否连接好!";	//指令执行出错
				else
					m_Edit_State="通讯出错请重新运行开发板程序!";	//通讯出错,请重新开始
			}
			else
				if(RXDATALEN >= (UINT)(SectorCount*512+7))
				{
					if(	(rxdata[SectorCount*512+0]=='S')&&
						(rxdata[SectorCount*512+1]=='T')&&
						(rxdata[SectorCount*512+2]=='A')&&
						(rxdata[SectorCount*512+3]=='T')&&
						(rxdata[SectorCount*512+4]=='E')&&
						(rxdata[SectorCount*512+5]==':'))
					{
						RXDATALEN=0;
						CommandCode = 0xff;
						if(rxdata[SectorCount*512+6]=='Y')
						{
							int i =	m_ComboRXData.GetCurSel();
							if(i==0)// 16进制显示
							{
								for(k=0;k<512;k++)
								{	BYTE bt;
									if((k%0x10)==0)
									{
										strtemp.Format("%08X:",k);		//将字符送入临时变量strtemp存放
										m_Show+=strtemp;				//加入接收编辑框对应字符串 
										
									}
									bt=*(char*)(rxdata+k);	
									strtemp.Format("%02X ",bt);			//将字符送入临时变量strtemp存放
									m_Show+=strtemp;					//加入接收编辑框对应字符串 
									
								}

							}
							else// ASCII显示
							{
								for(k=0;k<512;k++)
								{
									BYTE bt=*(char*)(rxdata+k);	
									strtemp.Format("%c",bt);			//将字符送入临时变量strtemp存放
									m_Show+=strtemp;					//加入接收编辑框对应字符串 
								}
							}
						//	IntToASCII
							strtemp.Format("%c%c",13,10);				//回车,换行
							m_Show+=strtemp;
							strtemp.Format("%c%c",13,10);				//回车,换行
							m_Show+=strtemp;
							m_Edit_State="读扇区指令正常完成。";		//指令执行正确
						}
					}
					else
						m_Edit_State="通讯出错请重新运行开发板程序!";	//通讯出错,请重新开始
				}
				else
					m_Edit_State="正在执行...";
			break;
			
		case 0xEC:	//获取设备识别信息
			if((RXDATALEN == 6)&&
				(rxdata[0]=='S')&&(rxdata[1]=='T')&&
				(rxdata[2]=='A')&&(rxdata[3]=='T')&&
				(rxdata[4]=='E')&&(rxdata[5]==':'))
			{
				
				if(rxdata[6]=='N')
					m_Edit_State="获取设备信息指令执行失败,请检查设备是否连接好!";	//指令执行出错
				else
					m_Edit_State="通讯出错请重新运行开发板程序!";	//通讯出错,请重新开始
			}

			if(	RXDATALEN >= 64+7)	//只接收设备型号(40字节)、序列号(20字节)、扇区总数(4字节)等信息
				if(	(rxdata[64]=='S')&&
					(rxdata[65]=='T')&&
					(rxdata[66]=='A')&&
					(rxdata[67]=='T')&&
					(rxdata[68]=='E')&&
					(rxdata[69]==':'))
				{
					RXDATALEN=0;
					CommandCode = 0xff;
					if(rxdata[70]=='Y')
					{
						for(k=0;k<20;k+=2)							//将数组转换为Cstring型变量
					    {	//注意设备型号为大端
							BYTE bt=*(char*)(rxdata+k+1);	
							strtemp.Format("%c",bt);				//将字符送入临时变量strtemp存放
							m_Model_Number+=strtemp;				//加入接收编辑框对应字符串 
							bt=*(char*)(rxdata+k);
							strtemp.Format("%c",bt);
							m_Model_Number+=strtemp;				//加入接收编辑框对应字符串
						}
						for(k=20;k<40;k+=2)							//将数组转换为Cstring型变量
						{	//注意设备型号为大端
							BYTE bt=*(char*)(rxdata+k+1);	
							strtemp.Format("%c",bt);				//将字符送入临时变量strtemp存放
							m_Model_Number2+=strtemp;				//加入接收编辑框对应字符串 
							bt=*(char*)(rxdata+k);
							strtemp.Format("%c",bt);
							m_Model_Number2+=strtemp;				//加入接收编辑框对应字符串
						}
						for(k=40;k<60;k+=2)							//将数组转换为Cstring型变量
						{	//注意设备序列号为大端
							BYTE bt=*(char*)(rxdata+k+1);	
							strtemp.Format("%c",bt);				//将字符送入临时变量strtemp存放
							m_Serial_Number+=strtemp;				//加入接收编辑框对应字符串 
							bt=*(char*)(rxdata+k);
							strtemp.Format("%c",bt);
							m_Serial_Number+=strtemp;				//加入接收编辑框对应字符串
						}
						
						TotlaSectors = rxdata[60]+
									   rxdata[61]*0x100+
									   rxdata[62]*0x10000+
									   rxdata[63]*0x1000000;
						m_TotalSector.Format("0x%X",TotlaSectors);

						m_Edit_State="获取设备信息指令完成。";	//指令执行正确
					}
					else
						m_Edit_State="获取设备信息指令执行失败,请检查设备是否连接好!";	//指令执行出错
				}
				else
					m_Edit_State="指令正在执行...";
			break;
		default:
			break;
		}

    }

//	int temp = sizeof(IDINFO);
//	memcpy((PIDINFO)&IdInfo, rxdata, sizeof(IDINFO));	//拷贝内存
    UpdateData(FALSE); //更新编辑框内容
}


void CCF_TEST_Dlg::OnSelchangeComport() 
{
	int i =	m_COMPort.GetCurSel();

	if(i==0)
	{
		if(m_COMM.GetPortOpen())
			m_COMM.SetPortOpen(FALSE);
		
		m_COMM.SetCommPort(1); //选择com1
		if( !m_COMM.GetPortOpen())
		{
			m_COMM.SetPortOpen(TRUE);//打开串口
			CString COMMAND;
			CommandCode = 0xEC;
			SectorCount = 1;
			COMMAND.Format("ZLG:%02X%08X%02X",CommandCode,NULL,SectorCount);//将字符送入临时变量strtemp存放
			m_COMM.SetOutput(COleVariant(COMMAND));			//发送数据
			m_Model_Number="";
			m_Model_Number2="";
			m_Serial_Number="";
		}
		else
			AfxMessageBox("cannot open serial port");
	}
	if(i==1)
	{
		if(m_COMM.GetPortOpen())
			m_COMM.SetPortOpen(FALSE);
		
		m_COMM.SetCommPort(2); //选择com1
		if( !m_COMM.GetPortOpen())
		{
			m_COMM.SetPortOpen(TRUE);//打开串口
			CString COMMAND;
			CommandCode = 0xEC;
			SectorCount = 1;
			COMMAND.Format("ZLG:%02X%08X%02X",CommandCode,NULL,SectorCount);//将字符送入临时变量strtemp存放
			m_COMM.SetOutput(COleVariant(COMMAND));			//发送数据
			m_Model_Number="";
			m_Model_Number2="";
			m_Serial_Number="";
		}
		else
			AfxMessageBox("cannot open serial port");
	}
	
}


void CCF_TEST_Dlg::OnSelchangeByteType() 
{
	// TODO: Add your control notification handler code here

}





















































































































































⌨️ 快捷键说明

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