📄 form_multiload.cpp
字号:
/*****************************************************************************
* Copyright Statement:
* --------------------
* This software is protected by Copyright and the information contained
* herein is confidential. The software may not be copied and the information
* contained herein may not be used or disclosed except with the written
* permission of MediaTek Inc. (C) 2005
*
* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
*
* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
*
* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
*
*****************************************************************************/
/*****************************************************************************
*
* Filename:
* ---------
* form_MultiLoad.cpp
*
* Project:
* --------
* Multiport download
*
* Description:
* ------------
* Multi-load form source file
*
* Author:
* -------
* Andy Ueng (mtk00490)
*
*============================================================================
* HISTORY
* Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
*------------------------------------------------------------------------------
* $Revision$
* $Modtime$
* $Log$
*
*------------------------------------------------------------------------------
* Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
*============================================================================
****************************************************************************/
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
// common
#ifndef _MULTIPORT_COMMON_H_
#include "multiport_common.h"
#endif
// form
#ifndef _MUTLIPORTFLASHDOWNLOADTOOL_H_
#include "MultiPortFlashDownloadTool.h"
#endif
#include "form_MultiLoad.h"
#ifndef _FLASHTOOL_HANDLE_H_
#include "flashtool_handle.h"
#endif
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TfrmMultiLoad *frmMultiLoad;
//extern struct DL_HANDLE *g_DL_HANDLE;
extern struct DA_HANDLE *g_DA_HANDLE;
//---------------------------------------------------------------------------
__fastcall TfrmMultiLoad::TfrmMultiLoad(TComponent* Owner)
: TForm(Owner)
{
m_lv[0] = lv1;
m_lv[1] = lv2;
m_lv[2] = lv3;
m_lv[3] = lv4;
m_lblScatFileName[0] = lblScatFileName1;
m_lblScatFileName[1] = lblScatFileName2;
m_lblScatFileName[2] = lblScatFileName3;
m_lblScatFileName[3] = lblScatFileName4;
m_dlgOpenScatter[0] = dlgOpenScatter1;
m_dlgOpenScatter[1] = dlgOpenScatter2;
m_dlgOpenScatter[2] = dlgOpenScatter3;
m_dlgOpenScatter[3] = dlgOpenScatter4;
m_dlgOpenROM[0] = dlgOpenROM1;
m_dlgOpenROM[1] = dlgOpenROM2;
m_dlgOpenROM[2] = dlgOpenROM3;
m_dlgOpenROM[3] = dlgOpenROM4;
}
//--------------------------------------------------------------------------
void __fastcall TfrmMultiLoad::FormCreate(TObject *Sender)
{
Display_ScatterAndLoad();
// Display_LVSettingAndLoad();
// DL_Create(&m_TempDlHandle);
}
//---------------------------------------------------------------------------
void __fastcall TfrmMultiLoad::FormDestroy(TObject *Sender)
{
// DL_Rom_UnloadAll( m_TempDlHandle );
// DL_Destroy(&m_TempDlHandle);
}
void __fastcall TfrmMultiLoad::FormClose(TObject *Sender,
TCloseAction &Action)
{
Save_ScatterAndLoad();
// Save_LVSetting();
}
//==============================================================================
void TfrmMultiLoad::Display_ScatterAndLoad( void )
{
int iLD=0;
int ret;
DL_HANDLE_LIST_T *p_dl_handle_list = MainForm->Get_DlHandleList();
for( int idx=0; idx<MAX_SUPPORT_LOAD_NUM; idx++ )
{
DL_HANDLE_T *p_temp_dl_handle = new DL_HANDLE_T;
DL_Create(p_temp_dl_handle);
DL_HANDLE_T *p_dl_handle = MainForm->Get_DlHandle(idx);
m_asScatFileName[idx] = m_INIFileH.read_Scatter( "MultiPortFlashDownloadProject.ini", Application->ExeName, idx+1 );
if( m_asScatFileName[idx].AnsiCompareIC("") == 0 )
continue;
if ( OpenReadScatFile( m_asScatFileName[idx], idx, p_temp_dl_handle ) )
{
iLD = m_asScatFileName[idx].LastDelimiter("\\:");
if ( iLD > 0)
{
m_asScatPath[idx] = m_asScatFileName[idx].SubString(1, iLD-1 );
}
if( MainForm->Get_AutoLoadResByScatFlag() )
{
ret = DL_AutoLoadByScatRegionName(*p_temp_dl_handle, m_asScatFileName[idx].c_str(), NORMAL_ROM|RESOURCE_BIN|JUMPTABLE_BIN);
if( ret != 0 )
{
Application->MessageBox( "Automatic load by scatter region name fail", "FAIL", MB_OK );
Destroy_DLHandle( p_temp_dl_handle );
return;
}
}
if( MainForm->Get_NFBSelected() )
{
LoadBootLoader( idx, p_temp_dl_handle );
}
m_asROMFileName[idx] = m_INIFileH.read_ROM( "MultiPortFlashDownloadProject.ini", Application->ExeName, idx+1 );
if( m_asROMFileName[idx].AnsiCompareIC("") != 0 )
{
if(ret=DL_Rom_LoadByFilepath(*p_temp_dl_handle, 0, m_asROMFileName[idx].c_str()))
{
if( FTHND_HANDLE_BUSY_NOW == ret )
{
Application->MessageBox( "Program is busy! Can not update setting right now.", "Fail", MB_OK );
return;
}
else if( FTHND_SCAT_REGION_IS_OVERLAP == ret )
{
AnsiString as_msg = "\"" + m_asROMFileName[idx] + "\" is too large and causes region overlap!";
Application->MessageBox( as_msg.c_str(), "Fail", MB_OK );
return;
}
else
{
AnsiString as_msg = " Load file \"" + m_asROMFileName[idx] + "\" fail!";
Application->MessageBox( as_msg.c_str(), "Fail", MB_OK );
return;
}
}
iLD = m_asROMFileName[idx].LastDelimiter("\\:");
if ( iLD > 0)
{
m_asROMPath[idx] = m_asROMFileName[idx].SubString(1, iLD-1 );
}
// auto load boot loader
// if( MainForm->Get_NFBSelected() )
// {
// BL_AutoLoad(*p_bl_handle, m_asROMFileName[i].c_str(), "*_BOOTLOADER_*.bin");
// }
// auto load download bin files
if( MainForm->Get_AutoLoadResByScatFlag() )
{
if( MainForm->Get_NFBSelected() )
{
DL_AutoLoadByScatRegionName(*p_temp_dl_handle, m_asROMFileName[idx].c_str(), NORMAL_ROM|RESOURCE_BIN|JUMPTABLE_BIN);
}
else
{
DL_AutoLoadByScatRegionName(*p_temp_dl_handle, m_asROMFileName[idx].c_str(), RESOURCE_BIN|JUMPTABLE_BIN);
}
}
}
#ifndef SERVICE_CENTER
AnsiString as_LV_FAT_index;
m_asFATFileName[idx] = m_INIFileH.read_FAT( "MultiPortFlashDownloadProject.ini", Application->ExeName, idx+1 );
as_LV_FAT_index = m_INIFileH.read_LV_FAT_index( "MultiPortFlashDownloadProject.ini", Application->ExeName, idx+1 );
m_iLV_FAT_index[idx] = as_LV_FAT_index.ToInt();
if( m_iLV_FAT_index[idx]>=1 && MainForm->Get_Type() == DOWNLOAD_ROM_AND_FAT_INDEX )
{
if( m_asFATFileName[idx].AnsiCompareIC("") != 0 )
{
if(ret=DL_Rom_LoadByFilepath( *p_temp_dl_handle, m_iLV_FAT_index[idx], m_asFATFileName[idx].c_str()))
{
if( FTHND_HANDLE_BUSY_NOW == ret )
{
Application->MessageBox( "Program is busy! Can not update setting right now.", "Fail", MB_OK );
return;
}
else if( FTHND_SCAT_REGION_IS_OVERLAP == ret )
{
AnsiString as_msg = "\"" + m_asFATFileName[idx] + "\" is too large and causes region overlap!";
Application->MessageBox( as_msg.c_str(), "Fail", MB_OK );
return;
}
else
{
AnsiString as_msg = " Load file \"" + m_asFATFileName[idx] + "\" fail!";
Application->MessageBox( as_msg.c_str(), "Fail", MB_OK );
return;
}
}
iLD = m_asFATFileName[idx].LastDelimiter("\\:");
if ( iLD > 0)
{
m_asFATPath[idx] = m_asFATFileName[idx].SubString(1, iLD-1 );
}
}
}
#endif
// update handle list
if( NULL != p_dl_handle ) // not new handle
{
ret = DL_CheckHandleSameSWVersionInList( *p_dl_handle_list, *p_temp_dl_handle );
if( 0 == ret ) // no same S/W version in list
{
if( 0 != DL_CheckHandleInList( *p_dl_handle_list, *p_dl_handle ) ) // handle in list
{
ret = DL_DeleteHandleFromList( *p_dl_handle_list, *p_dl_handle );
if( ret != 0 )
{
Application->MessageBox( "Delete handle from list fail", "FAIL", MB_OK );
return;
}
}
Destroy_DLHandle( p_dl_handle );
p_dl_handle = p_temp_dl_handle;
MainForm->Set_DlHandle( idx, p_dl_handle );
ret = DL_AddHandleToList( *p_dl_handle_list, *p_dl_handle );
{
if( ret != 0 )
{
Application->MessageBox( "Add handle to list fail", "FAIL", MB_OK );
return;
}
}
m_lblScatFileName[idx]->Caption = m_asScatFileName[idx];
}
else // same S/W in handle list
{
Destroy_DLHandle( p_temp_dl_handle );
Application->MessageBox( "Has same S/W in handle list", "NOTICE", MB_OK );
return;
}
}
else // new handle
{
p_dl_handle = p_temp_dl_handle;
ret = DL_AddHandleToList( *p_dl_handle_list, *p_dl_handle );
{
if( ret != 0 )
{
Application->MessageBox( "Add handle to list fail", "FAIL", MB_OK );
return;
}
}
m_lblScatFileName[idx]->Caption = m_asScatFileName[idx];
Destroy_DLHandle( p_temp_dl_handle );
}
RedrawLVList( idx, p_dl_handle );
}
else
{
Destroy_DLHandle( p_temp_dl_handle );
}
}
}
//-----------------------------------------------------------------------------
void TfrmMultiLoad::Save_ScatterAndLoad( void )
{
DL_HANDLE_T* p_dl_handle;
for( int i=0; i<MAX_SUPPORT_LOAD_NUM; i++ )
{
if( m_asScatFileName[i].AnsiCompareIC("") != 0 )
{
m_INIFileH.write_Scatter( "MultiPortFlashDownloadProject.ini", Application->ExeName, i+1, m_lblScatFileName[i]->Caption );
if( MainForm->Get_NFBSelected() )
{
BL_INFO bl_info;
p_dl_handle = MainForm->Get_DlHandle(i);
// BL_GetInfo( *p_bl_handle, &bl_info );
DL_BL_GetInfo( *p_dl_handle, &bl_info );
m_INIFileH.write_BootLoader( "MultiPortFlashDownloadProject.ini", Application->ExeName, i+1, bl_info.m_filepath);
if( _TRUE == bl_info.m_enable )
{
m_INIFileH.write_BootLoaderEnable( "MultiPortFlashDownloadProject.ini", Application->ExeName, i+1, "yes");
}
else
{
m_INIFileH.write_BootLoaderEnable( "MultiPortFlashDownloadProject.ini", Application->ExeName, i+1, "no");
}
}
m_INIFileH.write_ROM( "MultiPortFlashDownloadProject.ini", Application->ExeName, i+1, m_asROMFileName[i]);
#ifndef SERVICE_CENTER
m_INIFileH.write_FAT( "MultiPortFlashDownloadProject.ini", Application->ExeName, i+1, m_asFATFileName[i]);
m_INIFileH.write_LV_FAT_index( "MultiPortFlashDownloadProject.ini", Application->ExeName, i+1, IntToStr(m_iLV_FAT_index));
#endif
}
}
}
//==============================================================================
//void TfrmMultiLoad::Display_LVSetting( void )
//{
// int ret;
// int iLD = 0;
// DL_HANDLE_T* p_dl_handle;
// //BL_HANDLE_T* p_bl_handle = MainForm->Get_BlHandle();
//
//
//
// for( int i=0; i<MAX_SUPPORT_LOAD_NUM; i++ )
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -