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

📄 tboot_1.cpp

📁 MTK 最新的flashtool工具的源代码
💻 CPP
📖 第 1 页 / 共 4 页
字号:
    }
    else if( FLASHTOOL_PARAMETER == g_flashtool_function ){
//***FLASHTOOL_PARAMETER===================================================    	

        if( MainForm->cb_otp->Checked ){
            if( MainForm->rb_otp_Write->Checked && g_ParamDownloadConfig.m_otp_enable){
            	pm_arg.m_param.m_otp_enable = g_ParamDownloadConfig.m_otp_enable;
    	    	pm_arg.m_param.m_otp_op = g_ParamDownloadConfig.m_otp_op;
        		pm_arg.m_param.m_otp.m_addr = g_ParamDownloadConfig.m_otp.m_addr;
        		pm_arg.m_param.m_otp.m_data = g_ParamDownloadConfig.m_otp.m_data;
    	    	pm_arg.m_param.m_otp.m_len = g_ParamDownloadConfig.m_otp.m_len;
            }else if( MainForm->rb_otp_Read->Checked && g_ParamReadbackConfig.m_otp_enable){
            	pm_arg.m_param.m_otp_enable = g_ParamReadbackConfig.m_otp_enable;
    	    	pm_arg.m_param.m_otp.m_addr = g_ParamReadbackConfig.m_otp.m_addr;
        		pm_arg.m_param.m_otp.m_data = g_ParamReadbackConfig.m_otp.m_data;
        		pm_arg.m_param.m_otp.m_len = g_ParamReadbackConfig.m_otp.m_len;
            }
        }

        if( MainForm->cb_sec_setting->Checked ){
            if( MainForm->rb_sec_setting_Write->Checked && g_ParamDownloadConfig.m_ft_cfg_enable){
    		    pm_arg.m_param.m_ft_cfg_op = PARAM_WRITE;
	       		pm_arg.m_param.m_ft_cfg_enable = g_ParamDownloadConfig.m_ft_cfg_enable;
    		    pm_arg.m_param.m_ft_cfg.m_security_cfg.m_uint32 = g_ParamDownloadConfig.m_ft_cfg.m_security_cfg.m_uint32;
            }
        }

        if( MainForm->cb_sec_ro->Checked ){
            if( MainForm->rb_sec_ro_Write->Checked && g_ParamDownloadConfig.m_sec_ro_enable){
    		    pm_arg.m_param.m_sec_ro_op = PARAM_WRITE;
    		    pm_arg.m_param.m_sec_ro_enable = g_ParamDownloadConfig.m_sec_ro_enable;
        		pm_arg.m_param.m_sec_ro.m_data = g_ParamDownloadConfig.m_sec_ro.m_data;
    	    	pm_arg.m_param.m_sec_ro.m_len = g_ParamDownloadConfig.m_sec_ro.m_len;
            }
            else if( MainForm->rb_sec_ro_Read->Checked && g_ParamReadbackConfig.m_sec_ro_enable){
    		    pm_arg.m_param.m_sec_ro_op = PARAM_READ;
    		    pm_arg.m_param.m_sec_ro_enable = g_ParamReadbackConfig.m_sec_ro_enable;
    	    	pm_arg.m_param.m_sec_ro.m_data = g_ParamReadbackConfig.m_sec_ro.m_data;
        		pm_arg.m_param.m_sec_ro.m_len = g_ParamReadbackConfig.m_sec_ro.m_len;
            }
        }

        if( MainForm->cb_cust->Checked ){
            if( MainForm->rb_cust_Write->Checked && g_ParamDownloadConfig.m_cust_para_enable){
    		    pm_arg.m_param.m_cust_para_op = PARAM_WRITE;
                pm_arg.m_param.m_cust_para_enable = g_ParamDownloadConfig.m_cust_para_enable;
    	    	pm_arg.m_param.m_cust_para.m_data = g_ParamDownloadConfig.m_cust_para.m_data;
        		pm_arg.m_param.m_cust_para.m_len = g_ParamDownloadConfig.m_cust_para.m_len;
            }
            else if( MainForm->rb_cust_Read->Checked && g_ParamReadbackConfig.m_cust_para_enable){
    		    pm_arg.m_param.m_cust_para_op = PARAM_READ;
                pm_arg.m_param.m_cust_para_enable = g_ParamReadbackConfig.m_cust_para_enable;
        		pm_arg.m_param.m_cust_para.m_data = g_ParamReadbackConfig.m_cust_para.m_data;
    	    	pm_arg.m_param.m_cust_para.m_len = g_ParamReadbackConfig.m_cust_para.m_len;
            }
        }

		pm_arg.m_cb_param_process_init		= cb_update_param_init;
		pm_arg.m_cb_param_process_init_arg	= this;
		pm_arg.m_cb_param_process			= cb_update_param;
		pm_arg.m_cb_param_process_arg		= this;

		ret = FlashParameter(&com, &arg, &result, &pm_arg, &pm_result, &g_stopflag);
		if( S_DONE != ret ) {
			// stop timer
			Synchronize(StopTimer);
		}
		else {
	        if( MainForm->cb_otp->Checked && MainForm->rb_otp_Read->Checked && g_ParamReadbackConfig.m_otp_enable){
				if(MainForm->SaveFile(g_ParamReadbackConfig.m_otp_filepath.c_str(), pm_arg.m_param.m_otp.m_data,pm_arg.m_param.m_otp.m_len)) {
					asMsg.printf("Fail to open \"%s\"!", g_ParamReadbackConfig.m_otp_filepath.c_str());
					Synchronize(ShowMsg);
		        }
	        }
	
	        if( MainForm->cb_sec_ro->Checked && MainForm->rb_sec_ro_Read->Checked && g_ParamReadbackConfig.m_sec_ro_enable){
	            if(MainForm->SaveFile(g_ParamReadbackConfig.m_sec_ro_filepath.c_str(),pm_arg.m_param.m_sec_ro.m_data,pm_arg.m_param.m_sec_ro.m_len)) {
					asMsg.printf("Fail to open \"%s\"!", g_ParamReadbackConfig.m_sec_ro_filepath.c_str());
					Synchronize(ShowMsg);
	        	}
	        }
	
	        if( MainForm->cb_cust->Checked && MainForm->rb_cust_Read->Checked && g_ParamReadbackConfig.m_cust_para_enable){
	            if(MainForm->SaveFile(g_ParamReadbackConfig.m_cust_para_filepath.c_str(),pm_arg.m_param.m_cust_para.m_data,pm_arg.m_param.m_cust_para.m_len)) {
					asMsg.printf("Fail to open \"%s\"!", g_ParamReadbackConfig.m_cust_para_filepath.c_str());
					Synchronize(ShowMsg);
	        	}
			}
		}
    }
    else if( FLASHTOOL_API == g_flashtool_function ){
//***FLASHTOOL_PARAMETER===================================================    	    	
    	
        // fill COM_PORT_SETTING
        com_port = COM_PORT;

        // fill FLASHTOOL_CONNECT_ARG
        cn_arg.m_com_ms_read_timeout = g_COM_Read_Timeout;
    	cn_arg.m_com_ms_write_timeout = g_COM_Write_Timeout;

        // fill FLASHTOOL_BOOT_ARG
        cn_arg.m_boot_arg.m_bbchip_type = g_BBCHIP_TYPE;
        cn_arg.m_boot_arg.m_ext_clock = g_EXT_CLOCK;
        cn_arg.m_boot_arg.m_ms_boot_timeout = BOOT_INFINITE;
        cn_arg.m_boot_arg.m_max_start_cmd_retry_count = g_MaxBromStartCmdRetryCount;
        cn_arg.m_boot_arg.m_p_bank0_mem_cfg = g_EMI_Config[0].m_bAuto?NULL:&(g_EMI_Config[0].m_Config);
        cn_arg.m_boot_arg.m_p_bank1_mem_cfg = g_EMI_Config[1].m_bAuto?NULL:&(g_EMI_Config[1].m_Config);
        if(g_bSkipBootRom)
        	cn_arg.m_boot_arg.m_da_handle = NULL;
        else
        	cn_arg.m_boot_arg.m_da_handle = g_DA_HANDLE;
        cn_arg.m_boot_arg.m_cb_download_da_init = cb_download_da_init;
        cn_arg.m_boot_arg.m_cb_download_da_init_arg = this;
        cn_arg.m_boot_arg.m_cb_download_da = cb_download_da;
        cn_arg.m_boot_arg.m_cb_download_da_arg = this;
    	cn_arg.m_boot_arg.m_cb_in_brom_stage = cb_in_brom_stage;
	    cn_arg.m_boot_arg.m_cb_in_brom_stage_arg = &(cn_result.m_da_report.m_bbchip_type);
        cn_arg.m_boot_arg.m_speedup_brom_baudrate = g_SpeedUpBootROMBaudrate?_TRUE:_FALSE;
	    // WM_BROM_READY_TO_POWER_ON_TGT
    	cn_arg.m_boot_arg.m_ready_power_on_wnd_handle	= NULL;
	    cn_arg.m_boot_arg.m_ready_power_on_wparam		= NULL;
    	cn_arg.m_boot_arg.m_ready_power_on_lparam		= NULL;
	    // serial link authentication arg
    	cn_arg.m_boot_arg.m_auth_handle = g_AUTH_HANDLE;
	    cn_arg.m_boot_arg.m_cb_sla_challenge         = SLA_Challenge;
    	cn_arg.m_boot_arg.m_cb_sla_challenge_arg     = this;
	    cn_arg.m_boot_arg.m_cb_sla_challenge_end     = SLA_Challenge_END;
    	cn_arg.m_boot_arg.m_cb_sla_challenge_end_arg = this;

        cn_arg.m_cb_security_pre_process_notify = cb_security_pre_process_notify;
        cn_arg.m_cb_security_pre_process_notify_arg = this;

       	cn_arg.m_nor_chip_select[0] = CS0;
        cn_arg.m_nor_chip_select[1] = CS_WITH_DECODER;
       	cn_arg.m_nand_chip_select = g_bNFI_SelectCS1?CS1:CS0;
	    cn_arg.m_nand_acccon = g_EMI_NFI_Setting.m_nand_acccon;

        //Step 1. Connect
        ret = FlashTool_Connect(com_port,&cn_arg,&cn_result,&g_stopflag,&g_ft_handle);
        if( S_DONE != ret ) {
			// stop timer
			Synchronize(StopTimer);
	    }
        else {
	        //Step 2.
    	    ret = RepairTool_GetExceptionRecord(g_ft_handle,MainForm->ed_ExceptionLog->Text.c_str(),MainForm->ed_SaveExceptionLog->Text.c_str());
	        if( S_DONE != ret ) {
				// stop timer
				Synchronize(StopTimer);
		    }

        	//Step N. Disconnect
	        FlashTool_Disconnect(&g_ft_handle);
        }
    }
    else if( FLASHTOOL_ROMWRITER == g_flashtool_function ){
//***FLASHTOOL_ROMWRITER===================================================   
    	
        // fill COM_PORT_SETTING
        com_port = COM_PORT;

        // fill FLASHTOOL_CONNECT_ARG
        cn_arg.m_com_ms_read_timeout = g_COM_Read_Timeout;
    	cn_arg.m_com_ms_write_timeout = g_COM_Write_Timeout;

        // fill FLASHTOOL_BOOT_ARG
        cn_arg.m_boot_arg.m_bbchip_type = g_BBCHIP_TYPE;
        cn_arg.m_boot_arg.m_ext_clock = g_EXT_CLOCK;
        cn_arg.m_boot_arg.m_ms_boot_timeout = BOOT_INFINITE;
        cn_arg.m_boot_arg.m_max_start_cmd_retry_count = g_MaxBromStartCmdRetryCount;
        cn_arg.m_boot_arg.m_p_bank0_mem_cfg = g_EMI_Config[0].m_bAuto?NULL:&(g_EMI_Config[0].m_Config);
        cn_arg.m_boot_arg.m_p_bank1_mem_cfg = g_EMI_Config[1].m_bAuto?NULL:&(g_EMI_Config[1].m_Config);
        if(g_bSkipBootRom)
        	cn_arg.m_boot_arg.m_da_handle = NULL;
        else
        	cn_arg.m_boot_arg.m_da_handle = g_DA_HANDLE;
        cn_arg.m_boot_arg.m_cb_download_da_init = cb_download_da_init;
        cn_arg.m_boot_arg.m_cb_download_da_init_arg = this;
        cn_arg.m_boot_arg.m_cb_download_da = cb_download_da;
        cn_arg.m_boot_arg.m_cb_download_da_arg = this;
    	cn_arg.m_boot_arg.m_cb_in_brom_stage = cb_in_brom_stage;
	    cn_arg.m_boot_arg.m_cb_in_brom_stage_arg = &(cn_result.m_da_report.m_bbchip_type);
        cn_arg.m_boot_arg.m_speedup_brom_baudrate = g_SpeedUpBootROMBaudrate?_TRUE:_FALSE;
	    // WM_BROM_READY_TO_POWER_ON_TGT
    	cn_arg.m_boot_arg.m_ready_power_on_wnd_handle	= NULL;
	    cn_arg.m_boot_arg.m_ready_power_on_wparam		= NULL;
    	cn_arg.m_boot_arg.m_ready_power_on_lparam		= NULL;
	    // serial link authentication arg
    	cn_arg.m_boot_arg.m_auth_handle = g_AUTH_HANDLE;
	    cn_arg.m_boot_arg.m_cb_sla_challenge         = SLA_Challenge;
    	cn_arg.m_boot_arg.m_cb_sla_challenge_arg     = this;
	    cn_arg.m_boot_arg.m_cb_sla_challenge_end     = SLA_Challenge_END;
    	cn_arg.m_boot_arg.m_cb_sla_challenge_end_arg = this;

        cn_arg.m_cb_security_pre_process_notify = cb_security_pre_process_notify;
        cn_arg.m_cb_security_pre_process_notify_arg = this;

       	cn_arg.m_nor_chip_select[0] = CS0;
        cn_arg.m_nor_chip_select[1] = CS_WITH_DECODER;
       	cn_arg.m_nand_chip_select = g_bNFI_SelectCS1?CS1:CS0;
	    cn_arg.m_nand_acccon = g_EMI_NFI_Setting.m_nand_acccon;

        pgs_arg.m_cb_progress_init = cb_progress_init;
        pgs_arg.m_cb_progress_init_arg = this;
        pgs_arg.m_cb_progress = cb_progress;
        pgs_arg.m_cb_progress_arg = this;

        cb_arg.m_baudrate = BAUD_RATE;
        cb_arg.m_baudrate_full_sync_count = g_Baudrate_FullSync_Count;

        //Step 1. Connect
        ret = FlashTool_Connect(com_port,&cn_arg,&cn_result,&g_stopflag,&g_ft_handle);
        if( S_DONE != ret ) {
			// stop timer
			Synchronize(StopTimer);
	    }
        else {
            //Step 2.
            ret = FlashTool_ChangeBaudrate(g_ft_handle,&cb_arg);
	        if( S_DONE != ret ) {
				// stop timer
				Synchronize(StopTimer);
		    }

	        //Step 3.
            ret = FlashTool_ExtractNFB(g_ft_handle,MainForm->ed_SaveExtractNFB->Text.c_str(), &pgs_arg);
	        if( S_DONE != ret ) {
				// stop timer
				Synchronize(StopTimer);
		    }

        	//Step N. Disconnect
	        FlashTool_Disconnect(&g_ft_handle);
        }
    }


	if( BOOT_STOP == g_stopflag ) {
		return;
	}

//***FLASHTOOL_DONE===================================================   

    switch(ret) {
	case S_DONE:
	        if( (FLASHTOOL_DOWNLOAD==g_flashtool_function && RESET_TO_FACTORY==g_FormatAfterDownloadOption) ) {
	        	if(!EnterMETA(result.m_da_report.m_bbchip_type, result.m_da_report.m_ext_clock)) {
					// stop timer
					Synchronize(StopTimer);
					return;
			}
		}
	        else if( (FLASHTOOL_FORMAT==g_flashtool_function && RESET_TO_FACTORY==g_FormatOption) ) {
	        	if(!EnterMETA(result.m_da_report.m_bbchip_type, result.m_da_report.m_ext_clock)) {
					// stop timer
					Synchronize(StopTimer);
					return;
			}
		}

                if(g_bAutomation && (FLASHTOOL_DOWNLOAD==g_flashtool_function) ){
                        break;
                }

       		// show ok form and stop timer
                Synchronize(ShowOK_Form);
		break;
        // enable unselect files
	default:

                if(g_bAutomation && (FLASHTOOL_DOWNLOAD==g_flashtool_function) ){
                        break;
                }

		if( S_SECURITY_ERROR_BEGIN <= ret ) {
			asMsg.printf("Error: %s(%d) \n\nMSP Error Code: 0x%02X", StatusToString(ret), ret, result.m_da_report.m_msp_err_code);
		}
		else {
			asMsg.printf("Error: %s(%d) ", StatusToString(ret), ret);
		}
		Synchronize(ShowMsg);
		break;
    }
}

