diff --git a/include/coreinit/mcp.h b/include/coreinit/mcp.h new file mode 100644 index 0000000..d5faac2 --- /dev/null +++ b/include/coreinit/mcp.h @@ -0,0 +1,103 @@ +#pragma once +#include + +/** + * \defgroup coreinit_mcp MCP IOS Calls + * \ingroup coreinit + * @{ + */ + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct MCPInstallProgress MCPInstallProgress; +typedef struct MCPInstallInfo MCPInstallInfo; +typedef struct MCPInstallTitleInfo MCPInstallTitleInfo; +typedef struct MCPDevice MCPDevice; +typedef struct MCPDeviceList MCPDeviceList; + +typedef enum MCPInstallTarget +{ + MCP_INSTALL_TARGET_MLC = 0, + MCP_INSTALL_TARGET_USB = 1, +} MCPInstallTarget; + +struct __attribute__((__packed__)) MCPInstallProgress +{ + u32 inProgress; + u64 tid; + u64 sizeTotal; + u64 sizeProgress; + u32 contentsTotal; + u32 contentsProgress; +}; +CHECK_OFFSET(MCPInstallProgress, 0x04, tid); +CHECK_OFFSET(MCPInstallProgress, 0x20, contentsProgress); +CHECK_SIZE(MCPInstallProgress, 0x24); + +struct MCPInstallInfo +{ + UNKNOWN(0x27F); +}; +CHECK_SIZE(MCPInstallInfo, 0x27F); + +struct MCPInstallTitleInfo +{ + UNKNOWN(0x27F); +}; +CHECK_SIZE(MCPInstallTitleInfo, 0x27F); + +struct MCPDevice +{ + char name[0x31B]; +}; +CHECK_SIZE(MCPDevice, 0x31B); + +struct MCPDeviceList +{ + MCPDevice devices[32]; +}; +CHECK_SIZE(MCPDeviceList, 0x31B*32); + +int +MCP_Open(); + +int +MCP_Close(int handle); + +int +MCP_InstallSetTargetDevice(int handle, MCPInstallTarget device); + +int +MCP_InstallGetTargetDevice(int handle, MCPInstallTarget *deviceOut); + +int +MCP_InstallSetTargetUsb(int handle, int usb); + +int +MCP_InstallGetInfo(int handle, char *path, MCPInstallInfo *out); + +int +MCP_InstallTitleAsync(int handle, char *path, MCPInstallTitleInfo *out); + +int +MCP_InstallGetProgress(int handle, MCPInstallProgress *installProgressOut); + +int +MCP_InstallTitleAbort(int handle); + +int +MCP_UninstallTitleAsync(int handle, char *path, MCPInstallTitleInfo *out); + +int +MCP_DeviceList(int handle, int *numDevices, MCPDeviceList *outDevices, uint32_t outBufferSize); + +int +MCP_FullDeviceList(int handle, int *numDevices, MCPDeviceList *outDevices, uint32_t outBufferSize); + +#ifdef __cplusplus +} +#endif + +/** @} */ diff --git a/rpl/libcoreinit/exports.h b/rpl/libcoreinit/exports.h index 1b7be96..898d9b9 100644 --- a/rpl/libcoreinit/exports.h +++ b/rpl/libcoreinit/exports.h @@ -186,6 +186,20 @@ EXPORT(MEMAdjustFrmHeap); EXPORT(MEMResizeForMBlockFrmHeap); EXPORT(MEMGetAllocatableSizeForFrmHeapEx); +// coreinit/mcp.h +EXPORT(MCP_Open); +EXPORT(MCP_Close); +EXPORT(MCP_InstallSetTargetDevice); +EXPORT(MCP_InstallGetTargetDevice); +EXPORT(MCP_InstallSetTargetUsb); +EXPORT(MCP_InstallGetInfo); +EXPORT(MCP_InstallTitleAsync); +EXPORT(MCP_InstallGetProgress); +EXPORT(MCP_InstallTitleAbort); +EXPORT(MCP_DeleteTitleAsync); +EXPORT(MCP_DeviceList); +EXPORT(MCP_FullDeviceList); + // coreinit/memheap.h EXPORT(MEMDumpHeap); EXPORT(MEMFindContainHeap);