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

📄 cf_test_dlg.cpp

📁 SmartARM2200开发平台光盘资料中的所有的源码和测试程序以及应用程序
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	{
		if(Sector<TotlaSectors)
		{
			//=============== 发送命令 ===============
			BYTE sendbuff[16] = {'Z','L','G',':',
								'3','0',
								0x30+(UCHAR)(Sector>>28),0x30+(UCHAR)(Sector>>24),0x30+(UCHAR)(Sector>>20),0x30+(UCHAR)(Sector>>16),0x30+(UCHAR)(Sector>>12),0x30+(UCHAR)(Sector>>8),0x30+(UCHAR)(Sector>>4),0x30+(UCHAR)Sector,
								'0','1'};
			int ret = Comm.SendData(sendbuff, NULL, 16, 500, 1, 0, FALSE);  //发送数据
			if (ret != 0)
			{	MessageBox("与LPC2200 连接失败,请检查硬件!");
				m_Edit_State = "与LPC2200 通信失败!";
				UpdateData(FALSE);
				return;
			}

			//	m_Send.
			int len=m_Send.GetLength();
			int i;

			CString COMMAND="";
			CString strtemp;
			if(len<512)
			{
				len = 512-len;
				COMMAND=m_Send;
				for(i=0;len>i;i++)
				{	
					strtemp.Format("%C",0x20);//填充数0x00
					COMMAND += strtemp;
					//m_COMM.SetOutput(COleVariant(strtemp));
				}
			}
			
			for(i=0;32>i;i++)
			{	UINT k;
				strtemp=COMMAND.Mid(0x10*i,0x10);
				for(k=0;k<0x1fffff;k++);
				int ret = Comm.SendData((UCHAR *)(LPCTSTR)strtemp, NULL, 16, 500, 1, 0, FALSE);  //发送数据
				if (ret != 0)
				{	MessageBox("与LPC2200 连接失败,请检查硬件!");
					m_Edit_State = "与LPC2200 通信失败!";
					UpdateData(FALSE);
					return;
				}
			}

			// 读回状态
			BYTE rxdata[7] ;
			ret = Comm.ReadBlock(rxdata, 7, 500);					   //读出数据
			if (ret != 0)
			{	MessageBox("与LPC2200 连接失败,请检查硬件!");
				m_Edit_State = "与LPC2200 通信失败!";
				UpdateData(FALSE);
				return;
			}
			
			if( (rxdata[0]=='S')&&(rxdata[1]=='T')&&
				(rxdata[2]=='A')&&(rxdata[3]=='T')&&
				(rxdata[4]=='E')&&(rxdata[5]==':'))
			{
				if(rxdata[6]=='Y')
				{
					m_Edit_State="写扇区指令执行正确。";	//指令执行正确
				}
				else
					m_Edit_State="写扇区指令执行出错";	//指令执行出错
			}
			else
				m_Edit_State="接收状态无效";	//指令执行出错
			UpdateData(FALSE);
		}
		else
			AfxMessageBox("需要操作的扇区号,超出寻址范围!");
	}
}


