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

📄 main.cpp

📁 MTK 最新的flashtool工具的源代码
💻 CPP
📖 第 1 页 / 共 5 页
字号:
            m_ParamListView->Visible = true;
        }
        else{
            m_ParamListView->Visible = false;
        }
    }

	return true;
}

//------------------------------------------------------------------------------
bool TMainForm::FileOpenLinkMapExecute(MultiLoadNode *p_node)
{
    int iLastDel=0;

	if( NULL ==  p_node ) {
		return false;
	}

    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(p_node, OpenLdMapDialog->FileName, true)) {
            iLastDel = p_node->m_scat_file.LastDelimiter("\\:");
            if ( iLastDel > 0)
            {
               ScatBaseDir = p_node->m_scat_file.SubString(1, iLastDel-1 );
               ROMBaseDir = ScatBaseDir;
            }
    	    return true;
    	}
    	else {
        	return false;
    	}
    }
	// do not add "else" !
    return false;
}
//------------------------------------------------------------------------------

void __fastcall TMainForm::FileOpenLinkMapExecute(TObject *Sender)
{
	FileOpenLinkMapExecute(g_pCurNode);
}

//---------------------------------------------------------------------------
void __fastcall TMainForm::FormCreate(TObject *Sender)
{
	unsigned int i;
        int ret;

   	m_pUpdateListLock = new TCriticalSection();

	// init META_DLL
	META_Init(NULL);

	g_pCurNode = &g_DL_HANDLE_NODE;
	DL_HANDLE_T &dl_handle=g_pCurNode->m_dl_handle;

	DL_Create(&dl_handle);
	DA_Create(&g_DA_HANDLE);
	RB_Create(&g_RB_HANDLE);
	AUTH_Create(&g_AUTH_HANDLE);
    DL_CreateList(&g_DL_HANDLE_LIST);

    Timer_Download->Enabled = false;

    br_115200Execute(Sender); // new 2002.3.12

	g_rootLoad = TreeView1->Items->AddChild(NULL,"Multi-Load");   //ray: 20060517
	g_rootLoad->Data = NULL;

    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);
	}

	// load 1st history 
	if( 0 < g_DownloadHistory.size() ) {
		LoadByDownloadSet(*g_DownloadHistory.begin(), g_pCurNode);
	}
	
    g_CompareResProjectId = ini->ReadBool("DOWNLOAD", "compare_resource_project_id", true);
    DL_ResourceProjectIdComparisonSetting(dl_handle, g_CompareResProjectId?_TRUE:_FALSE);
	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);
	}

	g_OperationMethod = ini->ReadInteger("FORM", "OperationMethod", NOR_OPERATION);
	g_FormatValidation = ini->ReadInteger("FORM", "erase_validation", false);
	
	// AUTH file 
	ed_AUTH_File->Text = ini->ReadString("FORM", "AUTH_File", asNull);
	if( 0 < ed_AUTH_File->Text.Length() ) {
		if( S_DONE != (ret=AUTH_Load(g_AUTH_HANDLE, ed_AUTH_File->Text.c_str())) ) {
			if( S_FTHND_HANDLE_BUSY_NOW == ret ) {
				ShowMessage("Program is busy! Can not update setting right now.");
			}
			else {
				ShowMessage(" Load Authentication File \"" + ed_AUTH_File->Text + "\" fail!");
			}
		}
	}

	g_bCheckTgtResourceLayout = ini->ReadBool("DOWNLOAD", "chk_tgt_resource_layout", true);
	g_bCheckECOVer = ini->ReadBool( "DOWNLOAD", "check_bbchip_eco_ver", true );
    g_bAutoLoadResByScat = ini->ReadBool("DOWNLOAD", "auto_load_resource_by_scat", true);
	g_FormatAfterDownloadOption = ini->ReadInteger("DOWNLOAD", "FormatAfterDownloadOption", DISABLE_FORMAT);

