?? eprodlg.cpp
字號:
void CEProDlg::SetProType(int nProType)
{
switch(nProType)
{
case 0:
m_pSelPro->SetValue("使用Easy 51Pro串行編程器");
m_pProList->SetCurrent(0);
ShowMsg("使用Easy 51Pro串行編程器");
break;
case 1:
m_pSelPro->SetValue("使用Easy ISP下載線");
m_pProList->SetCurrent(1);
ShowMsg("使用Easy ISP下載線");
break;
case 2:
m_pSelPro->SetValue("使用Atmel ByteBlaster 下載線");
m_pProList->SetCurrent(2);
ShowMsg("使用Atmel ByteBlaster 下載線");
break;
case 3:
m_pSelPro->SetValue("使用Altera ByteBlaster 下載線");
m_pProList->SetCurrent(3);
ShowMsg("使用Altera ByteBlaster 下載線");
break;
default:
AfxMessageBox("請正確選擇編程器類型!");
break;
}
}
int CEProDlg::GetPortSel()
{
return m_nPortSel=m_pPortList->GetCurrent()+1;
}
void CEProDlg::SetPortSel(int nPortSel)
{
switch(nPortSel)
{
case 1:
m_pSelPort->SetValue("COM 1");
m_pPortList->SetCurrent(0);
break;
case 2:
m_pSelPort->SetValue("COM 2");
m_pPortList->SetCurrent(1);
break;
case 3:
m_pSelPort->SetValue("COM 3");
m_pPortList->SetCurrent(2);
break;
case 4:
m_pSelPort->SetValue("COM 4");
m_pPortList->SetCurrent(3);
break;
default:
break;
}
}
int CEProDlg::GetBaudSel()
{
return m_nBaudSel=m_pBaudList->GetCurrent();
}
void CEProDlg::SetBaudSel(int nBaudSel)
{
switch(nBaudSel)
{
case 0:
m_pSelBaud->SetValue("9600");
m_pBaudList->SetCurrent(0);
break;
case 1:
m_pSelBaud->SetValue("19200");
m_pBaudList->SetCurrent(1);
break;
case 2:
m_pSelBaud->SetValue("28800");
m_pBaudList->SetCurrent(2);
break;
case 3:
m_pSelBaud->SetValue("57600");
m_pBaudList->SetCurrent(3);
break;
default:
break;
}
}
int CEProDlg::GetIspSpd()
{
return m_nIspSpd=m_pIspSpdList->GetCurrent();
}
void CEProDlg::SetIspSpd(int nSpdSel)
{
if(nSpdSel==0)
{
m_pSelIspSpd->SetValue("一般");
m_pIspSpdList->SetCurrent(0);
}
else if(nSpdSel==1)
{
m_pSelIspSpd->SetValue("較快");
m_pIspSpdList->SetCurrent(1);
}
else if(nSpdSel==2)
{
m_pSelIspSpd->SetValue("最快");
m_pIspSpdList->SetCurrent(2);
}
}
LRESULT CEProDlg::OnGridNotify(WPARAM wParam, LPARAM lParam)
{
if(wParam == XT_PGN_ITEMVALUE_CHANGED)
{
TRACE("OnGridNotify(WPARAM wParam, LPARAM lParam)\n");
CXTPropertyGridItem* pItem = (CXTPropertyGridItem*)lParam;
CString strCaption,strValue;
strCaption= pItem->GetCaption();
if(strCaption=="自動檢測器件")
{
strValue=pItem->GetValue();
if(strValue=="True")
m_bDetectBegin=TRUE;
else
m_bDetectBegin=FALSE;
}
else if(strCaption=="使用聲音提示")
{
strValue=pItem->GetValue();
if(strValue=="True")
m_bSound=TRUE;
else
m_bSound=FALSE;
}
else if(strCaption=="使用熱鍵")
{
strValue=pItem->GetValue();
if(strValue=="True")
{
m_bHotKey=TRUE;
CHotKeyDialog HotKeyDlg;
HotKeyDlg.m_byteKey=m_byteKey;
HotKeyDlg.m_byteMask=m_byteMask;
EnableHotKey(FALSE);
if(HotKeyDlg.DoModal()==IDOK)
{
m_byteKey=HotKeyDlg.m_byteKey;
m_byteMask=HotKeyDlg.m_byteMask;
}
EnableHotKey(TRUE);
}
else
m_bHotKey=FALSE;
}
TRACE(_T("Value Changed. Caption = %s, ID = %i, Value = %s\n"),
pItem->GetCaption(), pItem->GetID(), pItem->GetValue());
}
return 0;
}
void CEProDlg::LoadInfoSave()
{
CString strFile;
strFile=m_strAppPath+"EasyPro_Info.ini";
if(GetPrivateProfileStruct(
"InfoSave", // address of section name
"m_InfoSave", // address of key name
&m_InfoSave, // address of return buffer
sizeof(InfoSave), // size of return buffer
strFile))
{
SetProType(m_nProType=m_InfoSave.m_nProType);
SetPortSel(m_nPortSel=m_InfoSave.m_nSerialPort);
SetBaudSel(m_nBaudSel=m_InfoSave.m_nBaudSel);
SetIspSpd(m_nIspSpd=m_InfoSave.m_nIspSpd);
if(!(m_bDetectBegin=m_InfoSave.m_bDetectBegin))
m_pDetectBegin->SetValue("False");
if(!(m_bSound=m_InfoSave.m_bSound))
m_pSound->SetValue("False");
if(!(m_bHotKey=m_InfoSave.m_bHotKey))
m_pHotKey->SetValue("False");
m_byteKey=m_InfoSave.m_byteKey;
m_byteMask=m_InfoSave.m_byteMask;
m_btOpenFile.EnableAuto(m_InfoSave.m_bAutoOpenFile);
m_btErase.EnableAuto(m_InfoSave.m_bAutoErase);
m_btWrite.EnableAuto(m_InfoSave.m_bAutoWrite);
m_btRead.EnableAuto(m_InfoSave.m_bAutoRead);
m_btCheck.EnableAuto(m_InfoSave.m_bAutoCheck);
ShowMsg("Easy 51Pro(v2.0)");
}
else
{ //第一次啟動
ShowMsg("Easy 51Pro(v2.0)");
ShowMsg("設計者:聶忠強 Email:nie_zq@163.net");
}
}
void CEProDlg::SaveInfoSave()
{
CString strFile;
strFile=m_strAppPath+"EasyPro_Info.ini";
m_InfoSave.m_nProType=GetProType();
m_InfoSave.m_nSerialPort=GetPortSel();
m_InfoSave.m_nBaudSel=GetBaudSel();
m_InfoSave.m_nIspSpd=GetIspSpd();
m_InfoSave.m_bDetectBegin=m_bDetectBegin;
m_InfoSave.m_bSound=m_bSound;
m_InfoSave.m_bHotKey=m_bHotKey;
m_InfoSave.m_byteKey=m_byteKey;
m_InfoSave. m_byteMask=m_byteMask;
m_InfoSave.m_bAutoOpenFile=m_btOpenFile.m_bAuto;
m_InfoSave.m_bAutoErase=m_btErase.m_bAuto;
m_InfoSave.m_bAutoWrite=m_btWrite.m_bAuto;
m_InfoSave.m_bAutoRead=m_btRead.m_bAuto;
m_InfoSave.m_bAutoCheck=m_btCheck.m_bAuto;
m_InfoSave.m_nChipSel=m_comboChipType.GetCurSel();
WritePrivateProfileStruct(
"InfoSave",// pointer to section name
"m_InfoSave", // pointer to key name
&m_InfoSave, // pointer to buffer that contains data to add
sizeof(InfoSave), // size, in bytes, of the buffer
strFile); // pointer to initialization filename
}
void CEProDlg::ShowMsg(CString strMsg)
{
if(m_nWndSel!=2)
SelWnd(2);
m_listMsg.InsertString(m_nMsg,strMsg);
m_listMsg.SetCurSel(m_nMsg);
//m_List.GetText(m_nMsg,m_str1);
m_nMsg++;
}
UINT CEProDlg::OnProMsg(WPARAM dwMsg,LPARAM dwMsg2)
{
BOOL bWork=FALSE;
CString strMsg1,strMsg2,strMsg3;
switch(dwMsg)
{
case PRO_INIT_SERIAL_SEC:
ShowMsg("初始化串口通訊完成.");
m_Pro.DetectPro(m_comboChipType.GetCurSel());
return 0;
case PRO_INIT_SERIAL_ER:
ShowMsg("初始化串口通訊失敗.");
break;
case PRO_INIT_PARALLEL_SEC:
ShowMsg("初始化并口完成.");
return 0;
case PRO_INIT_PARALLEL_ER:
ShowMsg("初始化并口失敗.");
break;
case PRO_AVAILABLE:
ShowMsg("編程器:就緒.");
WorkProc(TRUE,FALSE);
return 0;
case PRO_INVALID:
ShowMsg("編程器:不可用.");
break;
case PRO_INIT_SERIAL_NOT:
ShowMsg("未初始化串口.");
break;
case PRO_RCV_ER:
ShowMsg("接收數據時發生錯誤.");
break;
case PRO_RD_SIGN:
ShowMsg("編程器:檢測到特征字.");
bWork=TRUE;
break;
case PRO_DETECTCHIP_SEC:
strMsg1.Format("(特征字:%02x %02x %02x).",m_Pro.SignByte[0],m_Pro.SignByte[1],m_Pro.SignByte[2]);
ShowMsg("編程器:檢測到器件"+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;
ShowMsg(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]);
ShowMsg("編程器:沒檢測到器件"+strMsg1);
bWork=FALSE;
break;
case PRO_ERASE:
ShowMsg("編程器:擦除器件完成.");
bWork=TRUE;
break;
case PRO_WRITE_BEGIN:
ShowMsg("編程器:寫器件開始.");
strMsg1.Format("寫入%d字節...",m_Pro.GetMinLength(m_Pro.m_pWriteBuf,0x10000));
ShowMsg(strMsg1);
return 0;
case PRO_WRITE_BLOCK:
if(m_Pro.m_nDataLength==1 && m_Pro.m_nDataLength==0)
return 0;
m_Progress.ShowWindow(SW_SHOW);
strMsg1.Format("正在寫:%04x/%04x",m_Pro.m_nAddr-1,m_Pro.m_nDataLength-1);
strMsg1.MakeUpper();
m_Progress.SetText(strMsg1);
m_Progress.SetPos(m_Pro.m_nAddr*100/(m_Pro.m_nDataLength-1));
return 0;
case PRO_WRITE_OVER:
ShowMsg("編程器:寫器件完成.");
m_Progress.SetPos(100);
m_Progress.SetText("寫器件完成");
m_Progress.Invalidate(FALSE);
m_nWrCount++;
bWork=TRUE;
if(m_bWorkRead || m_bWorkCheck && m_nProType==0)
return 0;
break;
case PRO_WRITE_ER:
ShowMsg("編程器:寫器件時發生錯誤.");
break;
case PRO_READ_BEGIN:
ShowMsg("編程器:讀器件開始.");
return 0;
case PRO_READ_BLOCK:
if(m_Pro.m_nDataLength==1 && m_Pro.m_nDataLength==0)
return 0;
m_Progress.ShowWindow(SW_SHOW);
strMsg1.Format("正在讀:%04x/%04x",m_Pro.m_nAddr-1,m_Pro.m_nDataLength-1);
strMsg1.MakeUpper();
m_Progress.SetText(strMsg1);
m_Progress.SetPos(m_Pro.m_nAddr*100/(m_Pro.m_nDataLength-1));
return 0;
case PRO_READ_OVER:
ShowMsg("編程器:讀器件完成.");
m_Progress.SetPos(100);
m_Progress.SetText("讀器件完成");
m_Progress.Invalidate(FALSE);
m_editBuf2.SetData(m_Pro.m_pReadBuf,0x10000);
ShowMsg("數據已經保存到緩沖2.");
if(m_bCheck)
bWork=CheckData();
else
bWork=TRUE;
break;
case PRO_LOCK_BIT:
ShowMsg("編程器:寫鎖定位完成.");
bWork=TRUE;
break;
case PRO_WORK_INVALID:
ShowMsg("編程器:無效的操作.");
break;
default:
break;
}
WorkProc(bWork);
return 0;
}
void CEProDlg::EnableCtrl(BOOL bEn)
{
TRACE("EnableCtrl(%d)\n",bEn);
m_btDetectChip.SetIndicator(FALSE);
m_btOpenFile.SetIndicator(FALSE);
m_btSaveFile.SetIndicator(FALSE);
m_btErase.SetIndicator(FALSE);
m_btWrite.SetIndicator(FALSE);
m_btRead.SetIndicator(FALSE);
m_btCheck.SetIndicator(FALSE);
m_btLock.SetIndicator(FALSE);
m_btAuto.SetIndicator(FALSE);
if(bEn==TRUE)
{
m_bWorkDetectPro=FALSE;
m_bWorkOpenFile=FALSE;
m_bWorkDetectChip=FALSE;
m_bWorkErase=FALSE;
m_bWorkWrite=FALSE;
m_bWorkRead=FALSE;
m_bWorkCheck=FALSE;
m_bAutoWork=FALSE;
m_btOpenFile.m_bUse=TRUE;
m_btDetectChip.m_bUse=TRUE;
m_btSaveFile.m_bUse=TRUE;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -