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

📄 usbispdlg.cpp

📁 一个很好的基于USB开发的VC++资料.一个很好的基于USB开发的VC++资料
💻 CPP
📖 第 1 页 / 共 3 页
字号:

	for(i=0;i<8;i++)
	{
		if(((CButton *)GetDlgItem(IDC_CHECK1+i))->GetCheck())
		{
			switch(i)
			{
			case 0: ProcParam.bSignRead=TRUE; break;
			case 1: ProcParam.bErasure=TRUE; break;
			case 2: ProcParam.bCheckEmp=TRUE; break;
			case 3: ProcParam.bWFlash=TRUE; break;
			case 4: ProcParam.bWEEPROM=TRUE; break;
			case 5: ProcParam.bCheckFlash=TRUE; break;
			case 6: ProcParam.bCheckEEPROM=TRUE; break;
			case 7: ProcParam.bWriteLock=TRUE; break;
			}
		}
		else
		{
			switch(i)
			{
			case 0: ProcParam.bSignRead=FALSE; break;
			case 1: ProcParam.bErasure=FALSE; break;
			case 2: ProcParam.bCheckEmp=FALSE; break;
			case 3: ProcParam.bWFlash=FALSE; break;
			case 4: ProcParam.bWEEPROM=FALSE; break;
			case 5: ProcParam.bCheckFlash=FALSE; break;
			case 6: ProcParam.bCheckEEPROM=FALSE; break;
			case 7: ProcParam.bWriteLock=FALSE; break;
			}
		}
	}

}

void CUSBISPDlg::OnBtnSignRead() 
{
	// TODO: Add your control notification handler code here
	unsigned char ChipSign[3];
	if(!m_Isp.chipInit())
	{
		ShowMsg("下载器初始化出错!");
		return;
	}
	
	if(!m_Isp.chipEntryProgram())
	{
		ShowMsg("下载器初始化出错!");
		return;
	}

	if(!m_Isp.chipSignature(ChipSign))
	{
		ShowMsg("没检到器件!");
		return;	
	}

	m_Isp.chipProcOver();
	CString a;
	a.Format("器件特征字:%2.2X %2.2X %2.2X",ChipSign[0],ChipSign[1],ChipSign[2]);
	ShowMsg(a);
}

void CUSBISPDlg::OnBtnReadFlash() 
{
	// TODO: Add your control notification handler code here
	unsigned char ChipSign[3];
	if(!m_Isp.chipInit())
	{
		ShowMsg("下载器初始化出错!");
		return;
	}
	
	if(!m_Isp.chipEntryProgram())
	{
		ShowMsg("下载器初始化出错!");
		return;
	}

	if(!m_Isp.chipSignature(ChipSign))
	{
		ShowMsg("没检到器件!");
		return;	
	}

    //读块 flashoreeprom=0 flash, flashoreeprom=1 eeprom
	if(!m_Isp.chipPageRead(0,m_pReadBuf,m_ChipType.RomSize))
	{
		ShowMsg("读器件错误.");
		return;		
	}

	m_Isp.chipProcOver();
	CString a;
	a.Format("读器件完成.");
	ShowMsg(a);	
}

void CUSBISPDlg::OnBtnWriteFlash() 
{
	// TODO: Add your control notification handler code here
	//unsigned char m_ISPSEC;
	//unsigned char m_ISPFAL;
	if(!m_Isp.chipInit())
	{
		ShowMsg("下载器初始化出错!");
		m_ISPFAL+=1;
		return;
	}
	
	if(!m_Isp.chipEntryProgram())
	{
		ShowMsg("下载器初始化出错!");
		m_ISPFAL+=1;
		return;
	}

	if(!m_Isp.chipErasure())
	{
		ShowMsg("芯片擦除失败!");
		m_ISPFAL+=1;
		return;		
	}

    //读块 flashoreeprom=0 flash, flashoreeprom=1 eeprom
	if(!m_Isp.chipPageWrite(0,m_pWriteBuf,m_ChipType.page_size,m_nLength))
	{
		ShowMsg("写器件错误.");
		m_ISPFAL+=1;
		return;		
	}

	m_Isp.chipProcOver();
	CString a;
	a.Format("写器件完成.");
	m_ISPSEC+=1;
	ShowMsg(a);	
	a.Format("成功下载%d次,失败%d次",m_ISPSEC,m_ISPFAL);
	SetDlgItemText(IDC_EDIT2,a);
}