////////////////////////////// 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
    } // 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;

	RedrawReadbackList();
	RedrawDownloadList(g_pCurNode, false);

    // show Parameter List View
    DL_INFO dl_info;
    if( !DL_GetInfo(dl_handle, &dl_info) ){
        if( dl_info.m_config.m_security_supported ){
            m_ParamListView->Visible = true;
        }
        else{
            m_ParamListView->Visible = false;
        }
    }


    // 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;
   }
*/
}
//---------------------------------------------------------------------------

void TMainForm::updateStatusBar()
{
     sb_Main->Panels->Items[2]->Text = "COM"+IntToStr(COM_PORT);

     switch ( BAUD_RATE )
     {
        case UART_BAUD_921600:
             sb_Main->Panels->Items[3]->Text = "921600 bps";
             break;
        case UART_BAUD_460800:
             sb_Main->Panels->Items[3]->Text = "460800 bps";
             break;
        case UART_BAUD_230400:
             sb_Main->Panels->Items[3]->Text = "230400 bps";
             break;

        case UART_BAUD_115200:
             sb_Main->Panels->Items[3]->Text = "115200 bps";
             break;
        case UART_BAUD_57600:
             sb_Main->Panels->Items[3]->Text = "57600 bps";
             break;
        case UART_BAUD_38400:
             sb_Main->Panels->Items[3]->Text = "38400 bps";
             break;
        case UART_BAUD_19200:
             sb_Main->Panels->Items[3]->Text = "19200 bps";
             break;
        case UART_BAUD_9600:
             sb_Main->Panels->Items[3]->Text = "9600 bps";
             break;
        default :
             if (DEBUG)
             ShowMessage(" main.cpp : undefined Baud Rate " + IntToStr( COM_PORT));
             break;
     }

	switch(g_OperationMethod) {
	case NOR_OPERATION:
		sb_Main->Panels->Items[1]->Text = "NOR";
		break;
	case NAND_OPERATION:
		sb_Main->Panels->Items[1]->Text = "NAND";
		break;
	case NFB_OPERATION:
		sb_Main->Panels->Items[1]->Text = "NFB";
		break;
	default:
		sb_Main->Panels->Items[1]->Text = "??";
		break;
	}
}

//--------------------------------------------------

void TMainForm::updateMenuItem()
{
	mi_921600->Enabled = true;
	mi_460800->Enabled = true;
	mi_230400->Enabled = true;
	mi_57600->Enabled = true;
	mi_38400->Enabled = true;
	mi_19200->Enabled = true;
	mi_9600->Enabled = true;
   	MCU_52MHz->Enabled = true;
   	MCU_26MHz->Enabled = true;

    // MCU TYPE
    m_AutoBBCHIP->Checked = false;
   	BBCHIP_MT6205->Checked = false;
   	BBCHIP_MT6205B->Checked = false;
   	BBCHIP_MT6218->Checked = false;
   	BBCHIP_MT6208->Checked = false;
   	BBCHIP_MT6218B->Checked = false;
   	BBCHIP_MT6219->Checked = false;
    BBCHIP_MT6217->Checked = false;
    BBCHIP_MT6228->Checked = false;
    BBCHIP_MT6227->Checked = false;
    BBCHIP_MT6229->Checked = false;
    BBCHIP_MT6226->Checked = false;
    BBCHIP_MT6226M->Checked = false;
    BBCHIP_MT6230->Checked = false;
    BBCHIP_MT6225->Checked = false;
    BBCHIP_MT6223->Checked = false;
    BBCHIP_MT6227D->Checked = false;
    switch(g_BBCHIP_TYPE) {
   	case MT6205:
    	BBCHIP_MT6205->Checked = true;
        break;
    case MT6218:
    	BBCHIP_MT6218->Checked = true;
        break;
    case MT6219:
    	BBCHIP_MT6219->Checked = true;
        break;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -