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

📄 commtestdlg.cpp

📁 PC端
💻 CPP
📖 第 1 页 / 共 3 页
字号:
                         NULL, OPEN_ALWAYS, 0, NULL);
	if (hFile != INVALID_HANDLE_VALUE)
	{
		CFile myFile((int)hFile);
		myFile.Seek(0,CFile::begin);

		FileBank = 0;
		for(mFLength=0;mFLength<2048;mFLength++)
		{
			vHexModefy(FileBank);
			myFile.Write(hexTxbuff, 268);  
			FileBank +=0x0080;
		}
	}
	CloseHandle(hFile);

	mFLength = m_Pathname.GetLength();
	mFLength -= 6;
	
	if(m_Pathname.Find("00",mFLength) != -1)
	{
		FileTxtRplace = m_Pathname.Replace("00.HEX", ".H00");
		ASSERT(FileTxtRplace == 1);
	}
	if(m_Pathname.Find("01",mFLength) != -1)
	{
		FileTxtRplace = m_Pathname.Replace("01.HEX", ".H01");
		ASSERT(FileTxtRplace == 1);
	}
	if(m_Pathname.Find("02",mFLength) != -1)
	{
		FileTxtRplace = m_Pathname.Replace("02.HEX", ".H02");
		ASSERT(FileTxtRplace == 1);
	}
	if(m_Pathname.Find("03",mFLength) != -1)
	{
		FileTxtRplace = m_Pathname.Replace("03.HEX", ".H03");
		ASSERT(FileTxtRplace == 1);
	}
}

void CCommtestDlg::OnFileChange(CString mStr) 
{
	unsigned char FileTxtRplace;
	
	FileTxtRplace = m_Pathname.Replace("H00", mStr);
	if(FileTxtRplace == 0)
	{
		FileTxtRplace = m_Pathname.Replace("H01", mStr);
		if(FileTxtRplace == 0)
		{
			FileTxtRplace = m_Pathname.Replace("H02", mStr);
			if(FileTxtRplace == 0)
			{
				FileTxtRplace = m_Pathname.Replace("H03", mStr);
				if(FileTxtRplace == 0)
				{
					ASSERT(FileTxtRplace == 1);
				}
			}
		}
	}
}

void CCommtestDlg::vDataDownLoad(unsigned short int SectorOffset)
{
	//数据包格式: :ll kk aaaa tt [dd...] cc
	//:     包头
	//ll    数据长度
	//kk    程序分区数
	//aaaa  扇区地址
	//dd... 数据域
	//cc    和校验 cc = 0x01H + NOT(ll + kk + aa +aa +tt + dd...)
	unsigned char Txchar;
	unsigned short int num;
	
	memset(hexTxbuff, 0, sizeof(hexTxbuff));  //发送缓冲区清0

	CheckSum = 0;
	Txbuffptr = hexTxbuff;
	Binptr = &Filesbuf[SectorOffset];
	
	*Txbuffptr++ = ':';  //包头
	Txchar = (unsigned)(m_DataLong%256);  //数据长度
	CheckSum += Txchar;
	BinToChar(Txchar,&Txbuffptr);
		
	Txchar = (unsigned)(SectorOffset/256);  //扇区地址
	CheckSum += Txchar;
	BinToChar(Txchar,&Txbuffptr);
	Txchar = (unsigned)(SectorOffset%256);  //扇区地址
	CheckSum += Txchar;
	BinToChar(Txchar,&Txbuffptr);
	*Txbuffptr++ = '0';  //数据类型
	*Txbuffptr++ = '0';  
	CheckSum += 0x00;

	for(num=0;num<m_Sector;num++)
	{
		Txchar = *Binptr++;
		CheckSum += Txchar;
		BinToChar(Txchar,&Txbuffptr);
	}
	
	CheckSum = ~CheckSum;
	CheckSum +=1;
	Txchar = (unsigned char)CheckSum;  //和校验
	BinToChar(Txchar,&Txbuffptr);
	
	*Txbuffptr++ = 0x00;  
	Txbuffptr = hexTxbuff;
	m_Ports.WriteToPort(Txbuffptr);
}

void CCommtestDlg::vHexModefy(unsigned short int SectorOffset)
{
	//数据包格式: :ll kk aaaa tt [dd...] cc
	//:     包头
	//ll    数据长度
	//kk    程序分区数
	//aaaa  扇区地址
	//dd... 数据域
	//cc    和校验 cc = 0x01H + NOT(ll + kk + aa +aa +tt + dd...)
	unsigned char Txchar;
	unsigned short int num;
	
	memset(hexTxbuff, 0, sizeof(hexTxbuff));  //发送缓冲区清0

	CheckSum = 0;
	Txbuffptr = hexTxbuff;
	Binptr = &Filesbuf[SectorOffset];
	
	*Txbuffptr++ = ':';  //包头
	*Txbuffptr++ = '8';  //数据长度
	*Txbuffptr++ = '0';  
	CheckSum += 0x80;
	
	Txchar = (unsigned)(SectorOffset/256);  //扇区地址
	CheckSum += Txchar;
	BinToChar(Txchar,&Txbuffptr);
	Txchar = (unsigned)(SectorOffset%256);  //扇区地址
	CheckSum += Txchar;
	BinToChar(Txchar,&Txbuffptr);
	*Txbuffptr++ = '0';  //数据类型
	*Txbuffptr++ = '0';  
	CheckSum += 0x00;

	for(num=0;num<128;num++)
	{
		Txchar = *Binptr++;
		CheckSum += Txchar;
		BinToChar(Txchar,&Txbuffptr);
	}
	
	CheckSum = ~CheckSum;
	CheckSum +=1;
	Txchar = (unsigned char)CheckSum;  //和校验
	BinToChar(Txchar,&Txbuffptr);
	*Txbuffptr++ = 0x0D;  //结束标志
	*Txbuffptr++ = 0x0A;  
}

void CCommtestDlg::vCOmSend(unsigned char m_ComLength, unsigned char m_ComType, unsigned short int m_AdderData)
{
	//数据包格式: :ll kk aaaa tt [dd...] cc
	//:     包头
	//ll    数据长度
	//kk    程序分区数
	//aaaa  扇区地址
	//dd... 数据域
	//cc    和校验 cc = 0x01H + NOT(ll + kk + aa +aa +tt + dd...)
	unsigned char Txchar;
			
	memset(hexTxbuff, 0, sizeof(hexTxbuff));  //发送缓冲区清0

	CheckSum = 0;
	Txbuffptr = hexTxbuff;
	
	*Txbuffptr++ = ':';         //包头
	
	Txchar = m_ComLength;      //数据长度
	CheckSum += Txchar;
	BinToChar(Txchar,&Txbuffptr);
	
	Txchar = 0x00;              //地址
	CheckSum += Txchar;
	BinToChar(Txchar,&Txbuffptr);
	Txchar = 0x00;  
	CheckSum += Txchar;
	BinToChar(Txchar,&Txbuffptr);

	Txchar = m_ComType;          //数据类型
	CheckSum += Txchar;
	BinToChar(Txchar,&Txbuffptr);
	
	if(m_ComLength !=0)
	{
		Txchar  = (unsigned)(m_AdderData/256);	
		CheckSum += Txchar;
		BinToChar(Txchar,&Txbuffptr);
		Txchar  = (unsigned)(m_AdderData%256);	
		CheckSum += Txchar;
		BinToChar(Txchar,&Txbuffptr);
	}

	CheckSum = ~CheckSum;
	CheckSum +=1;
	Txchar = (unsigned char)CheckSum;  //和校验
	BinToChar(Txchar,&Txbuffptr);
	
	Txbuffptr = hexTxbuff;
	m_Ports.WriteToPort(Txbuffptr);
}

void CCommtestDlg::BinToChar(unsigned char BinChar, char ** TxDataPtr)
{
	//转换后的HEX代码直接存储在全局变量数组中
	unsigned char byte,byte_tmp;
    
	byte_tmp = byte = (unsigned)BinChar;
	byte >>= 4;
	
	if(0<= byte && byte <=9)
	{
		byte += '0';
		*(*TxDataPtr)++ = byte;
	}
	else
	{
		byte += 'A' - 10;
		*(*TxDataPtr)++ = byte;
	}
	byte = byte_tmp;
	byte &= 0x0F;
	if(0<= byte && byte <=9)
	{
		byte += '0';
		*(*TxDataPtr)++ = byte;
	}
	else
	{
		byte += 'A' - 10;
		*(*TxDataPtr)++ = byte;
	}
}

unsigned char CCommtestDlg::toint(unsigned char hex_data)
{
	unsigned char vhex;
	switch(hex_data)
	{
		case '0' : vhex = 0; break;
		case '1' : vhex = 1; break;
		case '2' : vhex = 2; break;
		case '3' : vhex = 3; break;
		case '4' : vhex = 4; break;
		case '5' : vhex = 5; break;
		case '6' : vhex = 6; break;
		case '7' : vhex = 7; break;
		case '8' : vhex = 8; break;
		case '9' : vhex = 9; break;
		case 'A' : vhex = 10; break;
		case 'B' : vhex = 11; break;
		case 'C' : vhex = 12; break;
		case 'D' : vhex = 13; break;
		case 'E' : vhex = 14; break;
		case 'F' : vhex = 15; break;
		default: break;
	}
	return vhex;
}

void CCommtestDlg::vWriteBuff(unsigned char * buf,unsigned char * hbuff, unsigned short int set,unsigned short int leng)
{
	unsigned short int i;
	unsigned char * k;
	k = buf;
	k += set;
	for(i=0;i<leng;i++)
	{
		*(k++) = hbuff[i];
	}
}

