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

📄 flashdownload.cpp

📁 多路下载工具源代码
💻 CPP
📖 第 1 页 / 共 4 页
字号:

    return 0;
}
//   Important: Methods and properties of objects in CLX can only be
//   used in a method called using Synchronize, for example:
//
//      Synchronize(UpdateCaption);
//
//   where UpdateCaption could look like:
//
//      void __fastcall TBOOT1::UpdateCaption()
//      {
//        Form1->Caption = "Updated in a thread";
//      }


//   Important: Methods and properties of objects in CLX can only be
//   used in a method called using Synchronize, for example:
//
//      Synchronize(UpdateCaption);
//
//   where UpdateCaption could look like:
//
//      void __fastcall TBOOT1::UpdateCaption()
//      {
//        Form1->Caption = "Updated in a thread";
//      }
//==============================================================================
__fastcall TBOOT1::TBOOT1(bool CreateSuspended, HANDLE hMsgHandle, COM_PORT_HANDLE ComPortIndex, BBCHIP_TYPE bb_chip,
                         EXT_CLOCK ext_clock, bool check_eco_ver, UART_BAUDRATE   baud_rate, bool b_format_needed, DN_PARAM_S dn_param)
        : TThread(CreateSuspended)
{
    hPostMsgDestHandle = hMsgHandle;
    m_com_port = ComPortIndex;
    m_Baseband_chip_type = bb_chip;
    gbb_chip_type = bb_chip;
    m_External_clock_type = ext_clock;
    bCheckECOVersion = check_eco_ver;
    UART_baud_rate = baud_rate;
    bFormatNeeded = b_format_needed;
    m_DnParam     = dn_param;
}

//---------------------------------------------------------------------------
void _fastcall TBOOT1::ShowMsg()
{
    //ShowMessage( asMsg );
    MainForm->sbMPDT->Panels->Items[0]->Text = asMsg;
}

//---------------------------------------------------------------------------
void _fastcall TBOOT1::StartDownLoad()
{

        int i;
        i = m_com_port.number - m_TheFirstComNo;
        //MainForm->COMPercentageArray[i]->Caption = "Start";
        MainForm->Set_COMPercentageCaption(i, "START");
        MainForm->Set_shpCOMColor(i, clBlue);

}

//---------------------------------------------------------------------------
void _fastcall TBOOT1::SyncStartDownLoad()
{
	Synchronize(StartDownLoad);
}

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
void _fastcall TBOOT1::StartFormat()
{
    int i = m_com_port.number - m_TheFirstComNo;

    MainForm->Set_COMPercentageCaption(i, "START");
    MainForm->Set_shpCOMColor(i, clBlue);

}

//---------------------------------------------------------------------------
void _fastcall TBOOT1::SyncStartFormat()
{
    Synchronize(StartFormat);
}

//---------------------------------------------------------------------------
void _fastcall TBOOT1::InitProgress()
{

        int i;
        i = m_com_port.number - m_TheFirstComNo;
       // MainForm->COMPercentageArray[i]->Caption = prefix + "0%";
       //MainForm->COMPercentageArray[i]->Caption = prefix;
       MainForm->Set_COMPercentageCaption( i, prefix );

}

//---------------------------------------------------------------------------
void _fastcall TBOOT1::SyncInitProgress()
{
	Synchronize(InitProgress);
}

//---------------------------------------------------------------------------
void _fastcall TBOOT1::UpdateProgress()
{
        AnsiString s;
        int i;

       // s = prefix + IntToStr(progress_percentage) + "%";
        s = prefix; 
        i = m_com_port.number - m_TheFirstComNo;
       // MainForm->COMPercentageArray[i]->Caption = s;
        MainForm->Set_COMPercentageCaption( i, s );
        MainForm->pbCOMArray[i]->Progress = progress_percentage;

}

//---------------------------------------------------------------------------
void _fastcall TBOOT1::SyncUpdateProgress()
{
	Synchronize(UpdateProgress);
}

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//void _fastcall TBOOT1::UpdateMETAHandle()
//{
//
////    int i;
//
//    i = m_com_port.number - m_TheFirstComNo;
//    if( meta_handle >= 0 )
//        MainForm->Set_METAHanlde( i, meta_handle );
//}

