?? eprodlg.cpp
字號:
m_btErase.m_bUse=TRUE;
m_btWrite.m_bUse=TRUE;
m_btRead.m_bUse=TRUE;
m_btCheck.m_bUse=TRUE;
m_btLock.m_bUse=TRUE;
m_btAuto.m_bUse=TRUE;
m_comboChipType.EnableWindow(TRUE);
m_comboLockBits.EnableWindow(TRUE);
}
else
{
m_btOpenFile.m_bUse=FALSE;
m_btDetectChip.m_bUse=FALSE;
m_btSaveFile.m_bUse=FALSE;
m_btErase.m_bUse=FALSE;
m_btWrite.m_bUse=FALSE;
m_btRead.m_bUse=FALSE;
m_btCheck.m_bUse=FALSE;
m_btLock.m_bUse=FALSE;
m_btAuto.m_bUse=FALSE;
m_comboChipType.EnableWindow(FALSE);
m_comboLockBits.EnableWindow(FALSE);
}
}
void CEProDlg::OnButtonOpenfile()
{
// TODO: Add your control notification handler code here
static CLastFileDialog m_FileDlg(TRUE,"bin",NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,"二進制文件(*.bin)|*.bin|Intel Hex文件(*.hex)|*.hex|");
if(m_btOpenFile.m_bUse)
{
if(m_FileDlg.DoModal()==IDOK)
{
m_strOpenFile=m_FileDlg.GetLastFileName();
//AfxMessageBox(m_strOpenFile);
m_strOpenFileExt=m_FileDlg.GetLastFileExt();
//AfxMessageBox(m_strOpenFileExt);
m_strOpenFileExt.MakeUpper();
OpenFile();
}
}
}
BOOL CEProDlg::OpenFile()
{
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);
HexToBin(pFileBuf,m_Pro.m_pWriteBuf);
GlobalFree(pFileBuf);
}
else
{
if(nFileSize>0x10000) nFileSize=0x10000;
memset(m_Pro.m_pWriteBuf,0xff,0x10000);
m_fileOpen.Read(m_Pro.m_pWriteBuf,nFileSize);
}
m_editBuf1.SetData(m_Pro.m_pWriteBuf,0x10000);
m_fileOpen.Close();
CString strFileSize;
strFileSize.Format("(%d字節).",nFileSize);
ShowMsg("讀入文件 "+m_strOpenFile+" 到緩沖1"+strFileSize);
WorkProc(TRUE,FALSE);
}
else
{
ShowMsg("打開文件失敗.");
WorkProc(FALSE);
return FALSE;
}
}
else
{
ShowMsg("請先打開文件.");
WorkProc(FALSE);
return FALSE;
}
return TRUE;
}
void CEProDlg::WorkProc(BOOL bWork,BOOL bBeep)
{
TRACE("WorkProc(%d)\n",bWork);
if(!bWork)
{
if(bBeep)
BeepError();
EnableCtrl(TRUE);
return;
}
if(m_bWorkOpenFile)
{
m_bWorkOpenFile=FALSE;
OpenFile();
return;
}
if(m_bWorkDetectPro)
{
m_Pro.DetectPro(m_comboChipType.GetCurSel());
m_bWorkDetectPro=FALSE;
return;
}
if(m_bWorkDetectChip)
{
m_Pro.DetectChip(m_comboChipType.GetCurSel());
m_bWorkDetectChip=FALSE;
return;
}
if(m_bWorkErase)
{
EnableCtrl(FALSE);
m_btErase.SetIndicator(TRUE);
m_Pro.Erase(m_comboChipType.GetCurSel());
m_bWorkErase=FALSE;
return;
}
if(m_bWorkWrite)
{
EnableCtrl(FALSE);
m_editBuf1.GetData(m_Pro.m_pWriteBuf,0x000);
m_btWrite.SetIndicator(TRUE);
m_Pro.Write(m_comboChipType.GetCurSel());
m_bWorkWrite=FALSE;
return;
}
if(m_bWorkRead)
{
EnableCtrl(FALSE);
m_btRead.SetIndicator(TRUE);
m_bCheck=FALSE;
m_Pro.m_bCheck=FALSE;
m_Pro.Read(m_comboChipType.GetCurSel());
m_bWorkRead=FALSE;
return;
}
if(m_bWorkCheck)
{
EnableCtrl(FALSE);
m_btCheck.SetIndicator(TRUE);
m_bCheck=TRUE;
if(m_nWrCount==0)
m_Pro.m_bCheck=FALSE;
else
m_Pro.m_bCheck=TRUE;
m_Pro.Read(m_comboChipType.GetCurSel());
m_bWorkCheck=FALSE;
return;
}
m_bAutoWork=FALSE;
EnableCtrl(TRUE);
if(bBeep)
BeepOk();
}
void CEProDlg::OnButtonChipdetect()
{
// TODO: Add your control notification handler code here
if(!m_btDetectChip.m_bUse)
return;
EnableCtrl(TRUE);
m_bAutoWork=FALSE;
m_bWorkDetectChip=TRUE;
WorkProc(TRUE);
}
void CEProDlg::OnButtonSavefile()
{
// TODO: Add your control notification handler code here
if(!m_btSaveFile.m_bUse)
return;
UINT nFileLength;
CString strFileInfo;
static CFileDialog m_FileDlg(FALSE,"bin",NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,"二進制文件(*.bin)|*.bin|");
if(m_FileDlg.DoModal()==IDOK)
{
if(m_fileSave.Open(m_FileDlg.GetPathName(),CFile::shareCompat|CFile::modeCreate|CFile::modeWrite,NULL))
{
m_editBuf2.GetData(m_Pro.m_pReadBuf,0x10000);
m_fileSave.Write(m_Pro.m_pReadBuf,nFileLength=m_Pro.GetMinLength(m_Pro.m_pReadBuf,0x10000));
strFileInfo.Format("%d字節",nFileLength);
ShowMsg("緩沖2保存到文件 "+m_FileDlg.GetPathName()+"("+strFileInfo+").");
m_fileSave.Close();
}
}
}
void CEProDlg::OnButtonErase()
{
// TODO: Add your control notification handler code here
if(!m_btErase.m_bUse)
return;
EnableCtrl(TRUE);
m_bAutoWork=FALSE;
m_bWorkErase=TRUE;
WorkProc(TRUE);
}
void CEProDlg::OnButtonWrite()
{
// TODO: Add your control notification handler code here
if(!m_btWrite.m_bUse)
return;
EnableCtrl(TRUE);
m_bAutoWork=FALSE;
m_bWorkWrite=TRUE;
WorkProc(TRUE);
}
void CEProDlg::OnButtonRead()
{
// TODO: Add your control notification handler code here
if(!m_btRead.m_bUse)
return;
EnableCtrl(TRUE);
m_bAutoWork=FALSE;
m_bWorkRead=TRUE;
WorkProc(TRUE);
}
void CEProDlg::OnButtonCheck()
{
// TODO: Add your control notification handler code here
if(!m_btCheck.m_bUse)
return;
EnableCtrl(TRUE);
m_bAutoWork=FALSE;
m_bWorkCheck=TRUE;
WorkProc(TRUE);
}
void CEProDlg::OnButtonAuto()
{
// TODO: Add your control notification handler code here
if(!m_btAuto.m_bUse)
return;
EnableCtrl(TRUE);
m_listMsg.ResetContent( );
m_nMsg=0;
m_bWorkOpenFile=m_btOpenFile.m_bAuto;
m_bWorkDetectPro=TRUE;
m_bWorkDetectChip=m_bDetectBegin;
m_bWorkErase=m_btErase.m_bAuto;
m_bWorkWrite=m_btWrite.m_bAuto;
m_bWorkRead=m_btRead.m_bAuto;
m_bWorkCheck=m_btCheck.m_bAuto;
m_bAutoWork=TRUE;
WorkProc(TRUE);
}
void CEProDlg::OnButtonLock()
{
// TODO: Add your control notification handler code here
if(m_btLock.m_bUse)
m_Pro.LockBit(m_comboChipType.GetCurSel(),m_comboLockBits.GetCurSel()+1);
}
BOOL CEProDlg::CheckData()
{
UINT nPos,nCount=0;
CString strMsg;
ShowMsg("-------------------效驗開始------------------");
for(nPos=0;nPos<=0xffff;nPos++)
{
if(m_Pro.m_pWriteBuf[nPos]!=m_Pro.m_pReadBuf[nPos])
{
strMsg.Empty();
nCount++;
strMsg.Format(" %05d - 地址:%04x 寫:%02x 讀:%02x",nCount,nPos,m_Pro.m_pWriteBuf[nPos],m_Pro.m_pReadBuf[nPos]);
strMsg.MakeUpper();
m_listMsg.InsertString(m_nMsg,strMsg);
m_nMsg++;
}
}
strMsg.Format("共發現%5d個單元不對!",nCount);
ShowMsg(strMsg);
ShowMsg("-------------------效驗結束------------------");
m_bCheck=FALSE;
if(nCount==0)
return TRUE;
else
return FALSE;
}
void CEProDlg::OnChips()
{
// TODO: Add your control notification handler code here
CString strChipManagerPath;
strChipManagerPath=m_strAppPath+"ChipManager.exe";
m_hlChips.EnableShellExecute(FALSE);
ShellExecute(NULL, "open",strChipManagerPath ,NULL, NULL, SW_SHOW);
//AfxMessageBox("OnChips() ");
}
void CEProDlg::EnableHotKey(BOOL bEn)
{
static BOOL bOpenHotKey=FALSE;
if(bEn)
{
if(bOpenHotKey=AddHotkey(this->GetSafeHwnd(),m_byteKey,m_byteMask))
TRACE("AddHotkey: PASS\n");
}
else
{
if(bOpenHotKey)
DeleteHotkey(this->GetSafeHwnd(),m_byteKey,m_byteMask);
TRACE("DeleteHotkey: PASS\n");
bOpenHotKey=FALSE;
}
}
LRESULT CEProDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
// TODO: Add your specialized code here and/or call the base class
//TRACE("WindowProc\n");
if(message==WM_HOTKEY && lParam==WM_KEYDOWN)
{
OnButtonAuto();
}
return CDialog::WindowProc(message, wParam, lParam);
}
void CEProDlg::OnDestroy()
{
CDialog::OnDestroy();
EnableHotKey(FALSE);
// TODO: Add your message handler code here
}
extern BOOL m_bWin98;
void CEProDlg::BeepError()
{
if(m_bSound)
if(!m_bWin98)
AfxBeginThread(BeepErrorThread,this);
else
MessageBeep(MB_ICONEXCLAMATION);
::FlashWindow(this->GetSafeHwnd(),TRUE);
}
void CEProDlg::BeepOk()
{
if(m_bSound)
if(!m_bWin98)
AfxBeginThread(BeepOkThread,this);
else
MessageBeep(MB_OK);
}
UINT CEProDlg::BeepOkThread(LPVOID Param)
{
Beep(2000,30);
Sleep(100);
Beep(2000,30);
Sleep(100);
Beep(2000,30);
return 0;
}
UINT CEProDlg::BeepErrorThread(LPVOID Param)
{
Beep(410,150);
return 0;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -