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

📄 flashdownload.cpp

📁 多串口下载手机软件的软件
💻 CPP
📖 第 1 页 / 共 3 页
字号:
			asMsg.printf("DA version is incorrect! DA_v%d.%d was expired, expected DA_v%d.%d.", da_report.da_major_ver, da_report.da_minor_ver, da_report.expected_da_major_ver, da_report.expected_da_minor_ver);
			Synchronize(ShowMsg);
                break;

		case FT_DA_UNKNOWN_FLASH_DEVICE:
			asMsg = "Unknown flash device!";
			Synchronize(ShowMsg);
                break;

		case FT_DA_SET_EXT_CLOCK_FAIL:
			asMsg = "DA_EXT_CLOCK_CMD command fail!";
			Synchronize(ShowMsg);
                break;

		case FT_DA_SET_BBCHIP_TYPE_FAIL:
			asMsg = "DA_BBCHIP_TYPE_CMD command fail!";
			Synchronize(ShowMsg);
                break;

		case FT_DA_CHANGE_BAUDRATE_FAIL:
        	{
                     unsigned int baudrate_tbl[] = {	0, 921600, 460800, 230400, 115200, 57600, 38400, 19200, 9600, 4800, 2400, 1200, 300, 110 };
                     asMsg = "Fail to change baudrate to " + IntToStr(baudrate_tbl[com.baudrate]) + ".";
    	        }
                Synchronize(ShowMsg);
    		break;

		case FT_DA_SET_DOWNLOAD_BLOCK_FAIL:
			asMsg = "DA_MEM_CMD command fail! Possibly the following reason.\n\n 1. Download block exceeds target flash size.\n 2. Download block start address is not WORD alignment.\n 3. Download block length is not multiple of WORD.";
			Synchronize(ShowMsg);
                break;

		case FT_DA_DOWNLOAD_FAIL:
			asMsg = "Download to flash fail! C:\\BROM_DLL.log is created and record more detail information.";
			Synchronize(ShowMsg);
                break;

		case FT_DA_READBACK_FAIL:
			asMsg = "Readback from flash fail! C:\\BROM_DLL.log is created and record more detail information.";
			Synchronize(ShowMsg);
                break;

		case FT_DA_FORMAT_FAIL:
			asMsg = "Format flash error! Possibly given a wrong format range, please check your format setting.";
			Synchronize(ShowMsg);
                break;

		case FT_DA_FINISH_CMD_FAIL:
			asMsg = "DA_FINISH_CMD command fail!";
			Synchronize(ShowMsg);
                break;

		case FT_DA_SOC_CHECK_FAIL:
			asMsg = "SOC verification fail!";
			Synchronize(ShowMsg);
                break;

		case FT_DA_BBCHIP_DSP_VER_INCORRECT:
			asMsg.printf("Target baseband chip DSP version is inconsistent with %s !!!", ft_arg.p_bbchip_name);
			Synchronize(ShowMsg);
                break;

		default:
			asMsg = "Error: ret=0x" + IntToHex(ret, 6);
			Synchronize(ShowMsg);
                break;
	}
#if 0
    if( (ret&0x000000FF) == FT_SKIP_AUTO_FORMAT_FAT )
    {
        if( isShowNoFormatInfo == false )
        {
            isShowNoFormatInfo = true;
            AnsiString as_msg;
            as_msg = "  No format FAT information in *.bin file, please choose manual format FAT range";
            ShowMessage(as_msg);

        }
    }
    else if( (ret&0x000000FF) == FT_DL_HANDLE_ERROR )
    {
        if( (ret&0x0000FF00) == FTHND_FILE_IS_NOT_LOADED )
        {
            if( isShowFileNotLoaded == false )
            {
                isShowFileNotLoaded = true;
                AnsiString as_msg;
                as_msg = "  Download type and scatter are not match";;
                ShowMessage(as_msg);
                PostMessage(
                             hPostMsgDestHandle,
                             WM_MD_SELECT_DOWNLOAD_TYPE_FAIL,
                             0,
                             0
                           );
            }
        }
    }
#endif
}

//---------------------------------------------------------------------------
void _fastcall TBOOT1::SyncUpdateResultError()
{
	Synchronize(UpdateResultError);
}

//---------------------------------------------------------------------------
void _fastcall TBOOT1::UpdateResultOk()
{
    AnsiString s_ok;
    int i;

    s_ok = prefix + "OK";

    i = m_com_port.number - m_TheFirstComNo;

    // access
    if( MainForm->Get_EnableFactoryDatabaseLog() )
    {
        TDateTime datetime;
        TDateTime time = datetime.CurrentTime();
        sTime     stime;
        time.DecodeTime( &stime.hour, &stime.min, &stime.sec, &stime.msec);
        MainForm->SetPassFail( i, TEST_RESULT_PASS);
        MainForm->SetFailReason( i, 0 );
        MainForm->SetDnEndsTime( i, stime );
        MainForm->SetDnTime( i );
        MainForm->SetThroughput( i );
        WaitForSingleObject( hSemaphore, 5000 );
        MainForm->AddDnResultToAccess( i );
    }

    MainForm->COMPercentageArray[i]->Caption = s_ok;
    MainForm->Set_COMPercentageCaption( i, s_ok );
    MainForm->TimerCOMArray[i]->Enabled = false;
    MainForm->btnCOMStartArray[i]->Enabled = true;
    MainForm->cbCOMArray[i]->Enabled = true;
    MainForm->cbAutoPollingArray[i]->Enabled = true;
    MainForm->Set_shpCOMColor( i, clGreen );
    MainForm->DownloadStatus[i] = DOWNLOAD_STATUS_NOTRUNNING;
    PostMessage(
                     hPostMsgDestHandle,
                     WM_MD_DOWNLOAD_SUCCESSFUL,
                     i,
                     0
                    );

}

//---------------------------------------------------------------------------
void _fastcall TBOOT1::SyncUpdateResultOk()
{
	Synchronize(UpdateResultOk);
}


//==============================================================================
void __fastcall TBOOT1::Execute()
{
        int i;

       // COM_PORT_SETTING        com;
        //FLASHTOOL_ARG	ft_arg;


        i = m_com_port.number - m_TheFirstComNo;

        com.com.number = m_com_port.number;
        com.baudrate = UART_baud_rate;
        com.ms_read_timeout = COM_DEFAULT_TIMEOUT;
    	com.ms_write_timeout = COM_DEFAULT_TIMEOUT;


        // FLASHTOOL_ARG setting
        ft_arg.bbchip = Baseband_chip_type;
        ft_arg.ext_clock = External_clock_type;
        ft_arg.p_bank0_mem_cfg = NULL;
        ft_arg.p_bank1_mem_cfg = NULL;
        ft_arg.da_handle = g_DA_HANDLE;
        ft_arg.cb_download_da_init = cb_download_da_init;
        ft_arg.cb_download_da_init_arg = this;
        ft_arg.cb_download_da = cb_download_da;
        ft_arg.cb_download_da_arg = this;
        ft_arg.cb_before_process = cb_before_process;
        ft_arg.cb_before_process_arg = this;
        ft_arg.cb_set_high_speed_baudrate = NULL;
        ft_arg.cb_set_high_speed_baudrate_arg = NULL;
        ft_arg.ms_boot_timeout = BOOT_INFINITE;
        ft_arg.max_start_cmd_retry_count = 2;
        ft_arg.cb_in_brom_stage = cb_in_brom_stage;
	ft_arg.cb_in_brom_stage_arg = NULL;
	ft_arg.m_baudrate_full_sync_count = 0;

        if( MainForm->Get_FlashToolFunction() == FLASHTOOL_DOWNLOAD )
        {
            //FLASHTOOL_DOWNLOAD_ARG settings
            //
            ft_dl_arg.dl_handle = g_DL_HANDLE;
            ft_dl_arg.download_accuracy = ACCURACY_AUTO;
            ft_dl_arg.cb_download_flash_init = cb_download_flash_init;
            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;
            if( bFormatNeeded )
            {
                ft_dl_arg.enable_fat_format = _TRUE;
                if( MainForm->rbAuto->Checked )
                {
                    ft_dl_arg.fmt_fat.option = FORMAT_FAT_AUTO;
                }
                else
                {
                    ft_dl_arg.fmt_fat.option = FORMAT_FAT_MANUAL;
                    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();
                }
                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;
            }

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

            if( Baseband_chip_type != UNKNOWN_BBCHIP_TYPE )
            {
                ret = FlashDownload( &com, &ft_arg, &ft_dl_arg, &stopflag[i], &da_report);
            }
            else
            {
                ret = AutoBoot_FlashDownload(&com, &ft_arg, &ft_dl_arg, &stopflag[i], &da_report);
            }
        }
        else if( MainForm->Get_FlashToolFunction() == FLASHTOOL_FORMAT )// format
        {
            FLASHTOOL_FORMAT_ARG	ft_fmt_arg;
            ft_fmt_arg.format_addr = MainForm->Get_Format_FAT_begin_address();
            ft_fmt_arg.format_length = MainForm->Get_Format_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;

            if( Baseband_chip_type != UNKNOWN_BBCHIP_TYPE )
            {
		ret = FlashFormat(&com, &ft_arg, &ft_fmt_arg, &stopflag[i], &da_report);
            }
            else
            {
                ret = AutoBoot_FlashFormat(&com, &ft_arg, &ft_fmt_arg, &stopflag[i], &da_report);
            }
        }

        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;
}
//==============================================================================

⌨️ 快捷键说明

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