//---------------------------------------------------------------------------
void _fastcall TBOOT1::SyncUpdateMETAHandle()
{
	Synchronize(UpdateMETAHandle);
}

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
void _fastcall TBOOT1::UpdateResultError()
{
    AnsiString	s1, s2;
    AnsiString s_error;
    int i;
    s_error = prefix + "ERROR";

    i = m_com_port.number - m_TheFirstComNo;
    if( isStopTrigger[i] )
    {  s_error = prefix + "STOP"; };
    
    MainForm->COMPercentageArray[i]->Caption = s_error;
    MainForm->Set_COMPercentageCaption( i, s_error );

                    
    MainForm->TimerCOMArray[i]->Enabled = false;
    MainForm->btnCOMStartArray[i]->Enabled = true;
    MainForm->cbCOMArray[i]->Enabled = true;
    MainForm->cbAutoPollingArray[i]->Enabled = true;
    MainForm->Set_shpCOMColor( i, clRed );
    MainForm->DownloadStatus[i] = DOWNLOAD_STATUS_NOTRUNNING;

    // access
    if( MainForm->Get_EnableFactoryDatabaseLog() )
    {
        MainForm->SetPassFail( i, TEST_RESULT_FAIL);
        MainForm->SetFailReason( i, ret );
        WaitForSingleObject( hSemaphore, 5000 );
        MainForm->AddDnResultToAccess( i );
    }

    switch( FT_RET(ret) )
    {
    	case FT_SKIP_AUTO_FORMAT_FAT:
             ROM_INFO	rom_info;
             DL_Rom_GetInfo(m_da_report.m_dl_handle, 0, &rom_info);
             asMsg.printf("[Warning] Skip FAT auto format because of one of the following reasons.\n\n"
						 " 1. \"%s\" might not contain FAT range information! \n"
						 " 2. Target's flash id doesn't correspond to \"%s\" 's flash id!", rom_info.name, rom_info.name);
             Synchronize(ShowMsg);
        break;
#if 0
        case FT_OK:
	        if( (FLASHTOOL_DOWNLOAD==g_flashtool_function && RESET_TO_FACTORY==g_FormatOption) ||
	        	(FLASHTOOL_FORMAT==g_flashtool_function && RESET_TO_FACTORY==g_TempFormatOption)
	        ) {
	        	if(!EnterMETA()) {
					// stop timer
					Synchronize(StopTimer);
					return;
				}
			}
			// show ok form and stop timer
			Synchronize(ShowOK_Form);
			break;
#endif
        case FT_COM_PORT_OPEN_ERR:
            // asMsg.printf("[COM] Open COM%d error!", m_com_port.number);
            // Synchronize(ShowMsg);
        break;

        case FT_COM_PORT_SET_TIMEOUT_ERR:
            // asMsg.printf("[COM] Fail to set COM%d timeout!", m_com_port.number);
           //  Synchronize(ShowMsg);
        break;

        case FT_DA_HANDLE_ERROR:
             switch( FTHND_RET(ret) )
             {
                  case FTHND_FILE_IS_NOT_LOADED:
                       s1 = ft_arg.da_info.filepath;
                       asMsg = "[DA_HANDLE] DA(\"" + s1 + "\") is not loaded yet!\n\nPlease load it before download.";
                       Synchronize(ShowMsg);
                  break;

                  default:
                       asMsg = "[DA_HANDLE] Error: ret=0x" + IntToHex(ret, 6);
                       Synchronize(ShowMsg);
                  break;
             }
        break;

        case FT_DL_HANDLE_ERROR:
             switch( FTHND_RET(ret) )
             {
                 case FTHND_LIST_IS_EMPTY:
                      asMsg = "[DL_HANDLE] Download list is empty or all disabled!\n\nPlease select at least one entry.";
                      Synchronize(ShowMsg);
                 break;

                 case FTHND_FILE_IS_NOT_LOADED:
                      s1 = ft_dl_arg.rom_info.name;
                      asMsg = "[DL_HANDLE] " + s1 + " is not loaded yet!\n\nPlease load it before download.";
                      Synchronize(ShowMsg);
                 break;

                 case FTHND_RES_NO_MATCH_IN_JUMPTABLE:
                 {
                      char *p_filename=NULL;
                      char path[512];
                      AnsiString  filename;
                      GetFullPathName(ft_dl_arg.rom_info.filepath, sizeof(path), path, &p_filename);
                      if( NULL!=p_filename && (strlen(ft_dl_arg.rom_info.filepath)>(strlen(p_filename)+12)) )
                      {
                          filename.printf("%.12s...\\%s", path, p_filename);
                      }
                      else
                      {
                          filename = ft_dl_arg.rom_info.filepath;
                      }
                      asMsg.printf("[DL_HANDLE]  %s (\"%s\") doesn't match any entry in jump table!", ft_dl_arg.rom_info.name, filename.c_str());
                      Synchronize(ShowMsg);
                 }
                 break;

                 case FTHND_RES_BASE_ADDR_NOT_MATCH:
                 {
                      char *p_filename=NULL;
                      char path[512];
                      AnsiString  filename;
                      MTK_Resource	res_info;
                      GetFullPathName(ft_dl_arg.rom_info.filepath, sizeof(path), path, &p_filename);
                      if( NULL!=p_filename && (strlen(ft_dl_arg.rom_info.filepath)>(strlen(p_filename)+12)) )
                      {
                          filename.printf("%.12s...\\%s", path, p_filename);
                      }
                      else
                      {
                          filename = ft_dl_arg.rom_info.filepath;
                      }
                      DL_Rom_GetResInfo(m_da_report.m_dl_handle, ft_dl_arg.rom_info.index, &res_info);
                      asMsg.printf("[DL_HANDLE]  %s (\"%s\"): The begin_addr(0x%08X) doesn't match resource base_addr(0x%08X)!", ft_dl_arg.rom_info.name, filename.c_str(), ft_dl_arg.rom_info.begin_addr, res_info.m_base_addr);
                      Synchronize(ShowMsg);
                 }
                 break;

                 case FTHND_SCAT_REGION_IS_OVERLAP:
                 {
                      ROM_INFO	rom_info;
                      DL_Rom_GetInfo(m_da_report.m_dl_handle, ft_dl_arg.rom_info.index+1, &rom_info);
                      asMsg.printf("[DL_HANDLE]  %s file overlap the next file %s !", ft_dl_arg.rom_info.name, rom_info.name);
                      Synchronize(ShowMsg);
                 }
                 break;

                 case FTHND_RES_IS_NOT_DOWNLOAD_WITH_JUMPTABLE:
                      asMsg = "[DL_HANDLE] Resources and jump table are not selected to download together!";
                      Synchronize(ShowMsg);
                 break;

                 case FTHND_RES_DOWNLOAD_SELECT_INCOMPLETE:
                      // enable unselect files
                      for(int i=0; i<ft_dl_arg.required_resource_count; i++)
                      {
                	  DL_Rom_SetEnableAttr(m_da_report.m_dl_handle, ft_dl_arg.required_resource[i], _TRUE);
                      }
                     // Synchronize( MainForm->RedrawLVList );
                      asMsg = "[DL_HANDLE] The resources you selected to download are incomplete, please download again!";
                      Synchronize(ShowMsg);
                 break;

                 case FTHND_JUMPTABLE_INCONSISTENT_WITH_SCAT:
                      asMsg = "[DL_HANDLE] jump table is different from scatter!";
                      Synchronize(ShowMsg);
                 break;

                 case FTHND_JUMPTABLE_INCORRECT_FORMAT:
                      asMsg = "[DL_HANDLE] jump table is not loaded yet! \nBecause its content is not a correct jump table format.";
                      Synchronize(ShowMsg);
                 break;

                 default:
                      asMsg = "[DL_HANDLE] Error: ret=0x" + IntToHex(ret, 6);
                      Synchronize(ShowMsg);
                 break;
             }
             break;

             case FT_RB_HANDLE_ERROR:
                  switch(FTHND_RET(ret))
                  {
			case FTHND_LIST_IS_EMPTY:
				asMsg = "[RB_HANDLE] Readback list is empty!\n\nPlease add at least one readback entry.";
				Synchronize(ShowMsg);
                        break;

			default:
				asMsg = "[RB_HANDLE] Error: ret=0x" + IntToHex(ret, 6);
				Synchronize(ShowMsg);
                        break;
                  }
             break;

             case FT_BROM_ERROR:
                  switch(BROM_RET(ret))
                  {
			case BROM_CMD_START_FAIL:
			       //	asMsg = "[BROM] Can not pass bootrom start command! Possibly target power up too early.";
			       //	Synchronize(ShowMsg);
                        break;

			case BROM_DOWNLOAD_DA_FAIL:
				asMsg = "[BROM] Fail to download DA to internal SRAM of target.";
				Synchronize(ShowMsg);
                        break;

			case BROM_BBCHIP_HW_VER_INCORRECT:
				asMsg.printf("[BROM] Target baseband chip is inconsistent with %s!!!", ft_arg.p_bbchip_name);
				Synchronize(ShowMsg);
                        break;

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

			case BROM_FAIL_TO_GET_BBCHIP_HW_VER:
				asMsg = "[BROM] Fail to get target baseband chip H/W and DSP version!";
				Synchronize(ShowMsg);
                        break;

			case BROM_UNKNOWN_TGT_BBCHIP:
				asMsg = "[BROM] Unknown target baseband chip type!";
				Synchronize(ShowMsg);
                        break;

⌨️ 快捷键说明

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