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