?? 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("下載器初始化出錯(cuò)!");
return;
}
if(!m_Isp.chipEntryProgram())
{
ShowMsg("下載器初始化出錯(cuò)!");
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("下載器初始化出錯(cuò)!");
return;
}
if(!m_Isp.chipEntryProgram())
{
ShowMsg("下載器初始化出錯(cuò)!");
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("讀器件錯(cuò)誤.");
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("下載器初始化出錯(cuò)!");
m_ISPFAL+=1;
return;
}
if(!m_Isp.chipEntryProgram())
{
ShowMsg("下載器初始化出錯(cuò)!");
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("寫器件錯(cuò)誤.");
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,"編程設(shè)定" 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;
}
//顯示緩沖內(nèi)容 1->EEPROM 0->Flash
void CUSBISPDlg::ReadBufDisp(unsigned char FORE)
{
char nCharEach=16; //每行個(gè)數(shù)
char nCols=nCharEach+2; //列數(shù)
int nRows=0;
if(FORE==0) nRows=m_ChipType.RomSize/nCharEach+2; //行數(shù)
else if(FORE==1) nRows=m_ChipType.eepromSize/nCharEach+2; //行數(shù)
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); //設(shè)置數(shù)據(jù)區(qū)列寬
m_DataList.SetColWidth(0,700); //設(shè)置第一列寬
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++) //設(shè)置列屬性
{
a.Format("%2.2X",i-1);
m_DataList.SetTextMatrix(0,i,a);
}
for(i=1;i<m_DataList.GetRows();i++) //設(shè)置行屬性
{
a.Format("%6.6X",(i-1)*nCharEach);
m_DataList.SetTextMatrix(i,0,a);
}
//為數(shù)據(jù)填寫數(shù)據(jù)
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);
}
//顯示緩沖內(nèi)容 1->EEPROM 0->Flash
void CUSBISPDlg::WriteBufDisp(unsigned char FORE)
{
char nCharEach=16; //每行個(gè)數(shù)
char nCols=nCharEach+2; //列數(shù)
int nRows=0;
if(FORE==0) nRows=m_ChipType.RomSize/nCharEach+2; //行數(shù)
else if(FORE==1) nRows=m_ChipType.eepromSize/nCharEach+2; //行數(shù)
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); //設(shè)置數(shù)據(jù)區(qū)列寬
m_DataList.SetColWidth(0,700); //設(shè)置第一列寬
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++) //設(shè)置列屬性
{
a.Format("%2.2X",i-1);
m_DataList.SetTextMatrix(0,i,a);
}
for(i=1;i<m_DataList.GetRows();i++) //設(shè)置行屬性
{
a.Format("%6.6X",(i-1)*nCharEach);
m_DataList.SetTextMatrix(i,0,a);
}
//為數(shù)據(jù)填寫數(shù)據(jù)
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|二進(jìn)制文件(*.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)
{//計(jì)算緩沖中最小數(shù)據(jù)塊的長度,跳過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字節(jié)].",nFileSize);
CString b;
CString a;
b.Format("%d字節(jié)",nFileSize);
a.Format("·讀入文件 %s",m_strEditFileName);
ShowMsg(a);
if(FORE==Flash) a.Format("·文件大小 %s 待下載數(shù)據(jù) [%d]byte.",strFileSize,m_nLength);
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -