⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 atlasmgr2dlg.cpp

📁 cell phone source code
💻 CPP
📖 第 1 页 / 共 4 页
字号:
			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 + -