📄 main.cpp
字号:
//------------------------------------------------------------------------------
bool TMainForm::FileOpenLinkMapExecute()
{
int iLastDel=0;
if (ScatBaseDir.Length()>0)
{
OpenLdMapDialog->InitialDir = ScatBaseDir;
OpenLdMapDialog->FileName = "";
}
else if( 0 < ed_LinkMapFile->Text.Length() ) {
iLastDel = ed_LinkMapFile->Text.LastDelimiter("\\:");
if ( iLastDel > 0)
{
OpenLdMapDialog->InitialDir = ed_LinkMapFile->Text.SubString(1, iLastDel-1 );
OpenLdMapDialog->FileName = "";
}
}
if ( OpenLdMapDialog->Execute() )
{
if(Parse(g_DL_HANDLE,OpenLdMapDialog->FileName, true)) {
iLastDel = asMap.LastDelimiter("\\:");
if ( iLastDel > 0)
{
ScatBaseDir = asMap.SubString(1, iLastDel-1 );
ROMBaseDir = ScatBaseDir;
}
return true;
}
else {
return false;
}
}
// do not add "else" !
return false;
}
//------------------------------------------------------------------------------
void __fastcall TMainForm::FileOpenLinkMapExecute(TObject *Sender)
{
if( mi_MultiLoad->Checked ){
ShowMessage("Please un-checked Multi-Load !");
return;
}
FileOpenLinkMapExecute();
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::FormCreate(TObject *Sender)
{
unsigned int i;
int ret;
m_pUpdateListLock = new TCriticalSection();
// init META_DLL
META_Init(NULL);
DL_Create(&g_DL_HANDLE);
DA_Create(&g_DA_HANDLE);
RB_Create(&g_RB_HANDLE);
DL_CreateList(&g_DL_HANDLE_LIST);
lb_DA_File->Height =27;
ed_DA_File->Height = lb_DA_File->Height-2;
lb_LinkMapFile->Height =27;
ed_LinkMapFile->Height = lb_LinkMapFile->Height-2;
ed_DA_File->Top = lb_DA_File->Top;
ed_LinkMapFile->Top = lb_LinkMapFile->Top;
Timer_Download->Enabled = false;
UART_Com = NULL;
br_115200Execute(Sender); // new 2002.3.12
g_rootLoad = TreeView1->Items->AddChild(NULL,"Multi-Load"); //ray: 20060517
TIniFile *ini;
ini = new TIniFile( ChangeFileExt( Application->ExeName, ".INI" ) );
// load download history
for(i=0; i<MAX_DOWNLOAD_HISTORY; i++) {
DownloadSet dl_set;
int file_count=0;
dl_set.m_Scatter = ini->ReadString("DL_HISTORY_"+IntToStr(i), "scatter_file", "");
if(dl_set.m_Scatter.IsEmpty()) {
break;
}
dl_set.m_BootLoader = ini->ReadString("DL_HISTORY_"+IntToStr(i), "bootloader", "");
dl_set.m_BootLoader_Enable = ini->ReadBool("DL_HISTORY_"+IntToStr(i), "bootloader_enable", true);
file_count = ini->ReadInteger("DL_HISTORY_"+IntToStr(i), "file_count", 1);
for(int j=0; j<file_count; j++) {
DownloadBinFile dl_bin;
dl_bin.m_Filepath = ini->ReadString("DL_HISTORY_"+IntToStr(i), "file"+IntToStr(j), "");
dl_bin.m_Enable = ini->ReadBool("DL_HISTORY_"+IntToStr(i), "file"+IntToStr(j)+"_enable", true);
dl_set.m_BinFiles.push_back(dl_bin);
}
g_DownloadHistory.push_back(dl_set);
}
g_CompareResProjectId = ini->ReadBool("DOWNLOAD", "compare_resource_project_id", true);
DL_ResourceProjectIdComparisonSetting(g_DL_HANDLE, g_CompareResProjectId?_TRUE:_FALSE);
g_BBCHIP_TYPE = ini->ReadInteger("FORM", "bb_chip", MT6218B);
g_EXT_CLOCK = ini->ReadInteger("FORM", "ext_clock", EXT_26M);
g_bPullDownGPIO17 = ini->ReadBool("FORM", "pull_down_gpio17", true);
for(i=0; i<2; i++) {
g_EMI_Config[i].m_bAuto = ini->ReadBool( "EMI", "bank"+IntToStr(i)+"_auto", true);
g_EMI_Config[i].m_Config = strtoul(ini->ReadString( "EMI", "bank"+IntToStr(i)+"_cfg", "0x00004102" ).c_str(), NULL, 16);
}
COM_PORT = ini->ReadInteger( "FORM", "com", 1 );
int iBaudRate = ini->ReadInteger( "FORM", "baudrate", 921600 );
g_MaxBromStartCmdRetryCount = ini->ReadInteger( "FORM", "brom_start_cmd_retry_count", DEFAULT_BROM_START_CMD_RETRY_COUNT );
m_BRomStartCmdRetryCount->Caption.printf("BootROM start cmd retry (%d) ...", g_MaxBromStartCmdRetryCount);
switch ( iBaudRate )
{
case 921600:
BAUD_RATE = UART_BAUD_921600;
break;
case 460800: // 2002.3.28 High Speed
BAUD_RATE = UART_BAUD_460800;
break;
case 230400: // 2002.3.28 High Speed
BAUD_RATE = UART_BAUD_230400;
break;
case 115200:
BAUD_RATE = UART_BAUD_115200;
break;
case 57600:
BAUD_RATE = UART_BAUD_57600;
break;
case 38400:
BAUD_RATE = UART_BAUD_38400;
break;
case 19200:
BAUD_RATE = UART_BAUD_19200;
break;
case 9600:
BAUD_RATE = UART_BAUD_9600;
break;
default:
BAUD_RATE = UART_BAUD_19200;
break;
}
AnsiString asNull;
g_asNormalModeDAPath = asBin = ini->ReadString("FORM", "bin", asNull );
g_asTestModeDAPath = ini->ReadString("FORM", "testmode_da_path", g_asNormalModeDAPath);
if ( access( asBin.c_str(), 0 ) != 0 ) {
asBin.SetLength(0);
}
else {
// load DA
OpenReadDA_File(asBin);
}
asMap = ini->ReadString("FORM", "map", asNull );
if ( access( asMap.c_str(), 0 ) != 0 ) {
asMap.SetLength(0);
}
else {
// load scatter
Parse(g_DL_HANDLE,asMap, true); //ray 2006.05.18 : AutoBoot for make IsNFB true
}
g_OperationMethod = ini->ReadInteger("FORM", "OperationMethod", NOR_OPERATION);
g_FormatValidation = ini->ReadInteger("FORM", "erase_validation", false);
RedrawDownloadList(g_DL_HANDLE);
// OpenSingleRomFile->HistoryList->CommaText = ini->ReadString("FORM", "rom_history", asNull);
/////////////////////////////
AnsiString as_bloader_file;
as_bloader_file = ini->ReadString("NFB", "bloader", asNull );
if( 0 < as_bloader_file.Length() ) {
if( FTHND_OK != (ret=DL_BL_LoadByFilepath(g_DL_HANDLE, as_bloader_file.c_str())) ) {
if( FTHND_HANDLE_BUSY_NOW == ret ) {
ShowMessage("Program is busy! Can not update setting right now.");
}
else {
ShowMessage(" Load boot-loader \"" + as_bloader_file + "\" fail!");
}
}
}
DL_BL_SetEnableAttr(g_DL_HANDLE, ini->ReadBool("NFB", "bloader_enable", true)?_TRUE:_FALSE);
g_bCheckTgtResourceLayout = ini->ReadBool("DOWNLOAD", "chk_tgt_resource_layout", true);
g_bCheckECOVer = ini->ReadBool( "DOWNLOAD", "check_bbchip_eco_ver", true );
g_bAutoSelectBBChipType = ini->ReadBool("DOWNLOAD", "auto_sel_bbchip", true);
g_bAutoLoadResByScat = ini->ReadBool("DOWNLOAD", "auto_load_resource_by_scat", true);
g_FormatAfterDownloadOption = ini->ReadInteger("DOWNLOAD", "FormatAfterDownloadOption", DISABLE_FORMAT);
int item_count;
if( NFB_OPERATION == g_OperationMethod ) {
item_count = ListView1->Items->Count-1;
}
else {
item_count = ListView1->Items->Count;
}
if( 0 < item_count )
{
for(int i=0; i<item_count; i++)
{
AnsiString s;
AnsiString name;
int enable;
ROM_INFO rom;
// ROM file name
s = ini->ReadString("DOWNLOAD", "file"+IntToStr(i), asNull );
if( NFB_OPERATION == g_OperationMethod ) {
name = ListView1->Items->Item[i+1]->Caption;
}
else {
name = ListView1->Items->Item[i]->Caption;
}
if( 0<s.Length() && (ret=DL_Rom_LoadByFilepath(g_DL_HANDLE, i, s.c_str()))) {
if( FTHND_SCAT_REGION_IS_OVERLAP == ret ) {
ShowMessage("Failed to load \"" + name + "\" from file \"" + s + "\"!\n\nBecause it is too large and causes region overlap!");
}
else {
ShowMessage("Failed to load \"" + name + "\" from file \"" + s + "\"!");
}
}
BBCHIP_TYPE bbchip_type;
if( g_bAutoSelectBBChipType && !DL_GetBBChipType(g_DL_HANDLE, &bbchip_type) && UNKNOWN_BBCHIP_TYPE!=bbchip_type ) {
g_BBCHIP_TYPE = bbchip_type;
updateMenuItem();
}
enable = ini->ReadInteger("DOWNLOAD", "file"+IntToStr(i)+"_enable", 1);
DL_Rom_SetEnableAttr(g_DL_HANDLE, i, 0!=enable?_TRUE:_FALSE);
}
// check if NFB enabled
_BOOL bIsNFB;
if( FTHND_OK == DL_IsNFB(g_DL_HANDLE, &bIsNFB) ) {
if( _TRUE == bIsNFB ) {
g_OperationMethod = NFB_OPERATION;
}
else {
g_OperationMethod = NOR_OPERATION;
}
}
RedrawDownloadList(g_DL_HANDLE);
}
////////////////////////////// begin read back
int iReadBackCount = ini->ReadInteger("READBACK", "readback_count", 0 );
if ( iReadBackCount > 0)
{
for ( int i=0; i< iReadBackCount; i++)
{
AnsiString as_rb_file;
AnsiString as_readback_addr;
AnsiString as_readback_len;
unsigned long readback_addr;
unsigned long readback_len;
bool enable;
NUTL_ReadFlag_E read_flag;
as_rb_file = ini->ReadString("READBACK", "file"+IntToStr(i), "ROM_"+ IntToStr( i ));
enable = ini->ReadBool("READBACK", "file"+IntToStr(i)+"_enable", true);
read_flag = ini->ReadInteger("READBACK", "file"+IntToStr(i)+"_read_flag", NUTL_READ_PAGE_SPARE);
as_readback_addr = ini->ReadString("READBACK", "startaddr"+IntToStr(i), "0x00000000" );
as_readback_len = ini->ReadString("READBACK", "length"+IntToStr(i), "0x00000100" );
readback_addr = strtoul(as_readback_addr.c_str(), NULL, 16);
readback_len = strtoul(as_readback_len.c_str(), NULL, 16);
if(!RB_Append(g_RB_HANDLE, as_rb_file.c_str(), readback_addr, readback_len)) {
RB_SetEnableAttr(g_RB_HANDLE, i, enable?_TRUE:_FALSE);
RB_SetReadbackFlag(g_RB_HANDLE, i, read_flag);
}
} // for
RedrawReadbackList();
} // if
////////////////////////////// end read back
iFlashItemIndex = ini->ReadInteger( "FORM", "flashitemindex", 2);
g_ulFormatStartAddr = strtoul(ini->ReadString("FORM", "FormatStartAddr", "0x00E00000").c_str(), NULL, 16);
g_ulFormatLength = strtoul(ini->ReadString("FORM", "FormatLength", "0x00200000").c_str(), NULL, 16);
g_ulNandFormatStartAddr = strtoul(ini->ReadString("FORM", "NandFormatStartAddr", "0x00000000").c_str(), NULL, 16);
g_ulNandFormatLength = strtoul(ini->ReadString("FORM", "NandFormatLength", "0x08000000").c_str(), NULL, 16);
g_FormatOption = ini->ReadInteger("FORM", "FormatOption", RESET_TO_FACTORY);
g_PacketLength = ini->ReadInteger( "TRANS_OPTION", "packet_length", 1024 );
g_Baudrate_FullSync_Count = ini->ReadInteger( "TRANS_OPTION", "baudrate_full_sync_count", 1 );
g_SpeedUpBootROMBaudrate = ini->ReadBool( "TRANS_OPTION", "speedup_brom_baudrate", true);
// NFI Setting
g_EMI_NFI_Setting.m_nand_acccon = strtoul(ini->ReadString( "EMI", "nand_acccon", "0x000007FF" ).c_str(), NULL, 16);
// manual DRAM setting
g_EMI_NFI_Setting.m_emi_gen_a = strtoul(ini->ReadString( "EMI", "emi_gen_a", "0x568996a2" ).c_str(), NULL, 16);
g_EMI_NFI_Setting.m_emi_gen_b = strtoul(ini->ReadString( "EMI", "emi_gen_b", "0x5b8a69da" ).c_str(), NULL, 16);
g_EMI_NFI_Setting.m_emi_gen_c = strtoul(ini->ReadString( "EMI", "emi_gen_c", "0x0" ).c_str(), NULL, 16);
g_EMI_NFI_Setting.m_emi_dram_con_i_mode = strtoul(ini->ReadString( "EMI", "emi_dram_con_i_mode", "0x03a90223" ).c_str(), NULL, 16);
g_EMI_NFI_Setting.m_emi_dram_con_i_ext_mode = strtoul(ini->ReadString( "EMI", "emi_dram_con_i_ext_mode", "0x03a94000" ).c_str(), NULL, 16);
g_EMI_NFI_Setting.m_emi_dram_con_k = strtoul(ini->ReadString( "EMI", "emi_dram_con_k", "0x50004564" ).c_str(), NULL, 16);
g_EMI_NFI_Setting.m_emi_dram_con_l = strtoul(ini->ReadString( "EMI", "emi_dram_con_l", "0x04107777" ).c_str(), NULL, 16);
// update packet length
UpdatePacketLength(g_PacketLength);
delete ini;
updateMenuItem();
updateStatusBar();
// show ts_Download tabsheet in first page
ts_Download->Show();
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::View_toolbarExecute(TObject *Sender)
{
/*
if ( tb_Main->Visible )
{
tb_Main->Visible = false;
mi_ToolBar->Checked = false;
}
else
{
tb_Main->Visible = true;
mi_ToolBar->Checked = true;
}
*/
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::View_StatusBarExecute(TObject *Sender)
{
/*
if ( sb_Main->Visible )
{
sb_Main->Visible = false;
mi_StatusBar->Checked = false;
}
else
{
sb_Main->Visible = true;
mi_StatusBar->Checked = true;
}
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -