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

📄 usbispdlg.cpp

📁 一个很好的基于USB开发的VC++资料.一个很好的基于USB开发的VC++资料
💻 CPP
📖 第 1 页 / 共 3 页
字号:
			else a.Format("·文件大小 %s 待下载数据 [%d]byte.",strFileSize,m_nELength);
			ShowMsg(a);
		}
		else
		{
			ShowMsg("打开文件失败.");
			return FALSE;
		}
	}
	else
	{
		ShowMsg("请先打开文件.");
		return FALSE;
	}
	return TRUE;
}

void CUSBISPDlg::OnBtnAuto() 
{
	// TODO: Add your control notification handler code here
	ShowMsg("----------------开始自动下载------------------",TRUE);//清空原有文本

	OpenHexFile();

	if(!m_Isp.chipInit())
	{
		ShowMsg("下载器初始化出错!");
		m_ISPFAL+=1;
		return;
	}
	
	if(!m_Isp.chipEntryProgram())
	{
		ShowMsg("下载器初始化出错!");
		m_ISPFAL+=1;
		return;
	}

	unsigned char ChipSign[3];
	if(ProcParam.bSignRead==TRUE) if(!m_Isp.chipSignature(ChipSign))
	{
		ShowMsg("没检到器件!");
		m_ISPFAL+=1;
		return;	
	}

	if(ProcParam.bErasure==TRUE)
	{
		if(!m_Isp.chipErasure())
		{
			ShowMsg("芯片擦除失败!");
			m_ISPFAL+=1;
			return;		
		}
		else
		{
			ShowMsg("·芯片擦除完成!");
		}
	}

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

    //写块 flashoreeprom=0 flash, flashoreeprom=1 eeprom
	if(ProcParam.bWEEPROM==TRUE && m_ChipType.FType!=S5x)
	{
		if(!m_Isp.chipPageWrite(1,m_pEWriteBuf,m_ChipType.epageSize,m_nELength))
		{
			ShowMsg("写器件错误.");
			m_ISPFAL+=1;
			return;		
		}
		else
		{
			ShowMsg("·写器件完成.");
		}
	}

    //读块 flashoreeprom=0 flash, flashoreeprom=1 eeprom
	if(ProcParam.bCheckFlash==TRUE)
	{
		if(!m_Isp.chipPageRead(0,m_pReadBuf,m_nLength))
		{
			ShowMsg("读器件错误.");
			return;		
		}
		else
		{
			ShowMsg("·读器件完成.");
			int nDefirentBye=memcmp(m_pReadBuf,m_pWriteBuf,m_nLength);
			CString a;
			if(!nDefirentBye)
			{
				a.Format("·校验完成.共写入%d字节,错误%d字节.",m_nLength,nDefirentBye);
				ShowMsg(a);
			}
			else
			{
				m_ISPFAL+=1;
				a.Format("校验完成.共写入%d字节,错误%d字节.",m_nLength,nDefirentBye);
				ShowMsg("校验失败.");
			}
		}
	}

	m_Isp.chipProcOver();
	CString a;
	a.Format("·自动写器件完成.");
	ShowMsg(a);	
	a.Format("·成功下载%d次,失败%d次",++m_ISPSEC,m_ISPFAL);
	ShowMsg("----------------本次操作完成------------------\r\n");
	SetDlgItemText(IDC_EDIT2,a);
}

void CUSBISPDlg::OnDestroy() 
{
	CDialog::OnDestroy();
	// TODO: Add your message handler code here
	GlobalFree(m_pReadBuf);
	GlobalFree(m_pWriteBuf);
}

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

	unsigned char *nLock=new unsigned char[1];
	if(!m_Isp.chipRWLock((m_ChipType.FType==0?1:5),nLock))
	{
		ShowMsg("读特征字出错!");
		m_ISPFAL+=1;
		return;
	}

	GetDlgItem(IDC_EDIT1)->ShowWindow(SW_HIDE);
	GetDlgItem(IDC_MSFLEXGRID1)->ShowWindow(SW_HIDE);
	GetDlgItem(IDC_TREE1)->ShowWindow(SW_SHOW);
	GetDlgItem(IDC_BTN_LF_READ)->ShowWindow(SW_SHOW);
	GetDlgItem(IDC_BTN_LF_WRITE)->ShowWindow(SW_SHOW);
	GetDlgItem(IDC_BTN_LF_READ)->SetWindowText("读加密位");
	GetDlgItem(IDC_BTN_LF_WRITE)->SetWindowText("写加密位");
	GetDlgItem(IDC_BTN_LF_EXIT)->SetWindowText("退出编辑");
	GetDlgItem(IDC_BTN_LF_EXIT)->ShowWindow(SW_SHOW);

	((CTreeCtrl *)GetDlgItem(IDC_TREE1))->DeleteAllItems();
	//((CTreeCtrl *)GetDlgItem(IDC_TREE1))->SetBkColor(RGB(167,204,255));

	((CTreeCtrl *)GetDlgItem(IDC_TREE1))->SetItemHeight(20);

	if(m_ChipType.FType) //S5X类型
	{
		((CTreeCtrl *)GetDlgItem(IDC_TREE1))->InsertItem("NA");
		((CTreeCtrl *)GetDlgItem(IDC_TREE1))->InsertItem("NA");
		((CTreeCtrl *)GetDlgItem(IDC_TREE1))->InsertItem("NA");
		((CTreeCtrl *)GetDlgItem(IDC_TREE1))->InsertItem("3 未用到");

		((CTreeCtrl *)GetDlgItem(IDC_TREE1))->InsertItem("2 未用到");
		((CTreeCtrl *)GetDlgItem(IDC_TREE1))->InsertItem("Lock1 禁用扩展ROM");
		((CTreeCtrl *)GetDlgItem(IDC_TREE1))->InsertItem("Lock2 禁止读器件");
		((CTreeCtrl *)GetDlgItem(IDC_TREE1))->InsertItem("Lock3 禁止MOVC指令和再编程");
	}
	else
	{
		if(m_ChipType.Name[0]=='A' && m_ChipType.Name[1]=='t' && m_ChipType.Name[2]=='m') //Atmega型芯片
		{
			((CTreeCtrl *)GetDlgItem(IDC_TREE1))->InsertItem("BLB01");
			((CTreeCtrl *)GetDlgItem(IDC_TREE1))->InsertItem("BLB02");
			((CTreeCtrl *)GetDlgItem(IDC_TREE1))->InsertItem("BLB11");
			((CTreeCtrl *)GetDlgItem(IDC_TREE1))->InsertItem("BLB12");

			((CTreeCtrl *)GetDlgItem(IDC_TREE1))->InsertItem("NoLock");
			((CTreeCtrl *)GetDlgItem(IDC_TREE1))->InsertItem("Lock1");
			((CTreeCtrl *)GetDlgItem(IDC_TREE1))->InsertItem("Lock2");
			((CTreeCtrl *)GetDlgItem(IDC_TREE1))->InsertItem("NA");	
		}
		else //其它芯片
		{
			((CTreeCtrl *)GetDlgItem(IDC_TREE1))->InsertItem("NA");
			((CTreeCtrl *)GetDlgItem(IDC_TREE1))->InsertItem("NA");
			((CTreeCtrl *)GetDlgItem(IDC_TREE1))->InsertItem("NA");
			((CTreeCtrl *)GetDlgItem(IDC_TREE1))->InsertItem("NA");

			((CTreeCtrl *)GetDlgItem(IDC_TREE1))->InsertItem("NoLock");
			((CTreeCtrl *)GetDlgItem(IDC_TREE1))->InsertItem("Lock1");
			((CTreeCtrl *)GetDlgItem(IDC_TREE1))->InsertItem("Lock2");
			((CTreeCtrl *)GetDlgItem(IDC_TREE1))->InsertItem("NA");		
		}
	}
	//将读到的加密位写入到Ctree中
	HTREEITEM hTreeItem=((CTreeCtrl *)GetDlgItem(IDC_TREE1))->GetFirstVisibleItem();
	unsigned int tmp=*nLock;
	for(unsigned char i=0;i<8;i++)
	{
		unsigned int tmp2=0x80;
		tmp2=(tmp2>>i) & tmp;
		((CTreeCtrl *)GetDlgItem(IDC_TREE1))->SelectItem(hTreeItem);
		if(tmp2>0) ((CTreeCtrl *)GetDlgItem(IDC_TREE1))->SetCheck(hTreeItem,1);
		else ((CTreeCtrl *)GetDlgItem(IDC_TREE1))->SetCheck(hTreeItem,0);
		hTreeItem=((CTreeCtrl *)GetDlgItem(IDC_TREE1))->GetNextVisibleItem(hTreeItem);
	}
	//*nLock为读到的特征字
	delete[] nLock;
}

void CUSBISPDlg::OnBtnFuse() 
{
	// TODO: Add your control notification handler code here
	GetDlgItem(IDC_EDIT1)->ShowWindow(SW_HIDE);
	GetDlgItem(IDC_MSFLEXGRID1)->ShowWindow(SW_HIDE);

	GetDlgItem(IDC_TREE1)->ShowWindow(SW_SHOW);
	GetDlgItem(IDC_BTN_LF_READ)->ShowWindow(SW_SHOW);
	GetDlgItem(IDC_BTN_LF_WRITE)->ShowWindow(SW_SHOW);
	GetDlgItem(IDC_BTN_LF_EXIT)->ShowWindow(SW_SHOW);

	GetDlgItem(IDC_BTN_LF_READ)->SetWindowText("读熔丝位");
	GetDlgItem(IDC_BTN_LF_WRITE)->SetWindowText("写熔丝位");
	GetDlgItem(IDC_BTN_LF_EXIT)->SetWindowText("退出编辑");
}

void CUSBISPDlg::OnBtnLfExit() 
{
	// TODO: Add your control notification handler code here
	GetDlgItem(IDC_EDIT1)->ShowWindow(SW_SHOW);
	GetDlgItem(IDC_TREE1)->ShowWindow(SW_HIDE);
	GetDlgItem(IDC_BTN_LF_READ)->ShowWindow(SW_HIDE);
	GetDlgItem(IDC_BTN_LF_WRITE)->ShowWindow(SW_HIDE);
	GetDlgItem(IDC_BTN_LF_EXIT)->ShowWindow(SW_HIDE);	
}


void CUSBISPDlg::OnSelchangedTree1(NMHDR* pNMHDR, LRESULT* pResult) 
{
	NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
	// TODO: Add your control notification handler code here
	HTREEITEM hTreeItem=((CTreeCtrl *)GetDlgItem(IDC_TREE1))->GetSelectedItem();
	BOOL bChecked=((CTreeCtrl *)GetDlgItem(IDC_TREE1))->GetCheck(hTreeItem);
	if(!bChecked) ((CTreeCtrl *)GetDlgItem(IDC_TREE1))->SetCheck(hTreeItem,1);
	else  ((CTreeCtrl *)GetDlgItem(IDC_TREE1))->SetCheck(hTreeItem,0);	
	*pResult = 0;
}

void CUSBISPDlg::OnRclickTree1(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// TODO: Add your control notification handler code here
	HTREEITEM hTreeItem=((CTreeCtrl *)GetDlgItem(IDC_TREE1))->GetSelectedItem();
	BOOL bChecked=((CTreeCtrl *)GetDlgItem(IDC_TREE1))->GetCheck(hTreeItem);
	if(!bChecked) ((CTreeCtrl *)GetDlgItem(IDC_TREE1))->SetCheck(hTreeItem,1);
	else  ((CTreeCtrl *)GetDlgItem(IDC_TREE1))->SetCheck(hTreeItem,0);	
	*pResult = 0;
}

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

	CString a;
	GetDlgItem(IDC_BTN_LF_READ)->GetWindowText(a);
	if(!strcmp(a,"读加密位"))
	{
		unsigned char *nLock=new unsigned char[1];
		if(!m_Isp.chipRWLock((m_ChipType.FType==0?1:5),nLock))
		{
			ShowMsg("读特征字出错!");
			m_ISPFAL+=1;
			return;
		}
		//将读到的加密位写入到Ctree中
		HTREEITEM hTreeItem=((CTreeCtrl *)GetDlgItem(IDC_TREE1))->GetFirstVisibleItem();
		unsigned int tmp=*nLock;
		for(unsigned char i=0;i<8;i++)
		{
			unsigned int tmp2=0x80;
			tmp2=(tmp2>>i) & tmp;
			((CTreeCtrl *)GetDlgItem(IDC_TREE1))->SelectItem(hTreeItem);
			if(tmp2>0) ((CTreeCtrl *)GetDlgItem(IDC_TREE1))->SetCheck(hTreeItem,1);
			else ((CTreeCtrl *)GetDlgItem(IDC_TREE1))->SetCheck(hTreeItem,0);
			hTreeItem=((CTreeCtrl *)GetDlgItem(IDC_TREE1))->GetNextVisibleItem(hTreeItem);
		}
		//*nLock为读到的特征字
		delete[] nLock;	
	}
}

BEGIN_EVENTSINK_MAP(CUSBISPDlg, CDialog)
    //{{AFX_EVENTSINK_MAP(CUSBISPDlg)
	ON_EVENT(CUSBISPDlg, IDC_MSFLEXGRID1, 69 /* SelChange */, OnSelChangeMsflexgrid, VTS_NONE)
	//}}AFX_EVENTSINK_MAP
END_EVENTSINK_MAP()

void CUSBISPDlg::OnSelChangeMsflexgrid() 
{
	// TODO: Add your control notification handler code here
	
}

void CUSBISPDlg::OnBtnReadEeprom() 
{
	// TODO: Add your control notification handler code here
	// TODO: Add your control notification handler code here
	unsigned char ChipSign[3];

	if(!m_Isp.chipInit())
	{
		ShowMsg("下载器初始化出错!");
		return;
	}

	if(m_ChipType.FType==S5x)
	{
		ShowMsg("S51系列没有内置EEPROM!");
		return;	
	}

	if(!m_Isp.chipEntryProgram())
	{
		ShowMsg("下载器初始化出错!");
		return;
	}

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

    //读块 flashoreeprom=0 flash, flashoreeprom=1 eeprom
	if(!m_Isp.chipPageRead(1,m_pEReadBuf,m_ChipType.eepromSize))
	{
		ShowMsg("读器件错误.");
		return;		
	}
	m_Isp.chipProcOver();
	CString a;
	a.Format("读器件完成.");
	ShowMsg(a);		
}

void CUSBISPDlg::OnBtnEfileOpen() 
{
	// TODO: Add your control notification handler code here
	// 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;
		OpenHexFile(1);
	}	
}

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

    //读块 flashoreeprom=0 flash, flashoreeprom=1 eeprom
	if(!m_Isp.chipPageWrite(1,m_pEWriteBuf,m_ChipType.epageSize,m_nELength))
	{
		ShowMsg("写器件错误.");
		m_ISPFAL+=1;
		return;		
	}
	m_Isp.chipProcOver();
	CString a;
	a.Format("写器件EEPROM完成.");
	m_ISPSEC+=1;
	ShowMsg(a);	
	a.Format("成功下载%d次,失败%d次",m_ISPSEC,m_ISPFAL);
	SetDlgItemText(IDC_EDIT2,a);	
}

⌨️ 快捷键说明

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