void CUSBISPDlg::OnSelchangeTab(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// TODO: Add your control notification handler code here
	//0,"编程设定"   1,"FLASH读缓冲"   2,"FLASH写缓冲"   3,"EEPROM读缓冲"
	//4,"EEPROM写缓冲"  5,"芯片编辑"

	int nTab=((CTabCtrl *)GetDlgItem(IDC_TAB))->GetCurSel();
	
	if(nTab==0)
	{
		GetDlgItem(IDC_BTN_LF_READ)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_BTN_LF_WRITE)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_BTN_LF_EXIT)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_TREE1)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_EDIT1)->ShowWindow(SW_SHOW);
		GetDlgItem(IDC_MSFLEXGRID1)->ShowWindow(SW_HIDE);		
	}
	if(nTab==1)
	{
		GetDlgItem(IDC_BTN_LF_READ)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_BTN_LF_WRITE)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_BTN_LF_EXIT)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_TREE1)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_EDIT1)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_MSFLEXGRID1)->ShowWindow(SW_SHOW);
		ReadBufDisp();
	}
	if(nTab==2)
	{
		GetDlgItem(IDC_BTN_LF_READ)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_BTN_LF_WRITE)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_BTN_LF_EXIT)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_TREE1)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_EDIT1)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_MSFLEXGRID1)->ShowWindow(SW_SHOW);		
		WriteBufDisp();
	}
	if(nTab==3)
	{
		GetDlgItem(IDC_BTN_LF_READ)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_BTN_LF_WRITE)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_BTN_LF_EXIT)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_TREE1)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_EDIT1)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_MSFLEXGRID1)->ShowWindow(SW_SHOW);
		ReadBufDisp(1);
	}
	if(nTab==4)
	{
		GetDlgItem(IDC_BTN_LF_READ)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_BTN_LF_WRITE)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_BTN_LF_EXIT)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_TREE1)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_EDIT1)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_MSFLEXGRID1)->ShowWindow(SW_SHOW);		
		WriteBufDisp(1);
	}
	*pResult = 0;
}

//显示缓冲内容 1->EEPROM 0->Flash
void CUSBISPDlg::ReadBufDisp(unsigned char FORE)
{
	char nCharEach=16; //每行个数
	char nCols=nCharEach+2; //列数
	int nRows=0;
	
	if(FORE==0) nRows=m_ChipType.RomSize/nCharEach+2; //行数
	else if(FORE==1) nRows=m_ChipType.eepromSize/nCharEach+2; //行数

	m_DataList.SetScrollBars(3);
	m_DataList.SetCols(nCols);
	m_DataList.SetRows(nRows);

	for(int i=0;i<m_DataList.GetCols();i++) m_DataList.SetColWidth(i,270); //设置数据区列宽
	m_DataList.SetColWidth(0,700); //设置第一列宽
	m_DataList.SetColWidth(m_DataList.GetCols()-1,900);
	m_DataList.SetTextMatrix(0,m_DataList.GetCols()-1,"ASCII");
	m_DataList.SetColAlignment(m_DataList.GetCols()-1,3);

	CString a,b;
	for(i=1;i<m_DataList.GetCols()-1;i++) //设置列属性
	{
		a.Format("%2.2X",i-1);
		m_DataList.SetTextMatrix(0,i,a);
	}
	for(i=1;i<m_DataList.GetRows();i++) //设置行属性
	{
		a.Format("%6.6X",(i-1)*nCharEach);
		m_DataList.SetTextMatrix(i,0,a);
	}

	//为数据填写数据
	for(i=0;i<=(FORE==0?m_ChipType.RomSize:m_ChipType.eepromSize);i++)
	{
		if(FORE==0) a.Format("%2.2X",m_pReadBuf[i]);
		else if(FORE==1) a.Format("%2.2X",m_pEReadBuf[i]);
		
		m_DataList.SetTextMatrix(i/nCharEach+1,i%nCharEach+1,a);
		if(i%nCharEach==0)
		{
			m_DataList.SetTextMatrix(i/nCharEach,m_DataList.GetCols()-1,b);
			b="";
		}
		else
		{
			if(FORE==0) 
			{
				if(m_pReadBuf[i-1]>128) a.Format(".");
				else a.Format("%c",m_pReadBuf[i]);
				b+=a;	
			}
			else if(FORE==1) 
			{
				if(m_pEReadBuf[i-1]>128) a.Format(".");
				else a.Format("%c",m_pEReadBuf[i]);
				b+=a;			
			}
		}
	}
	m_DataList.SetTextMatrix(i/nCharEach,m_DataList.GetCols()-1,b);
}

