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

📄 main.cpp

📁 MTK手机平台下载工具FLASHTOOL界面源码
💻 CPP
📖 第 1 页 / 共 5 页
字号:
			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(asMap, false);
   }

   g_OperationMethod = ini->ReadInteger("FORM", "OperationMethod", NOR_OPERATION);
   g_FormatValidation = ini->ReadInteger("FORM", "erase_validation", false);

   RedrawDownloadList();

//   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=BL_LoadByFilepath(g_BL_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!");
			}
		}
	}

	BL_SetEnableAttr(g_BL_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();
    }

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

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()
{
    if( MT6208 == g_BBCHIP_TYPE ) {
		mi_921600->Enabled = false;
		mi_460800->Enabled = false;
		mi_230400->Enabled = false;
		mi_57600->Enabled = false;
		mi_38400->Enabled = false;
		mi_19200->Enabled = false;
		mi_9600->Enabled = false;
    	MCU_52MHz->Enabled = false;
    	MCU_26MHz->Enabled = false;
    }
    else {
		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
   	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;
    switch(g_BBCHIP_TYPE) {
   	case MT6205:
    	BBCHIP_MT6205->Checked = true;
        break;
    case MT6218:
    	BBCHIP_MT6218->Checked = true;
        break;
    case MT6208:
		BBCHIP_MT6208->Checked = true;
		g_EXT_CLOCK = EXT_13M;
		BAUD_RATE = UART_BAUD_115200;
        break;
    case MT6219:
    	BBCHIP_MT6219->Checked = true;
        break;
    case MT6205B:
    	BBCHIP_MT6205B->Checked = true;
        break;
    case MT6217:
	    BBCHIP_MT6217->Checked = true;
        break;
    case MT6228:
	    BBCHIP_MT6228->Checked = true;
        break;
    case MT6227:
	    BBCHIP_MT6227->Checked = true;
        break;
    case MT6229:
	    BBCHIP_MT6229->Checked = true;
        break;
    case MT6226:
	    BBCHIP_MT6226->Checked = true;
        break;
    case MT6226M:
	    BBCHIP_MT6226M->Checked = true;
        break;
    case MT6218B:

⌨️ 快捷键说明

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