mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-02-08 05:33:31 +01:00
522cb6b137
Some of the device names can be ambiguous and require fully or partly qualifying the name (e.g. IOS::HLE::FS::) in a somewhat verbose way. Additionally, insufficiently qualified names are prone to breaking. Consider the example of IOS::HLE::FS:: (namespace) and IOS::HLE::Device::FS (class). If we use FS::Foo in a file that doesn't know about the class, everything will work fine. However, as soon as Device::FS is declared via a header include or even just forward declared, that code will cease to compile because FS:: now resolves to Device::FS if FS::Foo was used in the Device namespace. It also leads to having to write IOS::ES:: to access ES types and utilities even for code that is already under the IOS namespace. The fix for this is simple: rename the device classes and give them a "device" suffix in their names if the existing ones may be ambiguous. This makes it clear whether we're referring to the device class or to something else. This is not any longer to type, considering it lets us get rid of the Device namespace, which is now wholly unnecessary. There are no functional changes in this commit. A future commit will fix unnecessarily qualified names.
105 lines
2.9 KiB
C++
105 lines
2.9 KiB
C++
// Copyright 2017 Dolphin Emulator Project
|
|
// Licensed under GPLv2+
|
|
// Refer to the license.txt file included.
|
|
|
|
#pragma once
|
|
|
|
#include <cstddef>
|
|
#include <functional>
|
|
#include <optional>
|
|
#include <string>
|
|
#include <unordered_set>
|
|
|
|
#include "Common/CommonTypes.h"
|
|
#include "Core/IOS/ES/Formats.h"
|
|
|
|
// Small utility functions for common Wii related tasks.
|
|
|
|
namespace DiscIO
|
|
{
|
|
class VolumeWAD;
|
|
}
|
|
|
|
namespace IOS::HLE
|
|
{
|
|
class ESDevice;
|
|
class Kernel;
|
|
} // namespace IOS::HLE
|
|
|
|
namespace IOS::HLE::FS
|
|
{
|
|
class FileSystem;
|
|
}
|
|
|
|
namespace WiiUtils
|
|
{
|
|
enum class InstallType
|
|
{
|
|
Permanent,
|
|
Temporary,
|
|
};
|
|
|
|
bool InstallWAD(IOS::HLE::Kernel& ios, const DiscIO::VolumeWAD& wad, InstallType type);
|
|
// Same as the above, but constructs a temporary IOS and VolumeWAD instance for importing
|
|
// and does a permanent install.
|
|
bool InstallWAD(const std::string& wad_path);
|
|
|
|
bool UninstallTitle(u64 title_id);
|
|
|
|
bool IsTitleInstalled(u64 title_id);
|
|
|
|
// Checks if there's a title.tmd imported for the given title ID.
|
|
bool IsTMDImported(IOS::HLE::FS::FileSystem& fs, u64 title_id);
|
|
|
|
// Searches for a TMD matching the given title ID in /title/00000001/00000002/data/tmds.sys.
|
|
// Returns it if it exists, otherwise returns an empty invalid TMD.
|
|
IOS::ES::TMDReader FindBackupTMD(IOS::HLE::FS::FileSystem& fs, u64 title_id);
|
|
|
|
// Checks if there's a title.tmd imported for the given title ID. If there is not, we attempt to
|
|
// re-import it from the TMDs stored in /title/00000001/00000002/data/tmds.sys.
|
|
// Returns true if, after this function call, we have an imported title.tmd, or false if not.
|
|
bool EnsureTMDIsImported(IOS::HLE::FS::FileSystem& fs, IOS::HLE::ESDevice& es, u64 title_id);
|
|
|
|
enum class UpdateResult
|
|
{
|
|
Succeeded,
|
|
AlreadyUpToDate,
|
|
|
|
// Current region does not match disc region.
|
|
RegionMismatch,
|
|
// Missing update partition on disc.
|
|
MissingUpdatePartition,
|
|
// Missing or invalid files on disc.
|
|
DiscReadFailed,
|
|
|
|
// NUS errors and failures.
|
|
ServerFailed,
|
|
// General download failures.
|
|
DownloadFailed,
|
|
|
|
// Import failures.
|
|
ImportFailed,
|
|
// Update was cancelled.
|
|
Cancelled,
|
|
};
|
|
|
|
// Return false to cancel the update as soon as the current title has finished updating.
|
|
using UpdateCallback = std::function<bool(size_t processed, size_t total, u64 title_id)>;
|
|
// Download and install the latest version of all titles (if missing) from NUS.
|
|
// If no region is specified, the region of the installed System Menu will be used.
|
|
// If no region is specified and no system menu is installed, the update will fail.
|
|
UpdateResult DoOnlineUpdate(UpdateCallback update_callback, const std::string& region);
|
|
|
|
// Perform a disc update with behaviour similar to the System Menu.
|
|
UpdateResult DoDiscUpdate(UpdateCallback update_callback, const std::string& image_path);
|
|
|
|
// Check the emulated NAND for common issues.
|
|
struct NANDCheckResult
|
|
{
|
|
bool bad = false;
|
|
std::unordered_set<u64> titles_to_remove;
|
|
};
|
|
NANDCheckResult CheckNAND(IOS::HLE::Kernel& ios);
|
|
bool RepairNAND(IOS::HLE::Kernel& ios);
|
|
} // namespace WiiUtils
|