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