📄 atlasmgr2dlg.cpp
字号:
bRet = FALSE;
goto DownloadBinFileExit;
}
dwFileLength -= dwThisRead;
progress.StepIt();
}
//
if(bFlush)
{
bRet = AtlasSyncDataBlock();
}
SetThreadPriority(dwCurThread, dwOldThreadPrio);
DownloadBinFileExit:
file.Close();
AtlasCloseDownloadPipe();
return bRet;
}
BOOL CAtlasMgr2Dlg::ParseBinInfo(char strBinFiles[BL_MAX_BIN_REGIONS][MAX_PATH], DWORD dwNumBin, MultiBINInfo & multiBinInfo, DWORD & dwCheckSum)
{
CFile binFile;
BOOL bRet = TRUE;
dwCheckSum = 0;
multiBinInfo.dwNumRegions = dwNumBin;
//Make sure all the files are valid and can be opened
for(DWORD i = 0; i < dwNumBin; i++)
{
if(!binFile.Open(strBinFiles[i], CFile::modeRead))
{
return FALSE;
}
char header[BIN_HEADER_LENGTH];
if(binFile.Read(header, BIN_HEADER_LENGTH) != BIN_HEADER_LENGTH)
{
bRet = FALSE;
goto CloseAndReturn;
}
if(memcmp(header, "B000FF\x0A", BIN_HEADER_LENGTH))
{
bRet = FALSE;
goto CloseAndReturn;
}
if(binFile.Read((PBYTE)&(multiBinInfo.Region[i].dwRegionStart), sizeof(DWORD)) != sizeof(DWORD))
{
bRet = FALSE;
goto CloseAndReturn;
}
if(binFile.Read((PBYTE)&(multiBinInfo.Region[i].dwRegionLength), sizeof(DWORD)) != sizeof(DWORD))
{
bRet = FALSE;
goto CloseAndReturn;
}
CloseAndReturn:
binFile.Close();
if(bRet == FALSE)
return FALSE;
}
PBYTE pRec = (PBYTE)&(multiBinInfo.Region);
for(i = 0; i < dwNumBin * sizeof(RegionInfo); i++)
{
dwCheckSum += *pRec ++;
}
return TRUE;
}
BOOL CAtlasMgr2Dlg::ParseBinInfo_CE50(char strBinFiles[BL_MAX_BIN_REGIONS][MAX_PATH], DWORD dwNumBin, MultiBINInfo_CE50 & multiBinInfo_ce50, DWORD & dwCheckSum)
{
CFile binFile;
BOOL bRet = TRUE;
dwCheckSum = 0;
multiBinInfo_ce50.dwNumRegions = dwNumBin;
//Make sure all the files are valid and can be opened
for(DWORD i = 0; i < dwNumBin; i++)
{
if(!binFile.Open(strBinFiles[i], CFile::modeRead))
{
return FALSE;
}
char header[BIN_HEADER_LENGTH];
if(binFile.Read(header, BIN_HEADER_LENGTH) != BIN_HEADER_LENGTH)
{
bRet = FALSE;
goto CloseAndReturn;
}
if(memcmp(header, "B000FF\x0A", BIN_HEADER_LENGTH))
{
bRet = FALSE;
goto CloseAndReturn;
}
if(binFile.Read((PBYTE)&(multiBinInfo_ce50.Region[i].dwRegionStart), sizeof(DWORD)) != sizeof(DWORD))
{
bRet = FALSE;
goto CloseAndReturn;
}
if(binFile.Read((PBYTE)&(multiBinInfo_ce50.Region[i].dwRegionLength), sizeof(DWORD)) != sizeof(DWORD))
{
bRet = FALSE;
goto CloseAndReturn;
}
if(binFile.Read((PBYTE)&(multiBinInfo_ce50.Region[i].szFileName), MAX_PATH) != MAX_PATH)
{
bRet = FALSE;
goto CloseAndReturn;
}
CloseAndReturn:
binFile.Close();
if(bRet == FALSE)
return FALSE;
}
PBYTE pRec = (PBYTE)&(multiBinInfo_ce50.Region);
for(i = 0; i < dwNumBin * sizeof(RegionInfo_CE50); i++)
{
dwCheckSum += *pRec ++;
}
return TRUE;
}
BOOL CAtlasMgr2Dlg::DownloadFrame(PBYTE pUsbFrame)
{
if(!AtlasSyncDataBlock())
{
return FALSE;
}
if(!AtlasWriteBlock2Device(pUsbFrame, EBOOT_DATA_FRAME_LENGTH))
{
return FALSE;
}
return TRUE;
}
void CAtlasMgr2Dlg::OnTransportChanged()
{
// TODO: Add your control notification handler code here
UpdateData();
AfxGetApp()->WriteProfileInt("Nboot", "Transport", m_nTransPort);
UpdateUI();
}
void CAtlasMgr2Dlg::OnFlashTypeChanged()
{
// TODO: Add your control notification handler code here
UpdateData();
AfxGetApp()->WriteProfileInt("Nboot", "FlashType", m_nFlashType);
UpdateUI();
}
void CAtlasMgr2Dlg::OnUpdateNandxip()
{
// TODO: Add your control notification handler code here
// TODO: Add your control notification handler code here
CString strNandXIPPath;
CString strInitDir = AfxGetApp()->GetProfileString("NandXIP", "Path", "");
char initFile[_MAX_PATH];
strcpy(initFile, strInitDir);
CFileDialog fileDlg(TRUE,
NULL,
NULL,
OFN_OVERWRITEPROMPT,
"Windows CE NandXIP binary Files (*.bin)|*.bin|All Files (*.*)|*.*||");
//if the initfile is the format like d:\abc\ or \\aaa, we think it is a folder
if(initFile[strlen(initFile)-1] =='\\' || (strlen(initFile) > 2 && initFile[0] == '\\' && initFile[1] == '\\' && !strchr(initFile + 2,'\\')))
{
TRACE("Is a Folder\r\n");
fileDlg.m_ofn.lpstrInitialDir = initFile;
}
else
fileDlg.m_ofn.lpstrFile = initFile;
if(fileDlg.DoModal() == IDOK)
{
strNandXIPPath = fileDlg.GetPathName();
AfxGetApp()->WriteProfileString("NandXIP", "Path", strNandXIPPath);
}
else
return;
if(!AtlasDownloadImage(strNandXIPPath, m_nCs, ATLAS_IMAGE_WINDOWS_NANDXIP))
{
AfxMessageBox("Update NandXIP failed!");
return;
}
/* if(!AtlasUpdateToc())
{
AfxMessageBox("Update NandXIP failed in writing Toc!");
return;
}
*/
AfxMessageBox("Update NandXIP sucessful!");
}
void CAtlasMgr2Dlg::OnUpdateDm()
{
// TODO: Add your control notification handler code here
CString strDMPath;
CString strInitDir = AfxGetApp()->GetProfileString("DM", "Path", "");
char initFile[_MAX_PATH];
strcpy(initFile, strInitDir);
CFileDialog fileDlg(TRUE,
NULL,
NULL,
OFN_OVERWRITEPROMPT,
"Binary Files (*.bin)|*.bin|All Files (*.*)|*.*||");
//if the initfile is the format like d:\abc\ or \\aaa, we think it is a folder
if(initFile[strlen(initFile)-1] =='\\' || (strlen(initFile) > 2 && initFile[0] == '\\' && initFile[1] == '\\' && !strchr(initFile + 2,'\\')))
{
TRACE("Is a Folder\r\n");
fileDlg.m_ofn.lpstrInitialDir = initFile;
}
else
fileDlg.m_ofn.lpstrFile = initFile;
if(fileDlg.DoModal() == IDOK)
{
strDMPath = fileDlg.GetPathName();
AfxGetApp()->WriteProfileString("DM", "Path", strDMPath);
}
else
return;
if(!AtlasDownloadImage(strDMPath, m_nCs, ATLAS_IMAGE_WINDOWS_CE_DM))
{
AfxMessageBox("Update DM failed!");
return;
}
/* if(!AtlasUpdateToc())
{
AfxMessageBox("Update DM failed in writing Toc!");
return;
}
*/
AfxMessageBox("Update DM sucessful!");
}
void CAtlasMgr2Dlg::OnAtlasDbgOutMessage(WPARAM wParam, LPARAM lParam)
{
char * pMsg = (char *) wParam;
ASSERT(pMsg != NULL);
DWORD iInputLen = strlen((char*)pMsg);
ASSERT(iInputLen);
int len = m_outputTerminal.GetWindowTextLength();
DWORD iLimit = m_outputTerminal.GetLimitText();
if(len + iInputLen > iLimit)
{
//remove half text
m_outputTerminal.SetSel(0,iLimit/2);
m_outputTerminal.ReplaceSel("");
}
char *p0, *p1, *p2;
//Find the backspace char
p0 = (char*)pMsg;
do
{
p2 = p1 = strchr(pMsg, 0x08);
int iBS = 0;
if(p2)
{
while(*p2 == 0x08)
{
iBS++;
p2++;
}
*p1 = 0;
}
if(p1 != p0)
{
len = m_outputTerminal.GetWindowTextLength();
m_outputTerminal.SetSel(len,len);
m_outputTerminal.ReplaceSel((const char *)p0);
p0 += strlen(p0);
}
if(iBS)
{
len = m_outputTerminal.GetWindowTextLength();
m_outputTerminal.SetSel(len-iBS,len);
m_outputTerminal.ReplaceSel("");
p0 = p2;
}
}while(*p0);
delete pMsg;
}
void CAtlasMgr2Dlg::OnAtlasDbgInMessage(WPARAM wParam, LPARAM lParam)
{
UpdateData(TRUE);
AtlasWriteDbgMsg((char*)m_strInput.GetBuffer(m_strInput.GetLength()));
m_strInput = "";
UpdateData(FALSE);
}
void CAtlasMgr2Dlg::OnAtlasEnterEboot(WPARAM wParam, LPARAM lParam)
{
TRACE("Enter EBOOT\r\n");
GetDlgItem(IDC_UPDATE_NBOOT)->EnableWindow(FALSE);
if(ATLAS_BOOT_STAGE_NORFLASH_EBOOT == g_atlasdevinfo.dwBootStage)
{
GetDlgItem(IDC_UPDATE_EBOOT)->EnableWindow(TRUE);
GetDlgItem(IDC_UPDATE_DM)->EnableWindow(TRUE);
}
else //it is nand flash eboot. can not update Eboot and Dm in this type eboot.
{
GetDlgItem(IDC_UPDATE_EBOOT)->EnableWindow(FALSE);
GetDlgItem(IDC_UPDATE_DM)->EnableWindow(FALSE);
}
GetDlgItem(IDC_UPDATE_NB0)->EnableWindow(FALSE);
GetDlgItem(IDC_UPDATE_NANDXIP)->EnableWindow(FALSE);
}
void CAtlasMgr2Dlg::OnAtlasDownloadNk5(WPARAM wParam, LPARAM lParam)
{
g_bNK5_0 = TRUE;
GetDlgItem(IDC_UPDATE_NB0)->EnableWindow(TRUE);
GetDlgItem(IDC_UPDATE_EBOOT)->EnableWindow(FALSE);
GetDlgItem(IDC_UPDATE_DM)->EnableWindow(FALSE);
}
void CAtlasMgr2Dlg::OnAtlasDownloadNk4(WPARAM wParam, LPARAM lParam)
{
g_bNK5_0 = FALSE;
GetDlgItem(IDC_UPDATE_NB0)->EnableWindow(TRUE);
GetDlgItem(IDC_UPDATE_EBOOT)->EnableWindow(FALSE);
GetDlgItem(IDC_UPDATE_DM)->EnableWindow(FALSE);
}
void CAtlasMgr2Dlg::OnAtlasDumpNF(WPARAM wParam,LPARAM lParam)
{
GetDlgItem(IDC_DUMP_BLOCKS)->EnableWindow(TRUE);
GetDlgItem(IDC_DUMP_WHOLE_CHIP)->EnableWindow(TRUE);
GetDlgItem(IDC_DUMP_BLOCK_START)->EnableWindow(TRUE);
GetDlgItem(IDC_DUMP_BLOCK_END)->EnableWindow(TRUE);
GetDlgItem(IDC_DUMP_NBOOT)->EnableWindow(TRUE);
GetDlgItem(IDC_DUMP_EBOOT)->EnableWindow(TRUE);
}
void CAtlasMgr2Dlg::OnAtlasGetOneSectorData(WPARAM wParam,LPARAM lParam)
{
}
void CAtlasMgr2Dlg::OnAtlasUSBConnectBroken(WPARAM wParam,LPARAM lParam)
{
if(m_bOpened)
OnOpenDevice();
}
BOOL CAtlasMgr2Dlg::DestroyWindow()
{
// TODO: Add your specialized code here and/or call the base class
if(m_bOpened)
{
AtlasDeinitSystem();
m_bOpened = FALSE;
}
return CDialog::DestroyWindow();
}
bool CAtlasMgr2Dlg::UpdateNBootByJTAGBS(const char *szFile, const char *szNorflashType)
{
//Open File, File not Exist return
FILE* fp = fopen(szFile,"rb");
if(!fp)
{
JTAG_ErrMsg("n-boot image file does not exist!");
return false;
}
long imageSize = 0;
fseek(fp, 0, SEEK_END);
imageSize = ftell(fp);
fseek(fp, 0, SEEK_SET);
unsigned long id;
bool bValidID;
CString szDevInfo;
g_JTAG_GPIO_PRELOAD1_VALUE = m_nGPIOPreLoad1Value;
g_JTAG_GPIO_PRELOAD1_GROUP = m_nGPIOPreLoad1Group;
g_JTAG_GPIO_PRELOAD1_PINS = m_nGPIOPreLoad1Pins;
g_JTAG_GPIO_PRELOAD2_VALUE = m_nGPIOPreLoad2Value;
g_JTAG_GPIO_PRELOAD2_GROUP = m_nGPIOPreLoad2Group;
g_JTAG_GPIO_PRELOAD2_PINS = m_nGPIOPreLoad2Pins;
g_JTAG_GPIO_PRELOAD3_VALUE = m_nGPIOPreLoad3Value;
g_JTAG_GPIO_PRELOAD3_GROUP = m_nGPIOPreLoad3Group;
g_JTAG_GPIO_PRELOAD3_PINS = m_nGPIOPreLoad3Pins;
switch(m_nChipType)
{
case CHIPTYPE_ATLAS:
g_JTAG_CEN_CHIP = JTAG_ATII_CHIP;
Jtag_ATII_InitPin();
break;
case CHIPTYPE_TITAN:
g_JTAG_CEN_CHIP = JTAG_TITAN_CHIP;
Jtag_Titan_InitPin();
break;
default:
JTAG_ErrMsg("Wrong Chip Setting!");
return false;
}
g_JtagPPort = JtagGetValidPPort();
if(0 == g_JtagPPort)
{
fclose(fp);
JTAG_ErrMsg("Can not start JTAG boundary scan! \n \
Please check following items:\n \
(1)parallel port setting\n \
(2)JTAG table connection\n \
(3)Motherboard power\n \
(4)Correct CPLD version\n \
(5)Correct switch setting");
return false;
}
if (ATLAS_FLASHTYPE_NAND == m_nFlashType)
{
NF_Init();
//Read Nand-flash ID
id = NF_ReadID();
szDevInfo.Format("FLASH_ID: 0x%x", id);
GetDlgItem(IDC_DEV_INFO)->SetWindowText(szDevInfo);
bValidID = NF_ValidID(id);
}
else //ATLAS_FLASHTYPE_NOR
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -