#include #include #include #include #include #include "usbloader/sdhc.h" #include "usbloader/usbstorage2.h" #include "fatmounter.h" #include "wbfs_rw.h" #include "wbfs_base.h" s32 Wbfs::done = -1; s32 Wbfs::total = -1; u32 Wbfs::nb_sectors; Wbfs::Wbfs( u32 device, u32 lba, u32 size ) : hdd( NULL ) { this->device = device; this->lba = lba; this->size = size; } void Wbfs::GetProgressValue( s32 * d, s32 * m ) { *d = done; *m = total; } s32 Wbfs::Init( u32 device ) { s32 ret; switch ( device ) { case WBFS_DEVICE_USB: /* Initialize USB storage */ ret = USBStorage2_Init(); if ( ret >= 0 ) { /* Setup callbacks */ readCallback = __ReadUSB; writeCallback = __WriteUSB; /* Device info */ /* Get USB capacity */ nb_sectors = USBStorage2_GetCapacity( §or_size ); if ( !nb_sectors ) return -1; } else return ret; break; case WBFS_DEVICE_SDHC: /* Initialize SDHC */ ret = SDHC_Init(); if ( ret ) { /* Setup callbacks */ readCallback = __ReadSDHC; writeCallback = __WriteSDHC; /* Device info */ nb_sectors = 0; sector_size = SDHC_SECTOR_SIZE; } else return -1; break; } return 0; } void Wbfs::Close() { if ( hdd ) { wbfs_close( hdd ); hdd = NULL; } WBFSDevice_deInit(); } // Default behavior: can't format s32 Wbfs::Format() { return -1; } s32 Wbfs::CheckGame( u8 *discid ) { wbfs_disc_t *disc = NULL; /* Try to open game disc */ disc = OpenDisc( discid ); if ( disc ) { /* Close disc */ CloseDisc( disc ); return 1; } return 0; } s32 Wbfs::GameSize( u8 *discid, f32 *size ) { wbfs_disc_t *disc = NULL; u32 sectors; /* Open disc */ disc = OpenDisc( discid ); if ( !disc ) return -2; /* Get game size in sectors */ sectors = wbfs_sector_used( disc->p, disc->header ); /* Copy value */ *size = ( disc->p->wbfs_sec_sz / GB_SIZE ) * sectors; /* Close disc */ CloseDisc( disc ); return 0; } wbfs_t *Wbfs::GetHddInfo() { return hdd; } bool Wbfs::Mounted() { return hdd == NULL; } int Wbfs::GetFragList( u8 *id ) { return 0; } int Wbfs::GetFragList( char *filename, _frag_append_t append_fragment, FragList * ) { return 0; } bool Wbfs::ShowFreeSpace( void ) { return true; }