mirror of
https://github.com/wiidev/usbloadergx.git
synced 2024-11-26 05:04:16 +01:00
4f7ccef2ec
*Added initialized too all the cheat variables (that was bad...i wonder how it didn't go wrong) *Corrected several theme texts (x, y position mistype) *Added "Default" button to theme downloader to reset the theme *Fixed bug in loading language file with fresh configs *Fixed display of theme path in custom path options *Fixed rockout reset after leaving the GameWindowPrompt *Added limit to page indicators to 5 and rotate them
191 lines
3.6 KiB
C++
191 lines
3.6 KiB
C++
#include "wbfs_wbfs.h"
|
|
#include "prompts/ProgressWindow.h"
|
|
#include "settings/CSettings.h"
|
|
#include "usbloader/wbfs.h"
|
|
#include "wbfs_rw.h"
|
|
|
|
extern u32 sector_size;
|
|
extern int wbfs_part_fs;
|
|
|
|
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;
|
|
|
|
wbfs_part_fs = PART_FS_WBFS;
|
|
|
|
return 0;
|
|
}
|
|
|
|
void Wbfs_Wbfs::Close()
|
|
{
|
|
if (hdd)
|
|
{
|
|
wbfs_close(hdd);
|
|
hdd = NULL;
|
|
}
|
|
|
|
wbfs_part_fs = -1;
|
|
}
|
|
|
|
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;
|
|
|
|
partition_selector_t part_sel = (partition_selector_t) Settings.InstallPartitions;
|
|
|
|
/* Add game to device */
|
|
ret = wbfs_add_disc(hdd, __ReadDVD, NULL, ProgressCallback, part_sel, 0);
|
|
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 = (partition_selector_t) Settings.InstallPartitions;
|
|
return wbfs_estimate_disc(hdd, __ReadDVD, NULL, part_sel);
|
|
}
|
|
|
|
s32 Wbfs_Wbfs::GetFragList(u8 *id)
|
|
{
|
|
//! Doesn't have to be called ".iso" just something different than .wbfs but with a dot.
|
|
//! So that the code doesn't fail.
|
|
return get_frag_list_for_file((char *) ".iso", id);
|
|
}
|