//显示缓冲内容 1->EEPROM 0->Flash
void CUSBISPDlg::WriteBufDisp(unsigned char FORE)
{
	char nCharEach=16; //每行个数
	char nCols=nCharEach+2; //列数
	int nRows=0;
	
	if(FORE==0) nRows=m_ChipType.RomSize/nCharEach+2; //行数
	else if(FORE==1) nRows=m_ChipType.eepromSize/nCharEach+2; //行数

	m_DataList.SetScrollBars(3);
	m_DataList.SetCols(nCols);
	m_DataList.SetRows(nRows);

	for(int i=0;i<m_DataList.GetCols();i++) m_DataList.SetColWidth(i,270); //设置数据区列宽
	m_DataList.SetColWidth(0,700); //设置第一列宽
	m_DataList.SetColWidth(m_DataList.GetCols()-1,900);
	m_DataList.SetTextMatrix(0,m_DataList.GetCols()-1,"ASCII");
	m_DataList.SetColAlignment(m_DataList.GetCols()-1,3);

	CString a,b;
	for(i=1;i<m_DataList.GetCols()-1;i++) //设置列属性
	{
		a.Format("%2.2X",i-1);
		m_DataList.SetTextMatrix(0,i,a);
	}
	for(i=1;i<m_DataList.GetRows();i++) //设置行属性
	{
		a.Format("%6.6X",(i-1)*nCharEach);
		m_DataList.SetTextMatrix(i,0,a);
	}

	//为数据填写数据
	for(i=0;i<=(FORE==0?m_ChipType.RomSize:m_ChipType.eepromSize);i++)
	{
		if(FORE==0) a.Format("%2.2X",m_pWriteBuf[i]);
		else if(FORE==1) a.Format("%2.2X",m_pEWriteBuf[i]);

		m_DataList.SetTextMatrix(i/nCharEach+1,i%nCharEach+1,a);
		if(i%16==0 && i!=0)
		{
			m_DataList.SetTextMatrix(i/nCharEach,m_DataList.GetCols()-1,b);
			b="";
		}
		else
		{
			if(FORE==0) 
			{
				if(m_pWriteBuf[i-1]>128) a.Format(".");
				else a.Format("%c",m_pWriteBuf[i]);
				b+=a;
			}
			else
			{
				if(m_pEWriteBuf[i-1]>128) a.Format(".");
				else a.Format("%c",m_pEWriteBuf[i]);
				b+=a;			
			}
		}
	}
	m_DataList.SetTextMatrix(i/nCharEach,m_DataList.GetCols()-1,b);
}

void CUSBISPDlg::OnBtnFfileOpen() 
{
	// TODO: Add your control notification handler code here
	static CFileDialog m_FileDlg(TRUE,"bin",NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,"Intel Hex文件(*.hex)|*.hex|二进制文件(*.bin)|*.bin|");
	if(m_FileDlg.DoModal()==IDOK)
	{
		m_strOpenFile=m_FileDlg.GetFileName();
		m_strOpenFileExt=m_FileDlg.GetFileExt();
		m_strFilePath=m_FileDlg.GetPathName();
		m_strOpenFileExt.MakeUpper();
		m_strEditFileName=m_strFilePath;

		szLastFile=m_strFilePath;
		char tch[255];
		for(char i=0;i<szLastFile.GetLength();i++)
		{
			tch[i]=szLastFile.GetAt(i);
		}
		tch[i]='\0';
		m_ado.OpenTable("sys");
		m_ado.PutFilds("LastFile",tch);
		m_ado.Update();
		m_ado.CloseTable("sys");		
		OpenHexFile();
		SetDlgItemText(IDC_STATIC_FILE,szLastFile);
	}	
}

int CUSBISPDlg::GetMinLength(BYTE *pBuf, int nLength)
{//计算缓冲中最小数据块的长度,跳过0xFF
	int m_nDataLength=0;
	int n;
	for(n=nLength-1;n>=0;n--)
	{
		if(pBuf[n]!=0xff)
		{
			if(n==0)
			 return m_nDataLength=1;
			break;
		}
	}
	if(n==0)
		return m_nDataLength=0;
	n++;
	if(n>m_ChipType.RomSize*1024)
		return m_nDataLength=m_ChipType.RomSize*1024;
	return m_nDataLength=n;
}

BOOL CUSBISPDlg::OpenHexFile(unsigned char FORE)
{
	if(m_strOpenFile!="")
	{
		if(m_fileOpen.Open(m_strOpenFile,CFile::shareCompat|CFile::modeRead,NULL))
		{
			int nFileSize;
			nFileSize=m_fileOpen.GetLength();
			if(m_strOpenFileExt=="HEX")
			{
				char* pFileBuf=(char*)GlobalAlloc(GMEM_FIXED,nFileSize+1);
				memset(pFileBuf,0,nFileSize+1);
				m_fileOpen.Read(pFileBuf,nFileSize);
				if(FORE==Flash)
				{
					HexToBin(pFileBuf,m_pWriteBuf);
					m_nLength=GetMinLength(m_pWriteBuf,0x10000);
				}
				else if(FORE==EEPROM)
				{
					HexToBin(pFileBuf,m_pEWriteBuf);
					m_nELength=GetMinLength(m_pEWriteBuf,0x10000);				
				}
				GlobalFree(pFileBuf);
			}
			else
			{
				if(nFileSize>0x10000)  nFileSize=0x10000;
				if(FORE==Flash)
				{
					memset(m_pWriteBuf,0xff,0x10000);
					m_fileOpen.Read(m_pWriteBuf,nFileSize);
				}
				else if(FORE==EEPROM)
				{
					memset(m_pEWriteBuf,0xff,0x10000);
					m_fileOpen.Read(m_pEWriteBuf,nFileSize);				
				}
			}
			//m_editBuf1.SetData(m_Pro.m_pWriteBuf,0x10000); //这里是做什么用的?
			m_fileOpen.Close();
			CString strFileSize;
			strFileSize.Format("[%d字节].",nFileSize);
			CString b;
			CString a;
			b.Format("%d字节",nFileSize);
			a.Format("·读入文件 %s",m_strEditFileName); 
			ShowMsg(a);
			if(FORE==Flash) a.Format("·文件大小 %s 待下载数据 [%d]byte.",strFileSize,m_nLength); 

⌨️ 快捷键说明

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