usbloadergx/source/usbloader/wbfs/wbfs_wbfs.cpp
dimok321 f3ef9104b1 *Whole lot of cleanup in the cfg.c
*Moved all related global settings to a settings class. one for themes and individual games will follow. Probably broke some settings or theme loading, we can deal with that later and fix when someone discovers bugs.
2010-09-19 20:25:12 +00:00

214 lines
4.0 KiB
C++

#include "wbfs_wbfs.h"
#include "prompts/ProgressWindow.h"
#include "settings/CSettings.h"
#include "wbfs_rw.h"
extern u32 sector_size;
s32 Wbfs_Wbfs::Open()
{
wbfs_t *part = NULL;
/* Open partition */
part = wbfs_open_partition( readCallback, writeCallback, NULL, sector_size, size, lba, 0 );
if ( !part ) return -1;
/* Close current hard disk */
Close();
hdd = part;
// Save the new sector size, so it will be used in read and write calls
sector_size = 1 << hdd->head->hd_sec_sz_s;
return 0;
}
wbfs_disc_t* Wbfs_Wbfs::OpenDisc( u8 *discid )
{
/* No device open */
if ( !hdd )
return NULL;
/* Open disc */
return wbfs_open_disc( hdd, discid );
}
void Wbfs_Wbfs::CloseDisc( wbfs_disc_t *disc )
{
/* No device open */
if ( !hdd || !disc )
return;
/* Close disc */
wbfs_close_disc( disc );
}
s32 Wbfs_Wbfs::Format()
{
wbfs_t *partition = NULL;
/* Reset partition */
partition = wbfs_open_partition( readCallback, writeCallback, NULL, sector_size, size, lba, 1 );
if ( !partition )
return -1;
/* Free memory */
wbfs_close( partition );
return 0;
}
s32 Wbfs_Wbfs::GetCount( u32 *count )
{
/* No device open */
if ( !hdd )
return -1;
/* Get list length */
*count = wbfs_count_discs( hdd );
return 0;
}
s32 Wbfs_Wbfs::GetHeaders( struct discHdr *outbuf, u32 cnt, u32 len )
{
u32 idx, size;
s32 ret;
/* No device open */
if ( !hdd )
return -1;
for ( idx = 0; idx < cnt; idx++ )
{
u8 *ptr = ( ( u8 * )outbuf ) + ( idx * len );
/* Get header */
ret = wbfs_get_disc_info( hdd, idx, ptr, len, &size );
if ( ret < 0 )
return ret;
}
return 0;
}
s32 Wbfs_Wbfs::AddGame()
{
s32 ret;
/* No device open */
if ( !hdd )
return -1;
/* Add game to device */
partition_selector_t part_sel;
int copy_1_1 = 0;
if ( Settings.fullcopy )
{
part_sel = ALL_PARTITIONS;
copy_1_1 = 1;
}
else
{
part_sel = Settings.partitions_to_install == install_game_only ? ONLY_GAME_PARTITION : ALL_PARTITIONS;
}
ret = wbfs_add_disc( hdd, __ReadDVD, NULL, ProgressCallback, part_sel, copy_1_1 );
if ( ret < 0 )
return ret;
return 0;
}
s32 Wbfs_Wbfs::RemoveGame( u8 *discid )
{
s32 ret;
/* No device open */
if ( !hdd )
return -1;
/* Remove game from USB device */
ret = wbfs_rm_disc( hdd, discid );
if ( ret < 0 )
return ret;
return 0;
}
s32 Wbfs_Wbfs::DiskSpace( f32 *used, f32 *free )
{
f32 ssize;
u32 cnt;
/* No device open */
if ( !hdd )
return -1;
/* Count used blocks */
cnt = wbfs_count_usedblocks( hdd );
/* Sector size in GB */
ssize = hdd->wbfs_sec_sz / GB_SIZE;
/* Copy values */
*free = ssize * cnt;
*used = ssize * ( hdd->n_wbfs_sec - cnt );
return 0;
}
s32 Wbfs_Wbfs::RenameGame( u8 *discid, const void *newname )
{
s32 ret;
/* No USB device open */
if ( !hdd )
return -1;
ret = wbfs_ren_disc( hdd, discid, ( u8* )newname );
if ( ret < 0 )
return ret;
return 0;
}
s32 Wbfs_Wbfs::ReIDGame( u8 *discid, const void *newID )
{
s32 ret;
/* No USB device open */
if ( !hdd )
return -1;
ret = wbfs_rID_disc( hdd, discid, ( u8* )newID );
if ( ret < 0 )
return ret;
return 0;
}
f32 Wbfs_Wbfs::EstimateGameSize()
{
partition_selector_t part_sel = ONLY_GAME_PARTITION;
if ( Settings.fullcopy )
{
part_sel = ALL_PARTITIONS;
}
else
{
switch ( Settings.partitions_to_install )
{
case install_game_only:
part_sel = ONLY_GAME_PARTITION;
break;
case install_all:
part_sel = ALL_PARTITIONS;
break;
case install_all_but_update:
part_sel = REMOVE_UPDATE_PARTITION;
break;
}
}
return wbfs_estimate_disc( hdd, __ReadDVD, NULL, part_sel );
}