📄 usbispdlg.cpp
字号:
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 + -