?? mainfrm.cpp
字號:
}
void CMainFrame::OnUpdateXplus(CCmdUI* pCmdUI)
{
pCmdUI->SetCheck(!strcmp(skin,"XPLUS"));
}
void CMainFrame::OnUpdateXpgrean(CCmdUI* pCmdUI)
{
pCmdUI->SetCheck(!strcmp(skin,"XPGREAN"));
}
void CMainFrame::OnErase()
{
m_wndMyBars.AppendText("擦除芯片.");
m_bWorkErase=TRUE;
WorkProc(TRUE);
}
void CMainFrame::OnWrite()
{
OnCheckChip();
SetTimer(1,1,NULL);
}
void CMainFrame::OnRead()
{
m_wndMyBars.AppendText("程序讀取.");
m_bWorkRead=TRUE;
WorkProc(TRUE);
}
void CMainFrame::OnCheck()
{
m_wndMyBars.AppendText("程序校驗.");
m_bWorkCheck=TRUE;
WorkProc(TRUE);
}
void CMainFrame::OnLock()
{
if(m_LockBits==0||m_LockBits>3)return;
int id=m_wndToolBar.m_wndZoom.FindString(0,CurChip);
m_Pro.LockBit(id,m_LockBits);
m_wndMyBars.AppendText("程序加密.");
}
void CMainFrame::WorkProc(BOOL bWork,BOOL bBeep)
{
CMyDoc* doc;
TRACE("WorkProc(%d)\n",bWork);
//m_wndToolBar.m_wndZoom.GetWindowText(CurChip);
int id=m_wndToolBar.m_wndZoom.FindString(0,CurChip);
doc=(CMyDoc*)(CMainFrame *)this->GetActiveFrame()->GetActiveDocument();
if(!bWork)
{
if(bBeep)
BeepError();
return;
}
if(m_bWorkDetectPro)
{
m_Pro.DetectPro(id);
m_bWorkDetectPro=FALSE;
return;
}
if(m_bWorkDetectChip)
{
m_Pro.DetectChip(id);
m_bWorkDetectChip=FALSE;
return;
}
if(m_bWorkErase)
{
m_Pro.Erase(id);
m_bWorkErase=FALSE;
return;
}
if(m_bWorkWrite&&doc)
{
memset(m_Pro.m_pWriteBuf,0xff,0x10000);
memcpy(m_Pro.m_pWriteBuf,doc->pcBuf,doc->m_pSize);
m_Pro.m_pWriteBuf[doc->m_pSize]=0;
m_Pro.Write(id);
m_bWorkWrite=FALSE;
return;
}
if(m_bWorkRead)
{
m_bCheck=FALSE;
m_Pro.m_bCheck=FALSE;
m_Pro.Read(id);
m_bWorkRead=FALSE;
return;
}
if(m_bWorkCheck)
{
memcpy(m_Pro.m_pWriteBuf,doc->pcBuf,doc->m_pSize);
m_bCheck=TRUE;
if(m_nWrCount==0)
m_Pro.m_bCheck=FALSE;
else
m_Pro.m_bCheck=TRUE;
m_Pro.Read(id);
m_bWorkCheck=FALSE;
return;
}
m_bAutoWork=FALSE;
if(bBeep)
BeepOk();
}
extern BOOL m_bWin98;
void CMainFrame::BeepError()
{
if(m_bSound)
if(!m_bWin98)
AfxBeginThread(BeepErrorThread,this);
else
MessageBeep(MB_ICONEXCLAMATION);
::FlashWindow(this->GetSafeHwnd(),TRUE);
}
void CMainFrame::BeepOk()
{
if(m_bSound)
if(!m_bWin98)
AfxBeginThread(BeepOkThread,this);
else
MessageBeep(MB_OK);
}
UINT CMainFrame::BeepOkThread(LPVOID Param)
{
Beep(2000,30);
Sleep(100);
Beep(2000,30);
Sleep(100);
Beep(2000,30);
return 0;
}
UINT CMainFrame::BeepErrorThread(LPVOID Param)
{
Beep(410,150);
return 0;
}
void CMainFrame::OnLockbit1()
{
if(m_LockBits==1){m_LockBits=0;return;}
m_LockBits=1;
m_wndMyBars.AppendText("設置加密方式1:Lock Bit1.");
}
void CMainFrame::OnLockbit2()
{
if(m_LockBits==2){m_LockBits=0;return;}
m_LockBits=2;
m_wndMyBars.AppendText("設置加密方式2:Lock Bit1+2.");
}
void CMainFrame::OnLockbit3()
{
if(m_LockBits==3){m_LockBits=0;return;}
m_LockBits=3;
m_wndMyBars.AppendText("設置加密方式3:Lock Bit1+2+3.");
}
void CMainFrame::OnUpdateLockbit1(CCmdUI* pCmdUI)
{
pCmdUI->SetCheck(m_LockBits==1);
}
void CMainFrame::OnUpdateLockbit2(CCmdUI* pCmdUI)
{
pCmdUI->SetCheck(m_LockBits==2);
}
void CMainFrame::OnUpdateLockbit3(CCmdUI* pCmdUI)
{
pCmdUI->SetCheck(m_LockBits==3);
}
void CMainFrame::OnSetdia()
{
CSetDia dia;
dia.m_AutoCheck=m_bAutoCheck;
dia.m_pBanud=m_nBaudSel;
dia.m_pProt=m_nSerialPort;
dia.m_Sound=m_bSound;
dia.m_pSpeed=m_nIspSpd;
if(dia.DoModal()==IDOK)
{
m_bAutoCheck=dia.m_AutoCheck;
m_Pro.m_pAutoCheck=m_bAutoCheck;
m_nBaudSel=dia.m_pBanud;
m_nSerialPort=dia.m_pProt;
m_bSound=dia.m_Sound;
m_nIspSpd=dia.m_pSpeed;
}
}
UINT CMainFrame::OnProMsg(WPARAM dwMsg,LPARAM dwMsg2)
{
BOOL bWork=FALSE;
CString strMsg1,strMsg2,strMsg3;
UINT len;
int id=m_wndToolBar.m_wndZoom.FindString(0,CurChip);
switch(dwMsg)
{
case PRO_INIT_SERIAL_SEC:
m_wndMyBars.AppendText("初始化串口通訊完成.");
m_Pro.DetectPro(id);
return 0;
case PRO_INIT_SERIAL_ER:
m_wndMyBars.AppendText("初始化串口通訊失敗.");
break;
case PRO_INIT_PARALLEL_SEC:
m_wndMyBars.AppendText("初始化并口完成.");
return 0;
case PRO_INIT_PARALLEL_ER:
m_wndMyBars.AppendText("初始化并口失敗.");
break;
case PRO_AVAILABLE:
m_wndMyBars.AppendText("編程器:就緒.");
m_wndStatusBar.SetWindowText("就緒");
WorkProc(TRUE,FALSE);
return 0;
case PRO_INVALID:
m_wndMyBars.AppendText("編程器:不可用.");
break;
case PRO_INIT_SERIAL_NOT:
m_wndMyBars.AppendText("未初始化串口.");
break;
case PRO_RCV_ER:
m_wndMyBars.AppendText("接收數據時發生錯誤.");
break;
case PRO_RD_SIGN:
m_wndMyBars.AppendText("編程器:檢測特征字結束.");
m_pCheckEnd=true;
OnSelectZoomed();
bWork=TRUE;
break;
case PRO_DETECTCHIP_SEC:
strMsg1.Format("(特征字:%02x %02x %02x).",m_Pro.SignByte[0],m_Pro.SignByte[1],m_Pro.SignByte[2]);
m_wndMyBars.AppendText("編程器:檢測到器件"+strMsg1);
strMsg1=m_Pro.GetCurChip()->Name;
strMsg2.Format(" - ROM容量:%dK字節.",m_Pro.GetCurChip()->RomSize);
strMsg3.Format(" 編程電壓:%.2fV.",m_Pro.GetCurChip()->ProVol);
strMsg1=strMsg1+strMsg2+strMsg3;
m_wndMyBars.AppendText(strMsg1);
bWork=TRUE;
break;
case PRO_DETECTCHIP_ER:
strMsg1.Format("(特征字:%02x %02x %02x).",m_Pro.SignByte[0],m_Pro.SignByte[1],m_Pro.SignByte[2]);
m_wndMyBars.AppendText("編程器:沒檢測到器件"+strMsg1);
bWork=FALSE;
break;
case PRO_ERASE:
m_wndMyBars.AppendText("編程器:擦除器件完成.");
bWork=TRUE;
break;
case PRO_WRITE_BEGIN:
m_wndMyBars.AppendText("編程器:寫器件開始.");
strMsg1.Format("寫入%d字節...",m_Pro.GetMinLength(m_Pro.m_pWriteBuf,0x10000));
m_wndMyBars.AppendText(strMsg1);
return 0;
case PRO_WRITE_BLOCK:
if(m_Pro.m_nDataLength==1 && m_Pro.m_nDataLength==0)
return 0;
char s[81];
memset(s,' ',80);
memset(s,'|',int(m_Pro.m_nAddr*80/(m_Pro.m_nDataLength-1)));
s[81]=0;
strMsg1.Format("正在寫:%04X/%04X-%s",m_Pro.m_nAddr-1,m_Pro.m_nDataLength-1,s);
m_wndStatusBar.SetWindowText(strMsg1);
return 0;
case PRO_WRITE_OVER:
m_wndMyBars.AppendText("編程器:寫器件完成.");
m_nWrCount++;
bWork=TRUE;
if(m_bWorkRead || m_bWorkCheck && m_nProType==0)
return 0;
break;
case PRO_WRITE_ER:
m_wndMyBars.AppendText("編程器:寫器件時發生錯誤.");
break;
case PRO_READ_BEGIN:
m_wndMyBars.AppendText("編程器:讀器件開始.");
return 0;
case PRO_READ_BLOCK:
if(m_Pro.m_nDataLength==1 && m_Pro.m_nDataLength==0)
return 0;
strMsg1.Format("正在讀:%04X/%04X--%d%%",m_Pro.m_nAddr-1,m_Pro.m_nDataLength-1,m_Pro.m_nAddr*100/(m_Pro.m_nDataLength-1));
m_wndStatusBar.SetWindowText(strMsg1);
return 0;
case PRO_READ_OVER:
m_wndMyBars.AppendText("編程器:讀器件完成.");
len=m_Pro.GetChipType(id)->RomSize*1024;
theApp.NewDoc((char*)m_Pro.m_pReadBuf,len );
CMyDoc* doc;
doc=(CMyDoc*)(CMainFrame *)this->GetActiveFrame()->GetActiveDocument();
doc->m_pSize=len;
m_wndMyBars.AppendText("數據窗口已打開.");
if(m_bCheck)
bWork=CheckData();
else
bWork=TRUE;
break;
case PRO_LOCK_BIT:
m_wndMyBars.AppendText("編程器:寫鎖定位完成.");
bWork=TRUE;
break;
case PRO_WORK_INVALID:
m_wndMyBars.AppendText("編程器:無效的操作.");
break;
default:
break;
}
WorkProc(bWork);
return 0;
}
BOOL CMainFrame::CheckData()
{
UINT nPos,nCount=0;
CString strMsg;
m_wndMyBars.AppendText("-------------------效驗開始------------------");
m_wndStatusBar.SetWindowText("效驗...");
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_wndMyBars.AppendText(strMsg);
}
}
strMsg.Format("共發現%5d個單元不對!",nCount);
m_wndMyBars.AppendText(strMsg);
m_wndMyBars.AppendText("-------------------效驗結束------------------");
m_bCheck=FALSE;
if(nCount==0)
return TRUE;
else
return FALSE;
}
void CMainFrame::OnUpdateCheck(CCmdUI* pCmdUI)
{
CMyDoc * doc;
doc=(CMyDoc*)(CMainFrame *)this->GetActiveFrame()->GetActiveDocument();
pCmdUI->Enable(doc!=0);
}
void CMainFrame::OnUpdateWrite(CCmdUI* pCmdUI)
{
CMyDoc * doc;
doc=(CMyDoc*)(CMainFrame *)this->GetActiveFrame()->GetActiveDocument();
pCmdUI->Enable(doc!=0);
}
void CMainFrame::OnTxtwin()
{
BOOL bShow = m_wndMyBars.IsVisible();
ShowControlBar(&m_wndMyBars, !bShow, FALSE);
}
void CMainFrame::OnUpdateTxtwin(CCmdUI* pCmdUI)
{
pCmdUI->SetCheck(m_wndMyBars.IsVisible());
}
void CMainFrame::OnChip()
{
CString strChipManagerPath;
strChipManagerPath=m_strAppPath+"ChipManager.exe";
ShellExecute(NULL, "open",strChipManagerPath ,NULL, NULL, SW_SHOW);
}
void CMainFrame::OnCheckChip()
{
m_pCheckEnd=false;
m_wndMyBars.AppendText("檢測芯片類型.");
m_bWorkDetectChip=true;
WorkProc(TRUE);
}
void CMainFrame::OnTimer(UINT nIDEvent)
{
if(m_pCheckEnd)
{
KillTimer(1);
if(!m_Pro.m_pCheck&&m_bAutoCheck)
m_wndMyBars.AppendText("器件檢測失敗,直接退出!");
else
{
m_wndMyBars.AppendText("程序燒寫.");
m_bWorkWrite=TRUE;
WorkProc(TRUE);
}
}
CMDIFrameWnd::OnTimer(nIDEvent);
}
void CMainFrame::OnSize(UINT nType, int cx, int cy)
{
//CMDIFrameWnd::OnSize(nType, cx, cy);
// TODO: Add your message handler code here
CRect rect;
GetWindowRect(&rect);
rect.right=rect.left+700;
rect.bottom=rect.top+500;
MoveWindow(&rect);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -