📄 flashdownload.cpp
字号:
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 + -