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

📄 flashdownload.cpp_bak

📁 多串口下载手机软件的软件
💻 CPP_BAK
📖 第 1 页 / 共 2 页
字号:

//---------------------------------------------------------------------------

//#include <clx.h>
#pragma hdrstop
#include "Multiport_Common.h"

#ifndef _MD_MSG_
#include "MD_msg.h"
#endif

#include "FlashDownLoad.h"
#include "MultiPortFlashDownloadTool.h"

#ifndef _FACTORY_COMMON_H_
#include "factory_common.h"
#endif

#pragma package(smart_init)

bool isShowNoFormatInfo = false;
bool isShowFileNotLoaded = false;
BBCHIP_TYPE gbb_chip_type;
int boot_stop = 0;
HANDLE Flash_Download_Event[MAX_SUPPORT_PORT_NUM];
int    stopflag[MAX_SUPPORT_PORT_NUM];
DA_REPORT_T   da_report;
extern bool isStopTrigger[MAX_SUPPORT_PORT_NUM];

// access
extern HANDLE hSemaphore;
//=============================================================================
////////////////////////   call back   ////////////////////////////////////////
//=============================================================================
static int __stdcall cb_download_da_init(void *usr_arg)
{

	TBOOT1 *t=(TBOOT1 *)usr_arg;
        int i;

        i = t->m_com_port.number - m_TheFirstComNo;
        MainForm->DownLoadTimeSec[i]=0;

        // access
        if( MainForm->Get_EnableFactoryDatabaseLog() )
        {
            TDateTime datetime;
            TDateTime date = datetime.CurrentDate();
            TDateTime time = datetime.CurrentTime();
            sTime     stime;
            time.DecodeTime( &stime.hour, &stime.min, &stime.sec, &stime.msec);
            MainForm->SetDnDate( i, date );
            MainForm->SetDnStartTime( i, time );
            MainForm->SetDnStartsTime( i, stime );
        }
        //MainForm->TimerCOMArray[i]->Enabled = false;
        //MainForm->TimerCOMArray[i]->Interval = 1000;
        //MainForm->TimerCOMArray[i]->Enabled = true;


        MainForm->pbCOMArray[i]->ForeColor = clRed; 
	t->progress_percentage = 0;
	t->prefix = "DA ";
	t->SyncInitProgress();

        return 0;
}

//---------------------------------------------------------------------------
static int __stdcall cb_download_da(unsigned char percent, unsigned int sent_bytes, unsigned int total_bytes, void *usr_arg)
{

	TBOOT1 *t=(TBOOT1 *)usr_arg;

	t->progress_percentage = percent;
	t->prefix = "DA ";
	t->SyncUpdateProgress();

        return 0;
}

//---------------------------------------------------------------------------
static int __stdcall cb_download_flash_init(void *usr_arg)
{

	TBOOT1 *t=(TBOOT1 *)usr_arg;
        int i;

	t->progress_percentage = 0;
	t->prefix = "DL ";
	t->SyncInitProgress();

        return 0;
}

//---------------------------------------------------------------------------
static int __stdcall cb_download_flash(unsigned char percent, unsigned int sent_bytes, unsigned int total_bytes, void *usr_arg)
{

	TBOOT1 *t=(TBOOT1 *)usr_arg;

	t->progress_percentage = percent;
	t->prefix = "DL ";
	t->SyncUpdateProgress();
       // if (percent <= 5)
        {
             int i = t->m_com_port.number - m_TheFirstComNo;
             MainForm->pbCOMArray[i]->ForeColor = clBlue;  // VCL

        }

        return 0;
}

//==============================================================================
static int __stdcall cb_format_report_init(void *usr_arg)
{
    TBOOT1 *t=(TBOOT1 *)usr_arg;
    int i;

    t->progress_percentage = 0;
    t->prefix = "FR ";
    t->SyncInitProgress();

    return 0;
}

//------------------------------------------------------------------------------
static int __stdcall cb_format_report(unsigned char percent, void *usr_arg)
{
    TBOOT1 *t=(TBOOT1 *)usr_arg;

    t->progress_percentage = percent;
    t->prefix = "FR ";
    t->SyncUpdateProgress();
   // if (percent <= 50)
    {
        int i = t->m_com_port.number - m_TheFirstComNo;
        MainForm->pbCOMArray[i]->ForeColor = clGreen;   // VCL
    }

    return 0;
}

//-----------------------------------------------------------------------------------
static int __stdcall cb_before_process(const DA_REPORT_T  *p_da_report, void *usr_arg)
{
#if 0
    TBOOT1 *t=(TBOOT1 *)usr_arg;
    int i;
    i = t->m_com_port.number - m_TheFirstComNo;
    //-----------------------------------------------------------------------
    // to do: set stopflag[i]=BOOT_STOP when flash type does not match
    // check flash type here
    if( p_da_report->/* flash type match */ )
    {
		....
    }
    else
    {
        /* not match */
        stopflag[i] = BOOT_STOP;
    }


#endif
    return 0;  
}

//------------------------------------------------------------------------------
static int __stdcall cb_in_brom_stage(unsigned int brom_handle, HANDLE hCOM, void *usr_arg) {

	int ret;
	unsigned short	value16;
        TBOOT1 *t=(TBOOT1 *)usr_arg;

	if( MainForm->isPullDownGPIO17 && gbb_chip_type == MT6218B )
        {
		// configure GPIO17 mode to GPIO 
		value16 = 0x000C;
		ret = Brom_Write16Cmd(brom_handle, hCOM, (0x80120000+0x0120+0x08)/*GPIO_MODE3_CLR*/, &value16, 1);

		// configure GPIO17 direction as output
		value16 = 0x0002;
		ret = Brom_Write16Cmd(brom_handle, hCOM, (0x80120000+0x0010+0x04)/*GPIO_DIR2_SET*/, &value16, 1);

		// pull down GPIO17 to disable vibrator
		value16 = 0x0002;
		ret = Brom_Write16Cmd(brom_handle, hCOM, (0x80120000+0x00a0+0x08)/*GPIO_DOUT2_CLR*/, &value16, 1);
	}

    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";
//      }
//==============================================================================
__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)
        : TThread(CreateSuspended)
{
    hPostMsgDestHandle = hMsgHandle;
    m_com_port = ComPortIndex;
    Baseband_chip_type = bb_chip;
    gbb_chip_type = bb_chip;
    External_clock_type = ext_clock;
    bCheckECOVersion = check_eco_ver;
    UART_baud_rate = baud_rate;
    bFormatNeeded = b_format_needed;
}

//---------------------------------------------------------------------------
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::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::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(g_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(g_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(g_DL_HANDLE, ft_dl_arg.rom_info.index+1, &rom_info);

⌨️ 快捷键说明

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