void PASCAL TimerProc(UINT wTimerID, UINT msg,DWORD dwUser,DWORD dwl,DWORD dw2)
{
	CString str;
	static int counter(0);
	static int NumC(0);
	static unsigned short int PerNum;
	static float PerN(0);
	CCommtestDlg * pDlg = (CCommtestDlg * )dwUser; 
	NumC++;
	PerN += 256.0;
	if(NumC==2)
	{
		NumC = 0;
		PerNum = (unsigned short int)(PerN/65536.0+0.5);
		counter = (pDlg->m_prog).GetPos();
		str.Format("%3d%c", counter,'%');
		if(pDlg->GetDlgItem(IDC_STATIC_SHOW)->GetSafeHwnd())
			pDlg->GetDlgItem(IDC_STATIC_SHOW)->SetWindowText(str);
		(pDlg->m_prog).SetPos(PerNum);
		(pDlg->m_prog).StepIt();
		if(PerNum==100)
		{
			PerNum = 0;
			PerN = 0;
		}
		//pDlg->UpdateWindow();
	}
}

LONG CCommtestDlg::OnCTSDetected(WPARAM, LPARAM port)
{
	if(port <= 0 || port > 4)
		return -1;
	return 0;
}

void CCommtestDlg::OnSeriaPortSet() 
{
	CConfigDlg* dlg = new CConfigDlg(this, m_Ports.GetDCB());
	dlg->m_strSendBuffer.Format("%d", m_Ports.GetWriteBufferSize());
	
	DWORD dwCommEvents = m_Ports.GetCommEvents();
	
	dlg->m_CommBreakDetected = (dwCommEvents & EV_BREAK) > 0 ? TRUE : FALSE;
	dlg->m_CommCTSDetected   = (dwCommEvents & EV_CTS) > 0 ? TRUE : FALSE;
	dlg->m_CommDSRDetected   = (dwCommEvents & EV_DSR) > 0 ? TRUE : FALSE;
	dlg->m_CommERRDetected   = (dwCommEvents & EV_ERR) > 0 ? TRUE : FALSE;
	dlg->m_CommRingDetected  = (dwCommEvents & EV_RING) > 0 ? TRUE : FALSE;
	dlg->m_CommRLSDDetected  = (dwCommEvents & EV_RLSD) > 0 ? TRUE : FALSE;
	dlg->m_CommRxchar        = (dwCommEvents & EV_RXCHAR) > 0 ? TRUE : FALSE;
	dlg->m_CommRxcharFlag    = (dwCommEvents & EV_RXFLAG) > 0 ? TRUE : FALSE;
	dlg->m_CommTXEmpty       = (dwCommEvents & EV_TXEMPTY) > 0 ? TRUE : FALSE;

	if (dlg->DoModal() == IDOK)
	{
		DWORD dwCommEvents = 0;
		if (dlg->m_CommBreakDetected)
			dwCommEvents |= EV_BREAK;
		if (dlg->m_CommCTSDetected)
			dwCommEvents |= EV_CTS;
		if (dlg->m_CommDSRDetected)
			dwCommEvents |= EV_DSR;
		if (dlg->m_CommERRDetected)
			dwCommEvents |= EV_ERR;
		if (dlg->m_CommRingDetected)
			dwCommEvents |= EV_RING;
		if (dlg->m_CommRLSDDetected)
			dwCommEvents |= EV_RLSD;
		if (dlg->m_CommRxchar)
			dwCommEvents |= EV_RXCHAR;
		if (dlg->m_CommRxcharFlag)
			dwCommEvents |= EV_RXFLAG;
		if (dlg->m_CommTXEmpty)
			dwCommEvents |= EV_TXEMPTY;

		m_Ports.InitPort(this, 
			atoi(dlg->m_strComBank),
			atoi(dlg->m_strBaudRate),
			dlg->m_strParity[0],
			atoi(dlg->m_strDataBits),
			atoi(dlg->m_strStopBits),
			dwCommEvents,
			atoi(dlg->m_strSendBuffer));

		m_Ports.StartMonitoring();
	}
	delete dlg;
}

void CCommtestDlg::OnVerify() 
{
	char * SectorID = ":0000001CE4";   //扇区设置命令
	static char szFilter[] = "Files (*.H00)|*.H00|Files (*.BIN)|*.BIN";

	if((m_Pathname.IsEmpty()) != 0)
	{
		CFileDialog MyFileDlg(TRUE,NULL,"*.H00",OFN_HIDEREADONLY,szFilter,NULL);
		MyFileDlg.DoModal();
		m_Pathname = MyFileDlg.GetPathName( );
		m_prog.SetStep(m_setStep);   //设置进度条步长
		m_prog.SetPos(0);            //设置进度条当前位置
	}
	m_ProcessType = 0x00;           //比较处理
	m_Ports.WriteToPort(SectorID);  //扇区设置命令
}

⌨️ 快捷键说明

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