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

📄 flashdownload.cpp

📁 多路下载工具源代码
💻 CPP
📖 第 1 页 / 共 4 页
字号:
            ft_dl_arg.cb_download_flash_init_arg = this;
            ft_dl_arg.cb_download_flash = cb_download_flash;
            ft_dl_arg.cb_download_flash_arg = this;
            ft_dl_arg.enable_tgt_res_layout_check = MainForm->Get_CheckTgtResLayout()?_TRUE:_FALSE;
            ft_dl_arg.enable_bbchip_eco_check = bCheckECOVersion?_TRUE:_FALSE;
            ft_dl_arg.m_cb_format_statistics = cb_format_statistics;
            ft_dl_arg.m_cb_format_statistics_arg = this;

            if( bFormatNeeded )
            {
                ft_dl_arg.enable_fat_format = _TRUE;
                ft_dl_arg.fmt_fat.m_validation = m_DnParam.nfb_param.b_validation;
                if( MainForm->rbAuto->Checked )
                {
                    ft_dl_arg.fmt_fat.option = FORMAT_FAT_AUTO;
                }
                else
                {
                    ft_dl_arg.fmt_fat.option = FORMAT_FAT_MANUAL;
                    if( OPERATION_NOR == m_DnParam.eOperation )
                    {
		        ft_dl_arg.fmt_fat.fat_begin_addr = MainForm->Get_Format_FAT_begin_address();
                        ft_dl_arg.fmt_fat.fat_length = MainForm->Get_Format_FAT_length();
    	            }
    	            else
                    {
		        ft_dl_arg.fmt_fat.fat_begin_addr = m_DnParam.nfb_param.ui_nand_fat_begin_addr;
	        	ft_dl_arg.fmt_fat.fat_length = m_DnParam.nfb_param.ui_nand_fat_length;
                    }
                }
                ft_dl_arg.cb_format_report_init = cb_format_report_init;
                ft_dl_arg.cb_format_report_init_arg = this;
                ft_dl_arg.cb_format_report = cb_format_report;
                ft_dl_arg.cb_format_report_arg = this;
            }
            else
            {
                ft_dl_arg.enable_fat_format = _FALSE;
                ft_dl_arg.cb_format_report_init = NULL;
                ft_dl_arg.cb_format_report_init_arg = NULL;
                ft_dl_arg.cb_format_report = NULL;
                ft_dl_arg.cb_format_report_arg = NULL;
            }

            if( OPERATION_NFB == m_DnParam.eOperation )
            {
                // for NFB bloader
                ft_dl_arg.m_nfb_enable = _TRUE;
               // ft_dl_arg.m_nfb_option.m_bl_handle = m_pDnParam->bl_handle; //check
                ft_dl_arg.m_cb_download_bloader_init = ::cb_download_bloader_init;
                ft_dl_arg.m_cb_download_bloader_init_arg = this;
                ft_dl_arg.m_cb_download_bloader = ::cb_download_bloader;
                ft_dl_arg.m_cb_download_bloader_arg = this;
            }
            else
            {
                ft_dl_arg.m_nfb_enable = _FALSE;
                ft_dl_arg.m_cb_download_bloader_init = NULL;
                ft_dl_arg.m_cb_download_bloader_init_arg = NULL;
                ft_dl_arg.m_cb_download_bloader = NULL;
                ft_dl_arg.m_cb_download_bloader_arg = NULL;
            }

#ifndef SERVICE_CENTER
            if( ( MainForm->rbResetToFactory->Checked && DOWNLOAD_ROM_AND_FORMAT_INDEX == MainForm->cbType->ItemIndex ) ||
                ( MainForm->rbResetToFactory->Checked && FORMAT_INDEX == MainForm->cbType->ItemIndex )
              )
            {
                // disable format
	        ft_dl_arg.enable_fat_format = _FALSE;
                ft_dl_arg.fmt_fat.option = FORMAT_FAT_AUTO;
	      //	ft_dl_arg.fmt_fat.fat_begin_addr = MainForm->Get_Format_FAT_begin_address();
              //  ft_dl_arg.fmt_fat.fat_length = MainForm->Get_Format_FAT_length();
                // enable watchdog
	        ft_dl_arg.enable_wdt_timeout = _TRUE;
    	        ft_dl_arg.ms_wdt_timeout_interval = 1500;
                stopflag[i]=0;

            }
            else
#endif            
            {
                ft_dl_arg.enable_wdt_timeout = _FALSE;
            }

            SyncStartDownLoad();
            if ( this->Terminated )
            {
                return;
            }

            if( m_Baseband_chip_type != UNKNOWN_BBCHIP_TYPE )
            {
                ret = FlashDownload( &com, &ft_arg, &ft_dl_arg, &stopflag[i], &m_da_report);
            }
            else
            {
                ret = AutoBoot_FlashDownload(&com, &ft_arg, &ft_dl_arg, &stopflag[i], &m_da_report);
            }
        }
        else if( MainForm->Get_FlashToolFunction() == FLASHTOOL_FORMAT &&
                 MainForm->rbResetToFactory->Checked == false)// format
        {
            SyncStartFormat();
            FLASHTOOL_FORMAT_ARG	ft_fmt_arg;

            if( OPERATION_NOR == m_DnParam.eOperation )
            {
                ft_fmt_arg.format_addr = MainForm->Get_Format_FAT_begin_address();
                ft_fmt_arg.format_length = MainForm->Get_Format_FAT_length();
            }
            else
            {
                ft_fmt_arg.format_addr = m_DnParam.nfb_param.ui_nand_fat_begin_addr;
                ft_fmt_arg.format_length = m_DnParam.nfb_param.ui_nand_fat_length;
            }

            ft_fmt_arg.cb_format_report_init = cb_format_report_init;
            ft_fmt_arg.cb_format_report_init_arg = this;
            ft_fmt_arg.cb_format_report = cb_format_report;
            ft_fmt_arg.cb_format_report_arg = this;
            ft_fmt_arg.m_cb_format_statistics = cb_format_statistics;
	    ft_fmt_arg.m_cb_format_statistics_arg = this;
	    ft_fmt_arg.m_erase_flag = NUTL_ERASE;
	    ft_fmt_arg.m_validation = m_DnParam.nfb_param.b_validation;

            if( m_Baseband_chip_type != UNKNOWN_BBCHIP_TYPE )
            {
		ret = FlashFormat(&com, &ft_arg, &ft_fmt_arg, &stopflag[i], &m_da_report);
            }
            else
            {
                ret = AutoBoot_FlashFormat(&com, &ft_arg, &ft_fmt_arg, &stopflag[i], &m_da_report);
            }
        }
#ifndef SERVICE_CENTER
        if( DOWNLOAD_ROM_AND_FORMAT_INDEX == MainForm->cbType->ItemIndex  &&
            MainForm->rbResetToFactory->Checked                           &&
            ret==0
          ) // download & reset to factory default
        {
            SyncStartFormat();
            if( ! Enter_META_Mode( ft_arg.bbchip, ft_arg.ext_clock ) )
            {
               SyncUpdateMainFormAfterFinishErr();

               return;
            }
            SyncUpdateMainFormAfterFinishOk();
        }
        else if(  FORMAT_INDEX == MainForm->cbType->ItemIndex &&
                  MainForm->rbResetToFactory->Checked) // reset to factory default only
        {
            SyncStartFormat();
            if( ! Enter_META_Mode( m_Baseband_chip_type, m_External_clock_type ) )
            {
               SyncUpdateMainFormAfterFinishErr();

               return;
            }
            SyncUpdateMainFormAfterFinishOk();
        }
        else
#endif        
        {
            SetEvent(Flash_Download_Event[i]);
            if (ret != 0)
            {
           // UpdateResultError();
                SyncUpdateResultError();
                if ( this->Terminated )
                {
                //this->OnTerminate = neByUser;
                    return;
                }
            }
            else
            {
            //UpdateResultOk();
                SyncUpdateResultOk();
                if ( this->Terminated )
                {
                //this->OnTerminate = neByUser;
                    return;
                }
            }
        }

        return;
}

//==============================================================================
bool _fastcall TBOOT1::Enter_META_Mode( const BBCHIP_TYPE  bbchip, const EXT_CLOCK  ext_clock )
{
    static META_COMM_BAUDRATE  meta_com_baudrate[11]=
    {
        META_BAUD115200,
        META_BAUD230400,
        META_BAUD460800,
        META_BAUD921600,
        META_BAUD_END,
        META_BAUD_END,
        META_BAUD_END,
        META_BAUD_END,
        META_BAUD_END,
        META_BAUD_END,
        META_BAUD_END
    };

    META_RESULT         meta_ret;
    META_Connect_Req	meta_req;
    META_Connect_Report	meta_report;
    int i;

    i = m_com_port.number - m_TheFirstComNo;
    
   
    meta_req.com_port = m_com_port.number;
    meta_req.bbchip = bbchip;
    meta_req.ext_clock = ext_clock;
    memcpy(meta_req.baudrate, meta_com_baudrate, sizeof(meta_req.baudrate));
    meta_req.flowctrl = META_SW_FLOWCTRL;
    meta_req.ms_connect_timeout = 40000;
    meta_req.ms_boot_timeout = 5000;
    meta_req.boot_meta_arg.m_cb_in_brom_stage = ::cb_boot_meta_in_brom_stage;
    meta_req.boot_meta_arg.m_cb_in_brom_stage_arg = this;

    SyncResetFactoryDefaultProgress();

   // asMsg = "  Reset to factory default progressing ... ";
   // Synchronize(ShowMsg);

   // if( (meta_ret = META_GetAvailableHandle( &meta_handle )) != META_SUCCESS )
   // {
   //      SyncStopFactoryDefaultProgress();
   //      asMsg = "META_GetAvailableHandle(): ERROR: " + AnsiString(META_GetErrorString(meta_ret));
   //      Synchronize(ShowMsg);
   //      return false;
   //
   // }

   // SyncUpdateMETAHandle();
   // if( (meta_ret = META_Init_r( meta_handle, ErrorHandler )) != META_SUCCESS )
   // {
   //      SyncStopFactoryDefaultProgress();
   //      asMsg = "META_Init_r(): ERROR: " + AnsiString(META_GetErrorString(meta_ret));
   //      Synchronize(ShowMsg);
    //     return false;
    //
   // }

    if( (meta_ret = META_ConnectWithTarget_r( m_DnParam.i_meta_handle, &meta_req, &stopflag[i], &meta_report)) != META_SUCCESS )
    {
        //META_Deinit_r( &meta_handle);

        SyncStopFactoryDefaultProgress();
        asMsg = "META_ConnectWithTarget_r(): ERROR: " + AnsiString(META_GetErrorString(meta_ret));
        Synchronize(ShowMsg);
        return false;
    }

    if( (meta_ret=META_NVRAM_ResetToFactoryDefault_r( m_DnParam.i_meta_handle, 40000 ) ) != META_SUCCESS )
    {

        META_DisconnectWithTarget_r( m_DnParam.i_meta_handle );
       // META_Deinit_r( &meta_handle);

        SyncStopFactoryDefaultProgress();

        asMsg = "META_NVRAM_ResetToFactoryDefault(): ERROR: " + AnsiString(META_GetErrorString(meta_ret));
        Synchronize(ShowMsg);
        return false;
    }

    META_DisconnectWithTarget_r( m_DnParam.i_meta_handle );

   // META_Deinit_r( &meta_handle);

    asMsg = "Reset to factory default Succesfully ";
    Synchronize(ShowMsg);

    SyncFinishFactoryDefaultProgress();
    return true;
}

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
void _fastcall TBOOT1::ResetFactoryDefaultProgress()
{
#if 0
   // MainForm->CGauge1->ForeColor = progress_forecolor;
   // MainForm->CGauge1->Progress = 0;
    int i;
    i = m_com_port.number - m_TheFirstComNo;
    //i = m_BootThrdArg.hComPort.number - g_TheFirstComNo;
       // MainForm->COMPercentageArray[i]->Caption = prefix + "0%";
       //MainForm->COMPercentageArray[i]->Caption = prefix;
   // m_as_prefix = "FR ";
   // MainForm->Set_COMPercentageCaption( i, "FR " );
   SetPbComProgress( i, 0 );
   MainForm->SetPbComForeColor( i, clGreen );
#endif
   // MainForm->SetPbComProgress( i, 0 );
}

//--------------------------------------------------------------------------
void _fastcall TBOOT1::SyncResetFactoryDefaultProgress()
{
   	Synchronize(ResetFactoryDefaultProgress);
}

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
void _fastcall TBOOT1::StartFactoryDefaultProgress()
{

    int i;

    i = m_com_port.number - m_TheFirstComNo;

    MainForm->Set_StartFactoryDefaultFlag( i, true );
    MainForm->SetPbComForeColor( i, clGreen );
    MainForm->SetPbComProgress(i, 0);
}

//--------------------------------------------------------------------------
void _fastcall TBOOT1::SyncStartFactoryDefaultProgress()
{
   	Synchronize(StartFactoryDefaultProgress);
}

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
void _fastcall TBOOT1::StopFactoryDefaultProgress()
{

    int i;

    i = m_com_port.number - m_TheFirstComNo;

    MainForm->Set_StartFactoryDefaultFlag( i, false );
}

//--------------------------------------------------------------------------
void _fastcall TBOOT1::SyncStopFactoryDefaultProgress()
{
    Synchronize(StopFactoryDefaultProgress);
}

//--------------------------------------------------------------------------
void _fastcall TBOOT1::FinishFactoryDefaultProgress()
{
   
    int i;

    i = m_com_port.number - m_TheFirstComNo;
    MainForm->SetPbComProgress( i, 100 );
   // MainForm->Disable_FDTimer(i);
}

//--------------------------------------------------------------------------
void _fastcall TBOOT1::SyncFinishFactoryDefaultProgress()
{
    Synchronize(FinishFactoryDefaultProgress);
}


⌨️ 快捷键说明

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