void CCF_TEST_Dlg::OnIDEstrat() //硬盘开始转动
{
	//=============== 发送命令 ===============
	BYTE sendbuff[16] = {'Z','L','G',':',
							'E','1',
						'0','0','0','0','0','0','0','0',
						'0','1'};
	int ret = Comm.SendData(sendbuff, NULL, 16, 500, 1, 0, FALSE);  //发送数据
	if (ret != 0)
	{	MessageBox("与LPC2200 连接失败,请检查硬件!");
		m_Edit_State = "与LPC2200 通信失败!";
		UpdateData(FALSE);
		return;
	}

	m_Edit_State = "等待硬盘电机起动!";
	UpdateData(FALSE);
	// 读回状态
	BYTE rxdata[7] ;
	ret = Comm.ReadBlock(rxdata, 7, 100000);					   //读出数据
	if (ret != 0)
	{	MessageBox("与LPC2200 连接失败,请检查硬件!");
		m_Edit_State = "与LPC2200 通信失败!";
		UpdateData(FALSE);
		return;
	}
			
	if(	(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="接收状态无效";	//指令执行出错
	UpdateData(FALSE);

}


void CCF_TEST_Dlg::OnIdestop() //硬盘停止转动
{
	//=============== 发送命令 ===============
	BYTE sendbuff[16] = {'Z','L','G',':',
							'E','0',
						'0','0','0','0','0','0','0','0',
						'0','1'};
	int ret = Comm.SendData(sendbuff, NULL, 16, 500, 1, 0, FALSE);  //发送数据
	if (ret != 0)
	{	MessageBox("与LPC2200 连接失败,请检查硬件!");
		m_Edit_State = "与LPC2200 通信失败!";
		UpdateData(FALSE);
		return;
	}

	// 读回状态
	BYTE rxdata[7] ;
	ret = Comm.ReadBlock(rxdata, 7, 500);					   //读出数据
	if (ret != 0)
	{	MessageBox("与LPC2200 连接失败,请检查硬件!");
		m_Edit_State = "与LPC2200 通信失败!";
		UpdateData(FALSE);
		return;
	}
			
	if(	(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="接收状态无效";	//指令执行出错
	UpdateData(FALSE);
}

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];
	}
}

//********************************************************************************************
// 选择串口,初始化串口获取CF卡信息
//********************************************************************************************
void CCF_TEST_Dlg::OnSelchangeComport() 
{
    CString strtemp;

	m_Model_Number="";
	m_Model_Number2="";
	m_Serial_Number="";
	TotlaSectors = 0;

	int i =	m_COMPort.GetCurSel();
	Comm.ClosePort();
	BOOL bret = Comm.SetCommPort(i+1);							//设置串口号
	if (bret == FALSE)
	{	MessageBox("打开串口失败!");
		return;
	}

	bret = Comm.SetCommBaud(19200);					     //设置波特率		
	if (bret == FALSE)
	{	MessageBox("设置波特率失败!");
		return;
	}

	int ret = Comm.OpenPort();									  //打开串口
	if (bret == 0)
	{	MessageBox("打开串口失败!");
		return;
	}
//=============== 发送命令 ===============
	BYTE sendbuff[16] = {'Z','L','G',':',
						'E','C',
						'0','0','0','0','0','0','0','0',
						'0','0'};
	ret = Comm.SendData(sendbuff, NULL, 16, 500, 1, 0, FALSE);  //发送数据
	if (ret != 0)
	{
		MessageBox("与LPC2200 连接失败,请检查硬件!");
		m_Edit_State = "与LPC2200 通信失败!";
		UpdateData(FALSE);
		return;
	}

// 读回数据
	BYTE rxdata[100] ;
	ret = Comm.ReadBlock(rxdata, 71, 500);					   //读出数据
	if (ret != 0)
	{
		MessageBox("与LPC2200 连接失败,请检查硬件连接、串口号、波特率!");
		m_Edit_State = "与LPC2200 通信失败!";
		UpdateData(FALSE);
		return;
	}


	if( (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="通讯出错请重新运行开发板程序!";	//通讯出错,请重新开始
	}

		//只接收设备型号(40字节)、序列号(20字节)、扇区总数(4字节)等信息
	if(	(rxdata[64]=='S')&&	(rxdata[65]=='T')&&
		(rxdata[66]=='A')&&	(rxdata[67]=='T')&&
		(rxdata[68]=='E')&&	(rxdata[69]==':'))
	{
		if(rxdata[70]=='Y')
		{	
			for( int k=0;k<20;k+=2)							//将数组转换为Cstring型变量
		    {	//注意设备型号为大端
				strtemp.Format("%c",rxdata[k+1]);				//将字符送入临时变量strtemp存放
				m_Model_Number+=strtemp;				//加入接收编辑框对应字符串 
				strtemp.Format("%c",rxdata[k]);
				m_Model_Number+=strtemp;				//加入接收编辑框对应字符串
			}
			for(k=20;k<40;k+=2)							//将数组转换为Cstring型变量
			{	//注意设备型号为大端
				strtemp.Format("%c",rxdata[k+1]);				//将字符送入临时变量strtemp存放
				m_Model_Number2+=strtemp;				//加入接收编辑框对应字符串 
				strtemp.Format("%c",rxdata[k]);
				m_Model_Number2+=strtemp;				//加入接收编辑框对应字符串
			}
			for(k=40;k<60;k+=2)							//将数组转换为Cstring型变量
			{	//注意设备序列号为大端
				strtemp.Format("%c",rxdata[k+1]);				//将字符送入临时变量strtemp存放
				m_Serial_Number+=strtemp;				//加入接收编辑框对应字符串 
				strtemp.Format("%c",rxdata[k]);
				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="指令正在执行...";

	UpdateData(FALSE);
}


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

}





















































































































































⌨️ 快捷键说明

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