void __fastcall tboot_1::DebugDA()
{
	DWORD	ret;
	HANDLE  hCOM = INVALID_HANDLE_VALUE;
    com_sentry	s(hCOM, COM_PORT);

    if( INVALID_HANDLE_VALUE == hCOM ) {
		// stop timer
		Synchronize(StopTimer);
		asMsg = "Open COM" + IntToStr(COM_PORT) + "failed!";
		Synchronize(ShowMsg);
    	return;
	}

    BOOT_FLASHTOOL_ARG	boot_ft;
	BOOT_RESULT			boot_result;
	boot_ft.m_bbchip_type = g_BBCHIP_TYPE;
	boot_ft.m_ext_clock = g_EXT_CLOCK;
	boot_ft.m_ms_boot_timeout = BOOT_INFINITE;
    boot_ft.m_max_start_cmd_retry_count = g_MaxBromStartCmdRetryCount;
    boot_ft.m_p_bank0_mem_cfg = g_EMI_Config[0].m_bAuto?NULL:&(g_EMI_Config[0].m_Config);
    boot_ft.m_p_bank1_mem_cfg = g_EMI_Config[1].m_bAuto?NULL:&(g_EMI_Config[1].m_Config);
    boot_ft.m_da_handle = g_DA_HANDLE;
    boot_ft.m_cb_download_da_init = cb_download_da_init;
    boot_ft.m_cb_download_da_init_arg = this;
    boot_ft.m_cb_download_da = cb_download_da;
    boot_ft.m_cb_download_da_arg = this;
	boot_ft.m_cb_in_brom_stage = cb_in_brom_stage;
	boot_ft.m_cb_in_brom_stage_arg = &boot_result.m_bbchip_type;
    boot_ft.m_speedup_brom_baudrate = g_SpeedUpBootROMBaudrate?_TRUE:_FALSE;
	// WM_BROM_READY_TO_POWER_ON_TGT 
	boot_ft.m_ready_power_on_wnd_handle = NULL;
	boot_ft.m_ready_power_on_wparam		= NULL;
	boot_ft.m_ready_power_on_lparam		= NULL;
	// serial link authentication arg 
	boot_ft.m_auth_handle = g_AUTH_HANDLE;
	boot_ft.m_cb_sla_challenge         = SLA_Challenge;
	boot_ft.m_cb_sla_challenge_arg     = this;
	boot_ft.m_cb_sla_challenge_end     = SLA_Challenge_END;
	boot_ft.m_cb_sla_challenge_end_arg = this;

   	ret = Boot_FlashTool(hCOM, &boot_ft, &boot_result, &g_stopflag);
	if( S_DONE != ret ) {
		if( S_SECURITY_ERROR_BEGIN <= ret ) {
			asMsg.printf("Error: %s(%d) \n\nMSP Error Code: 0x%02X", StatusToString(ret), ret, result.m_da_report.m_msp_err_code);
		}
		else {
			asMsg.printf("Error: %s(%d) ", StatusToString(ret), ret);
		}
		// stop timer
		Synchronize(StopTimer);
		if( BOOT_STOP != g_stopflag ) {
			Synchronize(ShowMsg);
		}
		return;
	}

	COMMTIMEOUTS	timeouts;

	timeouts.ReadIntervalTimeout         = 0;
	timeouts.ReadTotalTimeoutMultiplier  = 1;
	timeouts.ReadTotalTimeoutConstant    = 1000;
	timeouts.WriteTotalTimeoutMultiplier = 1;
	timeouts.WriteTotalTimeoutConstant   = 1000;

	if(!::SetCommTimeouts(hCOM, &timeouts)) {
		// stop timer
		Synchronize(StopTimer);
		ret = GetLastError();
		asMsg = "SetCommTimeouts(): Error: ret=" + IntToStr(ret);
		Synchronize(ShowMsg);
		return;
	}

	bool bIsUpToDate=false;
	m_RecvString = "";
	while( g_bDebugDA && (BOOT_STOP!=g_stopflag) ) {
		unsigned char ch;
		bool bResult;
		unsigned long readlen;

		ch = 0;
		readlen = 0;
		bResult = ReadFile( hCOM, &ch, 1, &readlen, NULL );
		if( true==bResult && 1==readlen ) {
			AnsiString  str;
			m_RecvChar = ch;
			str.printf("%c", ch);
			m_RecvString += str;
			if( 0 == (m_RecvString.Length()%1024) ) {
				Synchronize(UpdateDebugDAWindow);
				bIsUpToDate = true;
			}
			else {
				bIsUpToDate = false;
			}
    	}
    	else if(!bIsUpToDate) {
			Synchronize(UpdateDebugDAWindow);
			bIsUpToDate = true;
    	}
	}

	// stop timer
	Synchronize(StopTimer);
	return;
}
/////////////////////////////////////////////////////////////////////////


⌨️ 快捷键说明

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