📄 form_multiload.cpp
字号:
}
//---------------------------------------------------------------------------
void __fastcall TfrmMultiLoad::RedrawLVList( int idx, DL_HANDLE_T *p_dl_handle )
{
unsigned short rom_count;
// DL_HANDLE_T *p_dl_handle = MainForm->Get_DlHandle(idx);
TListItem *pListItem;
m_lv[idx]->Items->Clear();
DN_PARAM_S* p_dn_param = MainForm->Get_DNParameter();
if( OPERATION_NFB == p_dn_param->eOperation )
{
BL_INFO bl_info;
pListItem = m_lv[idx]->Items->Add();
pListItem->Caption = "BootLoader";
// if(!BL_GetInfo(p_dn_param->bl_handle, &bl_info))
if( ! DL_BL_GetInfo( *p_dl_handle, &bl_info ) )
{
AnsiString region_prefix;
pListItem->Checked = _TRUE==bl_info.m_enable?true:false;
pListItem->SubItems->Add("");
pListItem->SubItems->Add( "0x" + IntToHex((int)bl_info.m_start_addr, 8) );
pListItem->SubItems->Add("");
pListItem->SubItems->Add(bl_info.m_filepath);
}
}
if(!DL_GetCount(*p_dl_handle, &rom_count))
{
ROM_INFO rom_info[MAX_LOAD_SECTIONS];
if(!DL_Rom_GetInfoAll(*p_dl_handle, rom_info, MAX_LOAD_SECTIONS))
{
// access
unsigned int total_file_size = 0;
for(int i=0; i<rom_count; i++)
{
AnsiString as_reg_prefix;
TListItem *p_list_item;
// access
total_file_size += rom_info[i].filesize;
// if( ! DL_Rom_GetInfo(g_DL_HANDLE, i, &(rom_info[i])) )
{
p_list_item = m_lv[idx]->Items->Add();
p_list_item->Caption = rom_info[i].name;
if( strcmpi( rom_info[i].name, "ROM" ) == 0 )
{
m_asROMFileName[idx] = rom_info[i].filepath;
}
if( strcmpi( rom_info[i].name, "FAT" ) == 0 )
{
m_iLV_FAT_index[idx] = i;
m_asFATFileName[idx] = rom_info[i].filepath;
}
p_list_item->Checked = rom_info[i].enable;
if( ABSOLUTE_ADDR == rom_info[i].addr_type )
{
as_reg_prefix = "";
}
else
{
as_reg_prefix = "+";
}
p_list_item->SubItems->Add( as_reg_prefix + "0x" + IntToHex((int)rom_info[i].region_addr, 8) );
p_list_item->SubItems->Add( "0x" + IntToHex((int)rom_info[i].begin_addr, 8) );
p_list_item->SubItems->Add( "0x" + IntToHex((int)rom_info[i].end_addr, 8) );
p_list_item->SubItems->Add(rom_info[i].filepath);
}
} // for
MainForm->Set_TotalFileSize( total_file_size );
}
}
}
//---------------------------------------------------------------------------
void __fastcall TfrmMultiLoad::RedrawLVCheckBox( int idx )
{
unsigned short rom_count;
int rom_begin_index;
DN_PARAM_S* p_dn_param = MainForm->Get_DNParameter();
DL_HANDLE_T *p_dl_handle = MainForm->Get_DlHandle(idx);
if( OPERATION_NFB == p_dn_param->eOperation )
{
BL_INFO bl_info;
// if(!BL_GetInfo(p_dn_param->bl_handle, &bl_info))
if(!DL_BL_GetInfo(*p_dl_handle, &bl_info))
{
m_lv[idx]->Items->Item[0]->Checked = (_TRUE==bl_info.m_enable)?true:false;
}
rom_begin_index = 1;
}
else
{
rom_begin_index = 0;
}
if(!DL_GetCount(*p_dl_handle, &rom_count))
{
ROM_INFO rom[MAX_LOAD_SECTIONS];
int checked_count=0;
if(!DL_Rom_GetInfoAll(*p_dl_handle, rom, MAX_LOAD_SECTIONS))
{
for(int i=0; i<rom_count; i++)
{
if(rom[i].enable)
{
checked_count++;
}
m_lv[idx]->Items->Item[rom_begin_index+i]->Checked = (_TRUE==rom[i].enable)?true:false;
}
}
if( OPERATION_NFB == p_dn_param->eOperation )
{
if( 0 < checked_count )
{
m_lv[idx]->Items->Item[0]->Checked = true;
// BL_SetEnableAttr(p_dn_param->bl_handle, _TRUE);
DL_BL_SetEnableAttr(*p_dl_handle, _TRUE);
}
}
}
}
//---------------------------------------------------------------------------
void __fastcall TfrmMultiLoad::lvChange(TObject *Sender, TListItem *Item,
TItemChange Change)
{
if( (Change == ctState) && (Item->Checked != m_slvChanged.bPreCheckBoxState) )
{
m_slvChanged.iChangedIndex = Item->Index;
return;
}
m_slvChanged.iChangedIndex = NO_CHANGE;
}
//---------------------------------------------------------------------------
void __fastcall TfrmMultiLoad::lvChanging(TObject *Sender, TListItem *Item,
TItemChange Change, bool &AllowChange)
{
m_slvChanged.bPreCheckBoxState = Item->Checked;
m_slvChanged.iChangedIndex = NO_CHANGE;
}
//---------------------------------------------------------------------------
void __fastcall TfrmMultiLoad::lvClick(TObject *Sender)
{
TListView *plv = dynamic_cast<TListView *>(Sender);
DN_PARAM_S* p_dn_param = MainForm->Get_DNParameter();
DL_HANDLE_T *p_dl_handle = MainForm->Get_DlHandle((int) plv->Tag);
int idx= plv->Tag;
if( 0<=m_slvChanged.iChangedIndex && m_slvChanged.iChangedIndex < plv->Items->Count )
{
if( OPERATION_NOR == p_dn_param->eOperation )
{
DL_Rom_SetEnableAttr( *p_dl_handle, m_slvChanged.iChangedIndex, plv->Items->Item[m_slvChanged.iChangedIndex]->Checked?_TRUE:_FALSE );
}
else
{
if( 0 == m_slvChanged.iChangedIndex )
{
// BL_SetEnableAttr(p_dn_param->bl_handle, plv->Items->Item[0]->Checked?_TRUE:_FALSE);
DL_BL_SetEnableAttr( *p_dl_handle, plv->Items->Item[0]->Checked?_TRUE:_FALSE);
}
else
{
DL_Rom_SetEnableAttr(*p_dl_handle, m_slvChanged.iChangedIndex-1, plv->Items->Item[m_slvChanged.iChangedIndex]->Checked?_TRUE:_FALSE);
}
}
RedrawLVCheckBox( (int) plv->Tag );
}
else
{
lv_oldClick(Sender);
}
m_slvChanged.iChangedIndex = NO_CHANGE;
}
//---------------------------------------------------------------------------
void __fastcall TfrmMultiLoad::lv_oldClick(TObject *Sender)
{
TListView *p_lv = dynamic_cast<TListView *>(Sender);
int iLD=0;
int ret;
int idx=p_lv->Tag;
DL_HANDLE_T *p_dl_handle = MainForm->Get_DlHandle(idx);
if( NULL == p_lv->Selected )
return;
if( m_asROMPath[idx].Length()>0 )
{
m_dlgOpenROM[idx]->InitialDir = m_asROMPath[idx];
m_dlgOpenROM[idx]->FileName = "";
}
else if( 4 <= p_lv->Selected->SubItems->Count )
{
iLD = p_lv->Selected->SubItems->Strings[3].LastDelimiter("\\:");
if ( iLD > 0)
{
m_dlgOpenROM[idx]->InitialDir = p_lv->Selected->SubItems->Strings[3].SubString(1, iLD-1 );
m_dlgOpenROM[idx]->FileName = "";
}
}
//getIndexFromListView(p_lv);
if( m_dlgOpenROM[idx]->Execute( ))
{
DL_HANDLE_T *p_dl_handle = MainForm->Get_DlHandle(idx);
unsigned short index;
DN_PARAM_S* p_dn_param = MainForm->Get_DNParameter();
if( OPERATION_NFB == p_dn_param->eOperation )
{
if( 0 == p_lv->ItemIndex ) // boot loader
{
// if(ret=BL_LoadByFilepath(p_dn_param->bl_handle, m_dlgOpenROM[idx]->FileName.c_str()))
if(ret=DL_BL_LoadByFilepath(*p_dl_handle, m_dlgOpenROM[idx]->FileName.c_str()))
{
if( FTHND_HANDLE_BUSY_NOW == ret )
{
Application->MessageBox( "Program is busy! Can not update setting right now.", "Fail", MB_OK );
return;
}
else
{
AnsiString as_msg = " Load boot-loader \"" + m_dlgOpenROM[idx]->FileName + "\" fail!";
Application->MessageBox( as_msg.c_str(), "Fail", MB_OK );
return;
}
}
}
else
{
index = p_lv->ItemIndex-1;
}
}
else // NOR
{
index = p_lv->ItemIndex;
}
if( ! ( OPERATION_NFB == p_dn_param->eOperation && 0 == p_lv->ItemIndex ) )
{
if(ret=DL_Rom_LoadByFilepath(*p_dl_handle, index, m_dlgOpenROM[idx]->FileName.c_str()))
//if(ret=DL_Rom_LoadByFilepath(g_DL_HANDLE, p_lv->Selected->Index, dlgOpenROM->FileName.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_dlgOpenROM[idx]->FileName + "\" is too large and causes region overlap!";
Application->MessageBox( as_msg.c_str(), "Fail", MB_OK );
return;
}
else
{
AnsiString as_msg = " Load file \"" + m_dlgOpenROM[idx]->FileName + "\" fail!";
Application->MessageBox( as_msg.c_str(), "Fail", MB_OK );
return;
}
}
iLD = m_dlgOpenROM[idx]->FileName.LastDelimiter("\\:");
if ( iLD > 0)
{
m_asROMPath[idx] = m_dlgOpenROM[idx]->FileName.SubString(1, iLD-1 );
}
// check if NFB enabled
_BOOL bNFBEnabled=_FALSE;
if( FTHND_OK == DL_IsNFB( *p_dl_handle, &bNFBEnabled) )
{
// update operation method
if( bNFBEnabled && (OPERATION_NFB!=p_dn_param->eOperation) ) {
MainForm->rbNFBClick(Sender);
}
else if( !bNFBEnabled && (OPERATION_NFB==p_dn_param->eOperation) ) {
MainForm->rbNORClick(Sender);
}
}
// auto load boot loader
// if(bNFBEnabled)
// {
// BL_AutoLoad(p_dn_param->bl_handle, m_dlgOpenROM[idx]->FileName.c_str(), "*_BOOTLOADER_*.bin");
// }
// auto load download bin files
if(MainForm->Get_AutoLoadResByScatFlag())
{
if(bNFBEnabled)
{
ret = DL_AutoLoadByScatRegionName(*p_dl_handle, m_dlgOpenROM[idx]->FileName.c_str(), NORMAL_ROM|RESOURCE_BIN|JUMPTABLE_BIN);
}
else
{
ret = DL_AutoLoadByScatRegionName(*p_dl_handle, m_dlgOpenROM[idx]->FileName.c_str(), RESOURCE_BIN|JUMPTABLE_BIN);
}
if( ret != 0 )
{
Application->MessageBox( "Automatic load by scatter region name fail", "FAIL", MB_OK );
return;
}
}
}
}
RedrawLVList( (int) p_lv->Tag, p_dl_handle );
}
//---------------------------------------------------------------------------
void __fastcall TfrmMultiLoad::btnDelLoadClick(TObject *Sender)
{
int ret;
TButton *btn = (TButton*)Sender;
int idx = btn->Tag;
DL_HANDLE_LIST_T *p_dl_handle_list = MainForm->Get_DlHandleList();
DL_HANDLE_T *p_dl_handle = MainForm->Get_DlHandle(idx);
m_lblScatFileName[idx]->Caption = "";
m_lv[idx]->Clear();
ret = DL_CheckHandleInList( *p_dl_handle_list, *p_dl_handle );
if( ret != 0 )
{ DL_DeleteHandleFromList( *p_dl_handle_list, *p_dl_handle );
}
}
//---------------------------------------------------------------------------
bool TfrmMultiLoad::Destroy_DLHandle( DL_HANDLE_T *p_dl_handle )
{
if( NULL != p_dl_handle )
{
int ret;
ret = DL_Rom_UnloadAll( *p_dl_handle );
if( ret != 0 )
{
Application->MessageBox( "Unload all ROM fail", "FAIL", MB_OK );
return false;
}
ret = DL_Destroy( p_dl_handle );
if( ret != 0 )
{
Application->MessageBox( "Unload all ROM fail", "FAIL", MB_OK );
return false;
}
delete p_dl_handle;
p_dl_handle = NULL;
}
return true;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -