Run clang-format
Some checks failed
C/C++ CI / ubuntu-latest (push) Has been cancelled

`find . -regex '.*\.\(cpp\|hpp\|cu\|cuh\|c\|h\)' -exec clang-format -style=file -i {} \;`
This commit is contained in:
GaryOderNichts 2024-10-03 21:35:22 +02:00 committed by Dave Murphy
parent 4f18f8041a
commit 2c98cc91aa
306 changed files with 11553 additions and 9866 deletions

View File

@ -13,24 +13,24 @@ extern "C" {
typedef enum AVMDrcScanMode
{
AVM_DRC_SCAN_MODE_UNKNOWN_0 = 0,
AVM_DRC_SCAN_MODE_UNKNOWN_1 = 1,
AVM_DRC_SCAN_MODE_UNKNOWN_3 = 3,
AVM_DRC_SCAN_MODE_UNKNOWN_0 = 0,
AVM_DRC_SCAN_MODE_UNKNOWN_1 = 1,
AVM_DRC_SCAN_MODE_UNKNOWN_3 = 3,
AVM_DRC_SCAN_MODE_UNKNOWN_255 = 255,
} AVMDrcScanMode;
typedef enum AVMDrcMode
{
AVM_DRC_MODE_NONE = 0,
AVM_DRC_MODE_NONE = 0,
AVM_DRC_MODE_SINGLE = 1,
AVM_DRC_MODE_DOUBLE = 2,
} AVMDrcMode;
typedef enum AVMDrcSystemAudioMode
{
AVM_DRC_SYSTEM_AUDIO_MODE_UNKNOWN_0 = 0, // mono?
AVM_DRC_SYSTEM_AUDIO_MODE_UNKNOWN_1 = 1, // stereo?
AVM_DRC_SYSTEM_AUDIO_MODE_SURROUND = 2,
AVM_DRC_SYSTEM_AUDIO_MODE_UNKNOWN_0 = 0, // mono?
AVM_DRC_SYSTEM_AUDIO_MODE_UNKNOWN_1 = 1, // stereo?
AVM_DRC_SYSTEM_AUDIO_MODE_SURROUND = 2,
} AVMDrcSystemAudioMode;
/**

View File

@ -22,18 +22,18 @@ typedef enum AVMTvAspectRatio
typedef enum AVMTvResolution
{
AVM_TV_RESOLUTION_576I = 1,
AVM_TV_RESOLUTION_480I = 2,
AVM_TV_RESOLUTION_480P = 3,
AVM_TV_RESOLUTION_720P = 4,
AVM_TV_RESOLUTION_720P_3D = 5,
AVM_TV_RESOLUTION_1080I = 6,
AVM_TV_RESOLUTION_1080P = 7,
AVM_TV_RESOLUTION_480I_PAL60 = 10,
AVM_TV_RESOLUTION_576P = 11,
AVM_TV_RESOLUTION_720P_50HZ = 12,
AVM_TV_RESOLUTION_1080I_50HZ = 13,
AVM_TV_RESOLUTION_1080P_50HZ = 14,
AVM_TV_RESOLUTION_576I = 1,
AVM_TV_RESOLUTION_480I = 2,
AVM_TV_RESOLUTION_480P = 3,
AVM_TV_RESOLUTION_720P = 4,
AVM_TV_RESOLUTION_720P_3D = 5,
AVM_TV_RESOLUTION_1080I = 6,
AVM_TV_RESOLUTION_1080P = 7,
AVM_TV_RESOLUTION_480I_PAL60 = 10,
AVM_TV_RESOLUTION_576P = 11,
AVM_TV_RESOLUTION_720P_50HZ = 12,
AVM_TV_RESOLUTION_1080I_50HZ = 13,
AVM_TV_RESOLUTION_1080P_50HZ = 14,
} AVMTvResolution;
typedef enum AVMTvVideoRegion

View File

@ -12,13 +12,13 @@
extern "C" {
#endif
#define CAMERA_WIDTH 640
#define CAMERA_PITCH 768
#define CAMERA_HEIGHT 480
#define CAMERA_WIDTH 640
#define CAMERA_PITCH 768
#define CAMERA_HEIGHT 480
#define CAMERA_Y_BUFFER_SIZE (CAMERA_PITCH * CAMERA_HEIGHT)
#define CAMERA_UV_BUFFER_SIZE (CAMERA_PITCH * CAMERA_HEIGHT / 2)
#define CAMERA_YUV_BUFFER_SIZE (CAMERA_Y_BUFFER_SIZE + CAMERA_UV_BUFFER_SIZE)
#define CAMERA_Y_BUFFER_SIZE (CAMERA_PITCH * CAMERA_HEIGHT)
#define CAMERA_UV_BUFFER_SIZE (CAMERA_PITCH * CAMERA_HEIGHT / 2)
#define CAMERA_YUV_BUFFER_SIZE (CAMERA_Y_BUFFER_SIZE + CAMERA_UV_BUFFER_SIZE)
#define CAMERA_YUV_BUFFER_ALIGNMENT 256
@ -34,35 +34,35 @@ typedef struct CAMSurface CAMSurface;
typedef enum CamError
{
CAMERA_ERROR_OK = 0,
CAMERA_ERROR_INVALID_ARG = -1,
CAMERA_ERROR_INVALID_HANDLE = -2,
CAMERA_ERROR_TOO_MANY_SURFACES = -4,
CAMERA_ERROR_INSUFFICIENT_MEMORY = -5,
CAMERA_ERROR_NOT_READY = -6,
CAMERA_ERROR_UNINITIALIZED = -8,
CAMERA_ERROR_UVC = -9,
CAMERA_ERROR_UVD_CONTEXT = -10,
CAMERA_ERROR_DEVICE_IN_USE = -12,
CAMERA_ERROR_UVD_SESSION = -13,
CAMERA_ERROR_SEGMENT_VIOLATION = -15
CAMERA_ERROR_OK = 0,
CAMERA_ERROR_INVALID_ARG = -1,
CAMERA_ERROR_INVALID_HANDLE = -2,
CAMERA_ERROR_TOO_MANY_SURFACES = -4,
CAMERA_ERROR_INSUFFICIENT_MEMORY = -5,
CAMERA_ERROR_NOT_READY = -6,
CAMERA_ERROR_UNINITIALIZED = -8,
CAMERA_ERROR_UVC = -9,
CAMERA_ERROR_UVD_CONTEXT = -10,
CAMERA_ERROR_DEVICE_IN_USE = -12,
CAMERA_ERROR_UVD_SESSION = -13,
CAMERA_ERROR_SEGMENT_VIOLATION = -15
} CamError;
typedef enum CamFps
{
CAMERA_FPS_15 = 0,
CAMERA_FPS_30 = 1
CAMERA_FPS_15 = 0,
CAMERA_FPS_30 = 1
} CamFps;
typedef enum CamStreamType
{
CAMERA_STREAM_TYPE_1 = 0
CAMERA_STREAM_TYPE_1 = 0
} CamStreamType;
typedef enum CamEventType
{
CAMERA_DECODE_DONE = 0,
CAMERA_DRC_DETACH = 1
CAMERA_DECODE_DONE = 0,
CAMERA_DRC_DETACH = 1
} CamEventType;
struct CAMEventData
@ -74,7 +74,7 @@ struct CAMEventData
struct
{
//! Pointer to the buffer of the decoded image
void* surfaceBuffer;
void *surfaceBuffer;
//! Handle of instance
CAMHandle handle;
//! TRUE if decode failed
@ -100,7 +100,7 @@ WUT_CHECK_OFFSET(CAMEventData, 0x08, detach.handle);
WUT_CHECK_OFFSET(CAMEventData, 0x04, args);
WUT_CHECK_SIZE(CAMEventData, 0x10);
typedef void(*CAMEventHandler)(CAMEventData *camEventData);
typedef void (*CAMEventHandler)(CAMEventData *camEventData);
struct CAMMode
{
@ -192,26 +192,26 @@ WUT_CHECK_SIZE(CAMSurface, 0x20);
* Initialize the camera
* \returns camera handle on success, and -1 on failure
*/
CAMHandle
CAMHandle
CAMInit(int instance, CAMSetupInfo *setupInfo, CAMError *err);
/**
* Deinitialize and clean up
*/
void
void
CAMExit(CAMHandle handle);
/**
* Start recording and decoding frames
*/
CAMError
CAMError
CAMOpen(CAMHandle handle);
/**
* Stops recording and decoding.
* Automatically called when the process is moved to background
*/
CAMError
CAMError
CAMClose(CAMHandle handle);
/**
@ -228,13 +228,13 @@ CAMGetMemReq(CAMStreamInfo *streamInfo);
* Up to 20 surfaces may be queued.
* Surface data is returned in the NV12 format
*/
CAMError
CAMError
CAMSubmitTargetSurface(CAMHandle handle, CAMSurface *surface);
/**
* Checks whether memory is segmented correctly to be used with the camera library
*/
CAMError
CAMError
CAMCheckMemSegmentation(void *pMem, uint32_t size);
#ifdef __cplusplus

View File

@ -1,8 +1,8 @@
#pragma once
#include <wut.h>
#include "context.h"
#include "threadqueue.h"
#include "time.h"
#include "context.h"
/**
* \defgroup coreinit_alarms Alarms

View File

@ -17,62 +17,62 @@ typedef uint32_t BSPConsoleTypeRaw;
typedef enum BSPError
{
BSP_ERROR_OK = 0x0,
BSP_ERROR_UNKNOWN_ENTITY = 0x1,
BSP_ERROR_UNKNOWN_ATTRIBUTE = 0x2,
BSP_ERROR_INVALID_INSTANCE = 0x4,
BSP_ERROR_CFG_CORRUPTED = 0x8,
BSP_ERROR_DEVICE_ERROR = 0x10,
BSP_ERROR_DEVICE_BUSY = 0x20,
BSP_ERROR_IOS_ERROR = 0x40,
BSP_ERROR_SPECIFIED_SIZE_INVALID = 0x80,
BSP_ERROR_HEAP_ERROR = 0x100,
BSP_ERROR_ENTITY_LIST_FULL = 0x200,
BSP_ERROR_UNSUPPORTED_METHOD = 0x400,
BSP_ERROR_UNKNOWN_HARDWARE_VERSION = 0x800,
BSP_ERROR_QUERY_UNAVAILABLE = 0x1000,
BSP_ERROR_UNKNOWN_DEVICE = 0x2000,
BSP_ERROR_INVALID_PARAMETER = 0x4000,
BSP_ERROR_DEVICE_NOT_FOUND = 0x8000,
BSP_ERROR_REQUEST_DENIED = 0x10000,
BSP_ERROR_UNSUPPORTED_PARAMETER = 0x20000,
BSP_ERROR_BOARD_CONFIG_INVALID = 0x40000,
BSP_ERROR_OK = 0x0,
BSP_ERROR_UNKNOWN_ENTITY = 0x1,
BSP_ERROR_UNKNOWN_ATTRIBUTE = 0x2,
BSP_ERROR_INVALID_INSTANCE = 0x4,
BSP_ERROR_CFG_CORRUPTED = 0x8,
BSP_ERROR_DEVICE_ERROR = 0x10,
BSP_ERROR_DEVICE_BUSY = 0x20,
BSP_ERROR_IOS_ERROR = 0x40,
BSP_ERROR_SPECIFIED_SIZE_INVALID = 0x80,
BSP_ERROR_HEAP_ERROR = 0x100,
BSP_ERROR_ENTITY_LIST_FULL = 0x200,
BSP_ERROR_UNSUPPORTED_METHOD = 0x400,
BSP_ERROR_UNKNOWN_HARDWARE_VERSION = 0x800,
BSP_ERROR_QUERY_UNAVAILABLE = 0x1000,
BSP_ERROR_UNKNOWN_DEVICE = 0x2000,
BSP_ERROR_INVALID_PARAMETER = 0x4000,
BSP_ERROR_DEVICE_NOT_FOUND = 0x8000,
BSP_ERROR_REQUEST_DENIED = 0x10000,
BSP_ERROR_UNSUPPORTED_PARAMETER = 0x20000,
BSP_ERROR_BOARD_CONFIG_INVALID = 0x40000,
} BSPError;
typedef enum BSPHardwareVersions
{
BSP_HARDWARE_VERSION_UNKNOWN = 0x00000000,
BSP_HARDWARE_VERSION_UNKNOWN = 0x00000000,
// vWii Hardware Versions
BSP_HARDWARE_VERSION_HOLLYWOOD_ENG_SAMPLE_1 = 0x00000001,
BSP_HARDWARE_VERSION_HOLLYWOOD_ENG_SAMPLE_2 = 0x10000001,
BSP_HARDWARE_VERSION_HOLLYWOOD_PROD_FOR_WII = 0x10100001,
BSP_HARDWARE_VERSION_HOLLYWOOD_CORTADO = 0x10100008,
BSP_HARDWARE_VERSION_HOLLYWOOD_CORTADO_ESPRESSO = 0x1010000C,
BSP_HARDWARE_VERSION_BOLLYWOOD = 0x20000001,
BSP_HARDWARE_VERSION_BOLLYWOOD_PROD_FOR_WII = 0x20100001,
// vWii Hardware Versions
BSP_HARDWARE_VERSION_HOLLYWOOD_ENG_SAMPLE_1 = 0x00000001,
BSP_HARDWARE_VERSION_HOLLYWOOD_ENG_SAMPLE_2 = 0x10000001,
BSP_HARDWARE_VERSION_HOLLYWOOD_PROD_FOR_WII = 0x10100001,
BSP_HARDWARE_VERSION_HOLLYWOOD_CORTADO = 0x10100008,
BSP_HARDWARE_VERSION_HOLLYWOOD_CORTADO_ESPRESSO = 0x1010000C,
BSP_HARDWARE_VERSION_BOLLYWOOD = 0x20000001,
BSP_HARDWARE_VERSION_BOLLYWOOD_PROD_FOR_WII = 0x20100001,
// WiiU Hardware Versions
BSP_HARDWARE_VERSION_LATTE_A11_EV = 0x21100010,
BSP_HARDWARE_VERSION_LATTE_A11_CAT = 0x21100020,
BSP_HARDWARE_VERSION_LATTE_A12_EV = 0x21200010,
BSP_HARDWARE_VERSION_LATTE_A12_CAT = 0x21200020,
BSP_HARDWARE_VERSION_LATTE_A2X_EV = 0x22100010,
BSP_HARDWARE_VERSION_LATTE_A2X_CAT = 0x22100020,
BSP_HARDWARE_VERSION_LATTE_A3X_EV = 0x23100010,
BSP_HARDWARE_VERSION_LATTE_A3X_CAT = 0x23100020,
BSP_HARDWARE_VERSION_LATTE_A3X_CAFE = 0x23100028,
BSP_HARDWARE_VERSION_LATTE_A4X_EV = 0x24100010,
BSP_HARDWARE_VERSION_LATTE_A4X_CAT = 0x24100020,
BSP_HARDWARE_VERSION_LATTE_A4X_CAFE = 0x24100028,
BSP_HARDWARE_VERSION_LATTE_A5X_EV = 0x25100010,
BSP_HARDWARE_VERSION_LATTE_A5X_EV_Y = 0x25100011,
BSP_HARDWARE_VERSION_LATTE_A5X_CAT = 0x25100020,
BSP_HARDWARE_VERSION_LATTE_A5X_CAFE = 0x25100028,
BSP_HARDWARE_VERSION_LATTE_B1X_EV = 0x26100010,
BSP_HARDWARE_VERSION_LATTE_B1X_EV_Y = 0x26100011,
BSP_HARDWARE_VERSION_LATTE_B1X_CAT = 0x26100020,
BSP_HARDWARE_VERSION_LATTE_B1X_CAFE = 0x26100028
// WiiU Hardware Versions
BSP_HARDWARE_VERSION_LATTE_A11_EV = 0x21100010,
BSP_HARDWARE_VERSION_LATTE_A11_CAT = 0x21100020,
BSP_HARDWARE_VERSION_LATTE_A12_EV = 0x21200010,
BSP_HARDWARE_VERSION_LATTE_A12_CAT = 0x21200020,
BSP_HARDWARE_VERSION_LATTE_A2X_EV = 0x22100010,
BSP_HARDWARE_VERSION_LATTE_A2X_CAT = 0x22100020,
BSP_HARDWARE_VERSION_LATTE_A3X_EV = 0x23100010,
BSP_HARDWARE_VERSION_LATTE_A3X_CAT = 0x23100020,
BSP_HARDWARE_VERSION_LATTE_A3X_CAFE = 0x23100028,
BSP_HARDWARE_VERSION_LATTE_A4X_EV = 0x24100010,
BSP_HARDWARE_VERSION_LATTE_A4X_CAT = 0x24100020,
BSP_HARDWARE_VERSION_LATTE_A4X_CAFE = 0x24100028,
BSP_HARDWARE_VERSION_LATTE_A5X_EV = 0x25100010,
BSP_HARDWARE_VERSION_LATTE_A5X_EV_Y = 0x25100011,
BSP_HARDWARE_VERSION_LATTE_A5X_CAT = 0x25100020,
BSP_HARDWARE_VERSION_LATTE_A5X_CAFE = 0x25100028,
BSP_HARDWARE_VERSION_LATTE_B1X_EV = 0x26100010,
BSP_HARDWARE_VERSION_LATTE_B1X_EV_Y = 0x26100011,
BSP_HARDWARE_VERSION_LATTE_B1X_CAT = 0x26100020,
BSP_HARDWARE_VERSION_LATTE_B1X_CAFE = 0x26100028
} BSPHardwareVersions;
BSPError

View File

@ -191,7 +191,7 @@ DCTouchRange(void *addr,
void
ICInvalidateRange(void *addr,
uint32_t size);
void
OSMemoryBarrier();

View File

@ -33,10 +33,10 @@ extern "C" {
//! The memory permissions for the codegen area.
typedef enum OSCodegenSecMode
{
//! The area can be read or written to, but not executed.
CODEGEN_RW_ = 0,
//! The area can be read or executed, but not written to.
CODEGEN_R_X = 1,
//! The area can be read or written to, but not executed.
CODEGEN_RW_ = 0,
//! The area can be read or executed, but not written to.
CODEGEN_R_X = 1,
} OSCodegenSecMode;
/**

View File

@ -15,9 +15,10 @@ extern "C" {
//! A bitfield of enum OS_CONTEXT_STATE.
typedef uint16_t OSContextState;
enum OS_CONTEXT_STATE {
OS_CONTEXT_STATE_OSCALLBACK = 1 << 3,
OS_CONTEXT_STATE_USERMODE_SAVED = 1 << 4
enum OS_CONTEXT_STATE
{
OS_CONTEXT_STATE_OSCALLBACK = 1 << 3,
OS_CONTEXT_STATE_USERMODE_SAVED = 1 << 4
};
typedef struct OSContext OSContext;

View File

@ -12,48 +12,50 @@
extern "C" {
#endif
typedef enum COSReportLevel{
COS_REPORT_LEVEL_ERROR = 0,
COS_REPORT_LEVEL_WARN = 1,
COS_REPORT_LEVEL_INFO = 2,
COS_REPORT_LEVEL_VERBOSE = 3,
typedef enum COSReportLevel
{
COS_REPORT_LEVEL_ERROR = 0,
COS_REPORT_LEVEL_WARN = 1,
COS_REPORT_LEVEL_INFO = 2,
COS_REPORT_LEVEL_VERBOSE = 3,
} COSReportLevel;
typedef enum COSReportModule{
COS_REPORT_MODULE_UNKNOWN_0 = 0,
COS_REPORT_MODULE_UNKNOWN_1 = 1,
COS_REPORT_MODULE_UNKNOWN_2 = 2,
COS_REPORT_MODULE_UNKNOWN_5 = 5,
typedef enum COSReportModule
{
COS_REPORT_MODULE_UNKNOWN_0 = 0,
COS_REPORT_MODULE_UNKNOWN_1 = 1,
COS_REPORT_MODULE_UNKNOWN_2 = 2,
COS_REPORT_MODULE_UNKNOWN_5 = 5,
} COSReportModule;
void
COSVReport(COSReportModule module,
COSReportLevel level,
const char* fmt,
const char *fmt,
...)
WUT_FORMAT_PRINTF(3, 4);
void
COSError(COSReportModule module,
const char* fmt,
const char *fmt,
...)
WUT_FORMAT_PRINTF(2, 3);
void
COSInfo(COSReportModule module,
const char* fmt,
const char *fmt,
...)
WUT_FORMAT_PRINTF(2, 3);
void
COSVerbose(COSReportModule module,
const char* fmt,
const char *fmt,
...)
WUT_FORMAT_PRINTF(2, 3);
void
COSWarn(COSReportModule module,
const char* fmt,
const char *fmt,
...)
WUT_FORMAT_PRINTF(2, 3);

View File

@ -24,18 +24,18 @@ typedef enum DisassemblePPCFlags
typedef enum OSFatalErrorMessageType
{
OS_FATAL_ERROR_UNKOWN = 0,
OS_FATAL_ERROR_GENERAL = 1,
OS_FATAL_ERROR_UNKOWN = 0,
OS_FATAL_ERROR_GENERAL = 1,
//! These are only valid for errorCode 1600200 - 1609999
OS_FATAL_ERROR_CORRUPTION = 2,
OS_FATAL_ERROR_FATAL_SYSTEM_OR_USB = 3,
OS_FATAL_ERROR_CORRUPTION_SLC = 4,
OS_FATAL_ERROR_CORRUPTION_USB = 5,
OS_FATAL_ERROR_STORAGE_REMOVED = 6,
OS_FATAL_ERROR_DISC_REMOVED = 7,
OS_FATAL_ERROR_CORRUPTION_DISC = 8,
OS_FATAL_ERROR_WRITE_PROTECT = 9,
OS_FATAL_ERROR_CORRUPTION = 2,
OS_FATAL_ERROR_FATAL_SYSTEM_OR_USB = 3,
OS_FATAL_ERROR_CORRUPTION_SLC = 4,
OS_FATAL_ERROR_CORRUPTION_USB = 5,
OS_FATAL_ERROR_STORAGE_REMOVED = 6,
OS_FATAL_ERROR_DISC_REMOVED = 7,
OS_FATAL_ERROR_CORRUPTION_DISC = 8,
OS_FATAL_ERROR_WRITE_PROTECT = 9,
} OSFatalErrorMessageType;
struct OSFatalError
@ -87,7 +87,8 @@ OSReportWarn(const char *fmt, ...)
void
OSPanic(const char *file,
uint32_t line,
const char *fmt, ...)
const char *fmt,
...)
WUT_FORMAT_PRINTF(3, 4);

View File

@ -23,31 +23,32 @@ typedef struct OSDynLoad_InternalData OSDynLoad_InternalData;
typedef enum OSDynLoad_Error
{
OS_DYNLOAD_OK = 0,
OS_DYNLOAD_OUT_OF_MEMORY = 0xBAD10002,
OS_DYNLOAD_INVALID_NOTIFY_PTR = 0xBAD1000E,
OS_DYNLOAD_INVALID_MODULE_NAME_PTR = 0xBAD1000F,
OS_DYNLOAD_INVALID_MODULE_NAME = 0xBAD10010,
OS_DYNLOAD_INVALID_ACQUIRE_PTR = 0xBAD10011,
OS_DYNLOAD_EMPTY_MODULE_NAME = 0xBAD10012,
OS_DYNLOAD_INVALID_ALLOCATOR_PTR = 0xBAD10017,
OS_DYNLOAD_OUT_OF_SYSTEM_MEMORY = 0xBAD1002F,
OS_DYNLOAD_TLS_ALLOCATOR_LOCKED = 0xBAD10031,
OS_DYNLOAD_MODULE_NOT_FOUND = 0xFFFFFFFA,
OS_DYNLOAD_OK = 0,
OS_DYNLOAD_OUT_OF_MEMORY = 0xBAD10002,
OS_DYNLOAD_INVALID_NOTIFY_PTR = 0xBAD1000E,
OS_DYNLOAD_INVALID_MODULE_NAME_PTR = 0xBAD1000F,
OS_DYNLOAD_INVALID_MODULE_NAME = 0xBAD10010,
OS_DYNLOAD_INVALID_ACQUIRE_PTR = 0xBAD10011,
OS_DYNLOAD_EMPTY_MODULE_NAME = 0xBAD10012,
OS_DYNLOAD_INVALID_ALLOCATOR_PTR = 0xBAD10017,
OS_DYNLOAD_OUT_OF_SYSTEM_MEMORY = 0xBAD1002F,
OS_DYNLOAD_TLS_ALLOCATOR_LOCKED = 0xBAD10031,
OS_DYNLOAD_MODULE_NOT_FOUND = 0xFFFFFFFA,
} OSDynLoad_Error;
typedef OSDynLoad_Error (*OSDynLoadAllocFn)(int32_t size, int32_t align, void **outAddr);
typedef void (*OSDynLoadFreeFn)(void *addr);
typedef enum OSDynLoad_ExportType {
OS_DYNLOAD_EXPORT_FUNC = 0,
OS_DYNLOAD_EXPORT_DATA = 1,
typedef enum OSDynLoad_ExportType
{
OS_DYNLOAD_EXPORT_FUNC = 0,
OS_DYNLOAD_EXPORT_DATA = 1,
} OSDynLoad_ExportType;
typedef enum OSDynLoad_EntryReason
{
OS_DYNLOAD_LOADED = 1,
OS_DYNLOAD_UNLOADED = 2,
OS_DYNLOAD_LOADED = 1,
OS_DYNLOAD_UNLOADED = 2,
} OSDynLoad_EntryReason;
struct OSDynLoad_NotifyData
@ -97,18 +98,18 @@ WUT_CHECK_SIZE(OSDynLoad_LoaderHeapStatistics, 0x18);
struct OSDynLoad_LoaderUserFileInfo
{
uint32_t size;
uint32_t magic;
uint32_t pathStringLength;
char *pathString;
uint32_t fileInfoFlags;
int16_t tlsModuleIndex;
int16_t tlsAlignShift;
void *tlsAddressStart;
uint32_t tlsSectionSize;
uint32_t shstrndx;
uint32_t titleLocation;
WUT_UNKNOWN_BYTES(0x60 - 0x28);
uint32_t size;
uint32_t magic;
uint32_t pathStringLength;
char *pathString;
uint32_t fileInfoFlags;
int16_t tlsModuleIndex;
int16_t tlsAlignShift;
void *tlsAddressStart;
uint32_t tlsSectionSize;
uint32_t shstrndx;
uint32_t titleLocation;
WUT_UNKNOWN_BYTES(0x60 - 0x28);
};
WUT_CHECK_OFFSET(OSDynLoad_LoaderUserFileInfo, 0x00, size);
WUT_CHECK_OFFSET(OSDynLoad_LoaderUserFileInfo, 0x04, magic);
@ -126,17 +127,18 @@ WUT_CHECK_SIZE(OSDynLoad_LoaderUserFileInfo, 0x60);
struct OSDynLoad_LoaderSectionInfo
{
uint32_t type;
uint32_t flags;
void *address;
uint32_t type;
uint32_t flags;
void *address;
union {
//! Size of the section, set when type != SHT_RPL_IMPORTS
uint32_t size;
union
{
//! Size of the section, set when type != SHT_RPL_IMPORTS
uint32_t size;
//! Name offset of the section, set when type == SHT_RPL_IMPORTS
uint32_t name;
};
//! Name offset of the section, set when type == SHT_RPL_IMPORTS
uint32_t name;
};
};
WUT_CHECK_OFFSET(OSDynLoad_LoaderSectionInfo, 0x00, type);
WUT_CHECK_OFFSET(OSDynLoad_LoaderSectionInfo, 0x04, flags);
@ -148,29 +150,29 @@ WUT_CHECK_SIZE(OSDynLoad_LoaderSectionInfo, 0x10);
struct OSDynLoad_InternalData
{
uint32_t handle;
void *loaderHandle;
char *moduleName;
uint32_t moduleNameLen;
uint32_t sectionInfoCount;
OSDynLoad_LoaderSectionInfo *sectionInfo;
OSDynLoad_InternalData **importModules;
uint32_t importModuleCount;
uint32_t userFileInfoSize;
OSDynLoad_LoaderUserFileInfo *userFileInfo;
OSDynLoad_NotifyData *notifyData;
void *entryPoint;
uint32_t dataSectionSize;
void *dataSection;
uint32_t loadSectionSize;
void *loadSection;
OSDynLoadFreeFn dynLoadFreeFn;
void *codeExports;
uint32_t numCodeExports;
void *dataExports;
uint32_t numDataExports;
OSDynLoad_InternalData *next;
WUT_UNKNOWN_BYTES(0x94 - 0x58);
uint32_t handle;
void *loaderHandle;
char *moduleName;
uint32_t moduleNameLen;
uint32_t sectionInfoCount;
OSDynLoad_LoaderSectionInfo *sectionInfo;
OSDynLoad_InternalData **importModules;
uint32_t importModuleCount;
uint32_t userFileInfoSize;
OSDynLoad_LoaderUserFileInfo *userFileInfo;
OSDynLoad_NotifyData *notifyData;
void *entryPoint;
uint32_t dataSectionSize;
void *dataSection;
uint32_t loadSectionSize;
void *loadSection;
OSDynLoadFreeFn dynLoadFreeFn;
void *codeExports;
uint32_t numCodeExports;
void *dataExports;
uint32_t numDataExports;
OSDynLoad_InternalData *next;
WUT_UNKNOWN_BYTES(0x94 - 0x58);
};
WUT_CHECK_OFFSET(OSDynLoad_InternalData, 0x00, handle);
WUT_CHECK_OFFSET(OSDynLoad_InternalData, 0x04, loaderHandle);
@ -198,8 +200,8 @@ WUT_CHECK_SIZE(OSDynLoad_InternalData, 0x94);
typedef enum OSDynLoad_NotifyReason
{
OS_DYNLOAD_NOTIFY_UNLOADED = 0,
OS_DYNLOAD_NOTIFY_LOADED = 1
OS_DYNLOAD_NOTIFY_UNLOADED = 0,
OS_DYNLOAD_NOTIFY_LOADED = 1
} OSDynLoad_NotifyReason;
typedef void (*OSDynLoadNotifyFunc)(OSDynLoad_Module module,
@ -328,14 +330,14 @@ OSDynLoad_IsModuleLoaded(char const *name,
* Registers a callback that's called whenever a new .rpl is loaded or unloaded
**/
OSDynLoad_Error
OSDynLoad_AddNotifyCallback(OSDynLoadNotifyFunc notifyFn,
OSDynLoad_AddNotifyCallback(OSDynLoadNotifyFunc notifyFn,
void *userContext);
/**
* Removes a previously added a callback
**/
OSDynLoad_Error
OSDynLoad_DelNotifyCallback(OSDynLoadNotifyFunc notifyFn,
OSDynLoad_DelNotifyCallback(OSDynLoadNotifyFunc notifyFn,
void *userContext);
/**

View File

@ -22,10 +22,10 @@ typedef struct OSEvent OSEvent;
typedef enum OSEventMode
{
//! A manual event will only reset when OSResetEvent is called.
OS_EVENT_MODE_MANUAL = 0,
OS_EVENT_MODE_MANUAL = 0,
//! An auto event will reset everytime a thread is woken.
OS_EVENT_MODE_AUTO = 1,
OS_EVENT_MODE_AUTO = 1,
} OSEventMode;
#define OS_EVENT_TAG 0x65566E54u

View File

@ -16,30 +16,30 @@ typedef BOOL (*OSExceptionCallbackFn)(OSContext *context);
typedef enum OSExceptionMode
{
OS_EXCEPTION_MODE_SYSTEM = 0,
OS_EXCEPTION_MODE_THREAD = 1,
OS_EXCEPTION_MODE_GLOBAL = 2,
OS_EXCEPTION_MODE_THREAD_ALL_CORES = 3,
OS_EXCEPTION_MODE_GLOBAL_ALL_CORES = 4,
OS_EXCEPTION_MODE_SYSTEM = 0,
OS_EXCEPTION_MODE_THREAD = 1,
OS_EXCEPTION_MODE_GLOBAL = 2,
OS_EXCEPTION_MODE_THREAD_ALL_CORES = 3,
OS_EXCEPTION_MODE_GLOBAL_ALL_CORES = 4,
} OSExceptionMode;
typedef enum OSExceptionType
{
OS_EXCEPTION_TYPE_SYSTEM_RESET = 0,
OS_EXCEPTION_TYPE_MACHINE_CHECK = 1,
OS_EXCEPTION_TYPE_DSI = 2,
OS_EXCEPTION_TYPE_ISI = 3,
OS_EXCEPTION_TYPE_EXTERNAL_INTERRUPT = 4,
OS_EXCEPTION_TYPE_ALIGNMENT = 5,
OS_EXCEPTION_TYPE_PROGRAM = 6,
OS_EXCEPTION_TYPE_FLOATING_POINT = 7,
OS_EXCEPTION_TYPE_DECREMENTER = 8,
OS_EXCEPTION_TYPE_SYSTEM_CALL = 9,
OS_EXCEPTION_TYPE_TRACE = 10,
OS_EXCEPTION_TYPE_PERFORMANCE_MONITOR = 11,
OS_EXCEPTION_TYPE_BREAKPOINT = 12,
OS_EXCEPTION_TYPE_SYSTEM_INTERRUPT = 13,
OS_EXCEPTION_TYPE_ICI = 14,
OS_EXCEPTION_TYPE_SYSTEM_RESET = 0,
OS_EXCEPTION_TYPE_MACHINE_CHECK = 1,
OS_EXCEPTION_TYPE_DSI = 2,
OS_EXCEPTION_TYPE_ISI = 3,
OS_EXCEPTION_TYPE_EXTERNAL_INTERRUPT = 4,
OS_EXCEPTION_TYPE_ALIGNMENT = 5,
OS_EXCEPTION_TYPE_PROGRAM = 6,
OS_EXCEPTION_TYPE_FLOATING_POINT = 7,
OS_EXCEPTION_TYPE_DECREMENTER = 8,
OS_EXCEPTION_TYPE_SYSTEM_CALL = 9,
OS_EXCEPTION_TYPE_TRACE = 10,
OS_EXCEPTION_TYPE_PERFORMANCE_MONITOR = 11,
OS_EXCEPTION_TYPE_BREAKPOINT = 12,
OS_EXCEPTION_TYPE_SYSTEM_INTERRUPT = 13,
OS_EXCEPTION_TYPE_ICI = 14,
} OSExceptionType;
OSExceptionCallbackFn

View File

@ -13,8 +13,7 @@ extern "C" {
#endif
typedef void (*OSFiberEntryFn)();
typedef void (*OSFiberExEntryFn)(uint32_t arg1, uint32_t arg2,
uint32_t arg3, uint32_t arg4);
typedef void (*OSFiberExEntryFn)(uint32_t arg1, uint32_t arg2, uint32_t arg3, uint32_t arg4);
int32_t
OSSwitchFiber(OSFiberEntryFn entry,

View File

@ -1,10 +1,10 @@
#pragma once
#include <wut.h>
#include <coreinit/alarm.h>
#include <coreinit/fastmutex.h>
#include <coreinit/ios.h>
#include <coreinit/messagequeue.h>
#include <coreinit/time.h>
#include <coreinit/ios.h>
#include <coreinit/fastmutex.h>
#include <coreinit/alarm.h>
/**
* \defgroup coreinit_fs Filesystem
@ -25,7 +25,7 @@
extern "C" {
#endif
#define FS_MAX_PATH (0x27F)
#define FS_MAX_PATH (0x27F)
#define FS_MODE_LENGTH (0x10)
typedef uint32_t FSDirectoryHandle;
@ -52,100 +52,100 @@ typedef struct FSVolumeInfo FSVolumeInfo;
typedef enum FSErrorFlag
{
FS_ERROR_FLAG_NONE = 0x0,
FS_ERROR_FLAG_MAX = 0x1,
FS_ERROR_FLAG_ALREADY_OPEN = 0x2,
FS_ERROR_FLAG_EXISTS = 0x4,
FS_ERROR_FLAG_NOT_FOUND = 0x8,
FS_ERROR_FLAG_NOT_FILE = 0x10,
FS_ERROR_FLAG_NOT_DIR = 0x20,
FS_ERROR_FLAG_ACCESS_ERROR = 0x40,
FS_ERROR_FLAG_PERMISSION_ERROR = 0x80,
FS_ERROR_FLAG_FILE_TOO_BIG = 0x100,
FS_ERROR_FLAG_STORAGE_FULL = 0x200,
FS_ERROR_FLAG_UNSUPPORTED_CMD = 0x400,
FS_ERROR_FLAG_JOURNAL_FULL = 0x800,
FS_ERROR_FLAG_ALL = 0xFFFFFFFF,
FS_ERROR_FLAG_NONE = 0x0,
FS_ERROR_FLAG_MAX = 0x1,
FS_ERROR_FLAG_ALREADY_OPEN = 0x2,
FS_ERROR_FLAG_EXISTS = 0x4,
FS_ERROR_FLAG_NOT_FOUND = 0x8,
FS_ERROR_FLAG_NOT_FILE = 0x10,
FS_ERROR_FLAG_NOT_DIR = 0x20,
FS_ERROR_FLAG_ACCESS_ERROR = 0x40,
FS_ERROR_FLAG_PERMISSION_ERROR = 0x80,
FS_ERROR_FLAG_FILE_TOO_BIG = 0x100,
FS_ERROR_FLAG_STORAGE_FULL = 0x200,
FS_ERROR_FLAG_UNSUPPORTED_CMD = 0x400,
FS_ERROR_FLAG_JOURNAL_FULL = 0x800,
FS_ERROR_FLAG_ALL = 0xFFFFFFFF,
} FSErrorFlag;
typedef enum FSStatus
{
FS_STATUS_OK = 0,
FS_STATUS_CANCELLED = -1,
FS_STATUS_END = -2,
FS_STATUS_MAX = -3,
FS_STATUS_ALREADY_OPEN = -4,
FS_STATUS_EXISTS = -5,
FS_STATUS_NOT_FOUND = -6,
FS_STATUS_NOT_FILE = -7,
FS_STATUS_NOT_DIR = -8,
FS_STATUS_ACCESS_ERROR = -9,
FS_STATUS_PERMISSION_ERROR = -10,
FS_STATUS_FILE_TOO_BIG = -11,
FS_STATUS_STORAGE_FULL = -12,
FS_STATUS_JOURNAL_FULL = -13,
FS_STATUS_UNSUPPORTED_CMD = -14,
FS_STATUS_MEDIA_NOT_READY = -15,
FS_STATUS_MEDIA_ERROR = -17,
FS_STATUS_CORRUPTED = -18,
FS_STATUS_FATAL_ERROR = -0x400,
FS_STATUS_OK = 0,
FS_STATUS_CANCELLED = -1,
FS_STATUS_END = -2,
FS_STATUS_MAX = -3,
FS_STATUS_ALREADY_OPEN = -4,
FS_STATUS_EXISTS = -5,
FS_STATUS_NOT_FOUND = -6,
FS_STATUS_NOT_FILE = -7,
FS_STATUS_NOT_DIR = -8,
FS_STATUS_ACCESS_ERROR = -9,
FS_STATUS_PERMISSION_ERROR = -10,
FS_STATUS_FILE_TOO_BIG = -11,
FS_STATUS_STORAGE_FULL = -12,
FS_STATUS_JOURNAL_FULL = -13,
FS_STATUS_UNSUPPORTED_CMD = -14,
FS_STATUS_MEDIA_NOT_READY = -15,
FS_STATUS_MEDIA_ERROR = -17,
FS_STATUS_CORRUPTED = -18,
FS_STATUS_FATAL_ERROR = -0x400,
} FSStatus;
typedef enum FSError
{
FS_ERROR_OK = 0,
FS_ERROR_NOT_INIT = -0x30001,
FS_ERROR_BUSY = -0x30002,
FS_ERROR_CANCELLED = -0x30003,
FS_ERROR_END_OF_DIR = -0x30004,
FS_ERROR_END_OF_FILE = -0x30005,
FS_ERROR_MAX_MOUNT_POINTS = -0x30010,
FS_ERROR_MAX_VOLUMES = -0x30011,
FS_ERROR_MAX_CLIENTS = -0x30012,
FS_ERROR_MAX_FILES = -0x30013,
FS_ERROR_MAX_DIRS = -0x30014,
FS_ERROR_ALREADY_OPEN = -0x30015,
FS_ERROR_ALREADY_EXISTS = -0x30016,
FS_ERROR_NOT_FOUND = -0x30017,
FS_ERROR_NOT_EMPTY = -0x30018,
FS_ERROR_ACCESS_ERROR = -0x30019,
FS_ERROR_PERMISSION_ERROR = -0x3001A,
FS_ERROR_DATA_CORRUPTED = -0x3001B,
FS_ERROR_STORAGE_FULL = -0x3001C,
FS_ERROR_JOURNAL_FULL = -0x3001D,
FS_ERROR_UNAVAILABLE_COMMAND = -0x3001F,
FS_ERROR_UNSUPPORTED_COMMAND = -0x30020,
FS_ERROR_INVALID_PARAM = -0x30021,
FS_ERROR_INVALID_PATH = -0x30022,
FS_ERROR_INVALID_BUFFER = -0x30023,
FS_ERROR_INVALID_ALIGNMENT = -0x30024,
FS_ERROR_INVALID_CLIENTHANDLE = -0x30025,
FS_ERROR_INVALID_FILEHANDLE = -0x30026,
FS_ERROR_INVALID_DIRHANDLE = -0x30027,
FS_ERROR_NOT_FILE = -0x30028,
FS_ERROR_NOT_DIR = -0x30029,
FS_ERROR_FILE_TOO_BIG = -0x3002A,
FS_ERROR_OUT_OF_RANGE = -0x3002B,
FS_ERROR_OUT_OF_RESOURCES = -0x3002C,
FS_ERROR_MEDIA_NOT_READY = -0x30040,
FS_ERROR_MEDIA_ERROR = -0x30041,
FS_ERROR_WRITE_PROTECTED = -0x30042,
FS_ERROR_INVALID_MEDIA = -0x30043,
FS_ERROR_OK = 0,
FS_ERROR_NOT_INIT = -0x30001,
FS_ERROR_BUSY = -0x30002,
FS_ERROR_CANCELLED = -0x30003,
FS_ERROR_END_OF_DIR = -0x30004,
FS_ERROR_END_OF_FILE = -0x30005,
FS_ERROR_MAX_MOUNT_POINTS = -0x30010,
FS_ERROR_MAX_VOLUMES = -0x30011,
FS_ERROR_MAX_CLIENTS = -0x30012,
FS_ERROR_MAX_FILES = -0x30013,
FS_ERROR_MAX_DIRS = -0x30014,
FS_ERROR_ALREADY_OPEN = -0x30015,
FS_ERROR_ALREADY_EXISTS = -0x30016,
FS_ERROR_NOT_FOUND = -0x30017,
FS_ERROR_NOT_EMPTY = -0x30018,
FS_ERROR_ACCESS_ERROR = -0x30019,
FS_ERROR_PERMISSION_ERROR = -0x3001A,
FS_ERROR_DATA_CORRUPTED = -0x3001B,
FS_ERROR_STORAGE_FULL = -0x3001C,
FS_ERROR_JOURNAL_FULL = -0x3001D,
FS_ERROR_UNAVAILABLE_COMMAND = -0x3001F,
FS_ERROR_UNSUPPORTED_COMMAND = -0x30020,
FS_ERROR_INVALID_PARAM = -0x30021,
FS_ERROR_INVALID_PATH = -0x30022,
FS_ERROR_INVALID_BUFFER = -0x30023,
FS_ERROR_INVALID_ALIGNMENT = -0x30024,
FS_ERROR_INVALID_CLIENTHANDLE = -0x30025,
FS_ERROR_INVALID_FILEHANDLE = -0x30026,
FS_ERROR_INVALID_DIRHANDLE = -0x30027,
FS_ERROR_NOT_FILE = -0x30028,
FS_ERROR_NOT_DIR = -0x30029,
FS_ERROR_FILE_TOO_BIG = -0x3002A,
FS_ERROR_OUT_OF_RANGE = -0x3002B,
FS_ERROR_OUT_OF_RESOURCES = -0x3002C,
FS_ERROR_MEDIA_NOT_READY = -0x30040,
FS_ERROR_MEDIA_ERROR = -0x30041,
FS_ERROR_WRITE_PROTECTED = -0x30042,
FS_ERROR_INVALID_MEDIA = -0x30043,
} FSError;
typedef enum FSMode
{
FS_MODE_READ_OWNER = 0x400,
FS_MODE_WRITE_OWNER = 0x200,
FS_MODE_EXEC_OWNER = 0x100,
FS_MODE_READ_OWNER = 0x400,
FS_MODE_WRITE_OWNER = 0x200,
FS_MODE_EXEC_OWNER = 0x100,
FS_MODE_READ_GROUP = 0x040,
FS_MODE_WRITE_GROUP = 0x020,
FS_MODE_EXEC_GROUP = 0x010,
FS_MODE_READ_GROUP = 0x040,
FS_MODE_WRITE_GROUP = 0x020,
FS_MODE_EXEC_GROUP = 0x010,
FS_MODE_READ_OTHER = 0x004,
FS_MODE_WRITE_OTHER = 0x002,
FS_MODE_EXEC_OTHER = 0x001,
FS_MODE_READ_OTHER = 0x004,
FS_MODE_WRITE_OTHER = 0x002,
FS_MODE_EXEC_OTHER = 0x001,
} FSMode;
//! Flags for \link FSStat \endlink.
@ -153,81 +153,83 @@ typedef enum FSMode
typedef enum FSStatFlags
{
//! The retrieved file entry is a (link to a) directory.
FS_STAT_DIRECTORY = 0x80000000,
FS_STAT_DIRECTORY = 0x80000000,
//! The retrieved file entry also has a quota set.
FS_STAT_QUOTA = 0x60000000,
FS_STAT_QUOTA = 0x60000000,
//! The retrieved file entry is a (link to a) file.
FS_STAT_FILE = 0x01000000,
FS_STAT_FILE = 0x01000000,
//! The retrieved file entry also is encrypted and can't be opened (see vWii files for example).
FS_STAT_ENCRYPTED_FILE = 0x00800000,
FS_STAT_ENCRYPTED_FILE = 0x00800000,
//! The retrieved file entry also is a link to a different file on the filesystem.
//! Note: It's currently not known how one can read the linked-to file entry.
FS_STAT_LINK = 0x00010000,
FS_STAT_LINK = 0x00010000,
} FSStatFlags;
typedef enum FSVolumeState
{
FS_VOLUME_STATE_INITIAL = 0,
FS_VOLUME_STATE_READY = 1,
FS_VOLUME_STATE_NO_MEDIA = 2,
FS_VOLUME_STATE_INVALID_MEDIA = 3,
FS_VOLUME_STATE_DIRTY_MEDIA = 4,
FS_VOLUME_STATE_WRONG_MEDIA = 5,
FS_VOLUME_STATE_MEDIA_ERROR = 6,
FS_VOLUME_STATE_DATA_CORRUPTED = 7,
FS_VOLUME_STATE_WRITE_PROTECTED = 8,
FS_VOLUME_STATE_JOURNAL_FULL = 9,
FS_VOLUME_STATE_FATAL = 10,
FS_VOLUME_STATE_INVALID = 11,
FS_VOLUME_STATE_INITIAL = 0,
FS_VOLUME_STATE_READY = 1,
FS_VOLUME_STATE_NO_MEDIA = 2,
FS_VOLUME_STATE_INVALID_MEDIA = 3,
FS_VOLUME_STATE_DIRTY_MEDIA = 4,
FS_VOLUME_STATE_WRONG_MEDIA = 5,
FS_VOLUME_STATE_MEDIA_ERROR = 6,
FS_VOLUME_STATE_DATA_CORRUPTED = 7,
FS_VOLUME_STATE_WRITE_PROTECTED = 8,
FS_VOLUME_STATE_JOURNAL_FULL = 9,
FS_VOLUME_STATE_FATAL = 10,
FS_VOLUME_STATE_INVALID = 11,
} FSVolumeState;
typedef enum FSMediaState {
FS_MEDIA_STATE_READY = 0,
FS_MEDIA_STATE_NO_MEDIA = 1,
FS_MEDIA_STATE_INVALID_MEDIA = 2,
FS_MEDIA_STATE_DIRTY_MEDIA = 3,
FS_MEDIA_STATE_MEDIA_ERROR = 4,
typedef enum FSMediaState
{
FS_MEDIA_STATE_READY = 0,
FS_MEDIA_STATE_NO_MEDIA = 1,
FS_MEDIA_STATE_INVALID_MEDIA = 2,
FS_MEDIA_STATE_DIRTY_MEDIA = 3,
FS_MEDIA_STATE_MEDIA_ERROR = 4,
} FSMediaState;
typedef enum FSMountSourceType {
FS_MOUNT_SOURCE_SD = 0,
FS_MOUNT_SOURCE_UNK = 1,
typedef enum FSMountSourceType
{
FS_MOUNT_SOURCE_SD = 0,
FS_MOUNT_SOURCE_UNK = 1,
} FSMountSourceType;
typedef enum FSOpenFileFlags
{
//! Open file normally
FS_OPEN_FLAG_NONE = (0 << 0),
FS_OPEN_FLAG_NONE = (0 << 0),
//! Open (new) unencrypted file. Used for vWii files since it allows for direct access without the Wii U filesystem through it's block address.
FS_OPEN_FLAG_UNENCRYPTED = (1 << 0),
FS_OPEN_FLAG_UNENCRYPTED = (1 << 0),
//! Preallocates new file size using given size
FS_OPEN_FLAG_PREALLOC_SIZE = (1 << 1)
} FSOpenFileFlags;
typedef void(*FSAsyncCallback)(FSClient *, FSCmdBlock *, FSStatus, uint32_t);
typedef void(*FSStateChangeCallback)(FSClient *, FSVolumeState, void *);
typedef void (*FSAsyncCallback)(FSClient *, FSCmdBlock *, FSStatus, uint32_t);
typedef void (*FSStateChangeCallback)(FSClient *, FSVolumeState, void *);
struct FSFsm
{
WUT_UNKNOWN_BYTES(0x38);
WUT_UNKNOWN_BYTES(0x38);
};
WUT_CHECK_SIZE(FSFsm, 0x38);
struct FSCmdQueue
{
WUT_UNKNOWN_BYTES(0x44);
WUT_UNKNOWN_BYTES(0x44);
};
WUT_CHECK_SIZE(FSCmdQueue, 0x44);
struct FSMessage
{
//! Message data
void *data;
//! Message data
void *data;
WUT_UNKNOWN_BYTES(8);
WUT_UNKNOWN_BYTES(8);
//! Type of message
OSFunctionType type;
//! Type of message
OSFunctionType type;
};
WUT_CHECK_OFFSET(FSMessage, 0x00, data);
WUT_CHECK_OFFSET(FSMessage, 0x0C, type);
@ -238,8 +240,8 @@ WUT_CHECK_SIZE(FSMessage, 0x10);
*/
struct FSClientBodyLink
{
FSClientBody* next;
FSClientBody* prev;
FSClientBody *next;
FSClientBody *prev;
};
WUT_CHECK_OFFSET(FSClientBodyLink, 0x00, next);
WUT_CHECK_OFFSET(FSClientBodyLink, 0x04, prev);
@ -247,52 +249,52 @@ WUT_CHECK_SIZE(FSClientBodyLink, 0x8);
struct FSClientBody
{
WUT_UNKNOWN_BYTES(0x1444);
WUT_UNKNOWN_BYTES(0x1444);
//! IOSHandle returned from fsaShimOpen.
IOSHandle clientHandle;
//! IOSHandle returned from fsaShimOpen.
IOSHandle clientHandle;
//! State machine.
FSFsm fsm;
//! State machine.
FSFsm fsm;
//! Command queue of FS commands.
FSCmdQueue cmdQueue;
//! Command queue of FS commands.
FSCmdQueue cmdQueue;
//! The last dequeued command.
FSCmdBlockBody* lastDequeuedCommand;
//! The last dequeued command.
FSCmdBlockBody *lastDequeuedCommand;
//! Emulated error, set with FSSetEmulatedError.
FSError emulatedError;
//! Emulated error, set with FSSetEmulatedError.
FSError emulatedError;
WUT_UNKNOWN_BYTES(0x1560 - 0x14CC);
WUT_UNKNOWN_BYTES(0x1560 - 0x14CC);
//! Mutex used to protect FSClientBody data.
OSFastMutex mutex;
//! Mutex used to protect FSClientBody data.
OSFastMutex mutex;
WUT_UNKNOWN_BYTES(4);
WUT_UNKNOWN_BYTES(4);
//! Alarm used by fsm for unknown reasons.
OSAlarm fsmAlarm;
//! Alarm used by fsm for unknown reasons.
OSAlarm fsmAlarm;
//! Error of last FS command.
FSError lastError;
//! Error of last FS command.
FSError lastError;
bool isLastErrorWithoutVolume;
bool isLastErrorWithoutVolume;
//! Message used to send FsCmdHandler message when FSA async callback is received.
FSMessage fsCmdHandlerMsg;
//! Message used to send FsCmdHandler message when FSA async callback is received.
FSMessage fsCmdHandlerMsg;
//! Device name of the last mount source returned by FSGetMountSourceNext.
char lastMountSourceDevice[0x10];
//! Device name of the last mount source returned by FSGetMountSourceNext.
char lastMountSourceDevice[0x10];
//! Mount source type to find with FSGetMountSourceNext.
FSMountSourceType findMountSourceType;
//! Mount source type to find with FSGetMountSourceNext.
FSMountSourceType findMountSourceType;
//! Link used for linked list of clients.
FSClientBodyLink link;
//! Link used for linked list of clients.
FSClientBodyLink link;
//! Pointer to unaligned FSClient structure.
FSClient* client;
//! Pointer to unaligned FSClient structure.
FSClient *client;
};
WUT_CHECK_OFFSET(FSClientBody, 0x1444, clientHandle);
WUT_CHECK_OFFSET(FSClientBody, 0x1448, fsm);
@ -397,10 +399,11 @@ WUT_CHECK_OFFSET(FSAsyncResult, 0x20, block);
WUT_CHECK_OFFSET(FSAsyncResult, 0x24, status);
WUT_CHECK_SIZE(FSAsyncResult, 0x28);
struct FSCmdBlockBody {
WUT_UNKNOWN_BYTES(0x96C);
FSAsyncResult asyncResult;
WUT_UNKNOWN_BYTES(0x68);
struct FSCmdBlockBody
{
WUT_UNKNOWN_BYTES(0x96C);
FSAsyncResult asyncResult;
WUT_UNKNOWN_BYTES(0x68);
};
WUT_CHECK_OFFSET(FSCmdBlockBody, 0x96C, asyncResult);
WUT_CHECK_SIZE(FSCmdBlockBody, 0x9FC);
@ -419,19 +422,20 @@ struct FSMountSource
};
WUT_CHECK_SIZE(FSMountSource, 0x300);
struct WUT_PACKED FSVolumeInfo {
uint32_t flags;
FSMediaState mediaState;
WUT_UNKNOWN_BYTES(0x4);
uint32_t unk0x0C;
uint32_t unk0x10;
int32_t unk0x14;
int32_t unk0x18;
WUT_UNKNOWN_BYTES(0x10);
char volumeLabel[128];
char volumeId[128];
char devicePath[16];
char mountPath[128];
struct WUT_PACKED FSVolumeInfo
{
uint32_t flags;
FSMediaState mediaState;
WUT_UNKNOWN_BYTES(0x4);
uint32_t unk0x0C;
uint32_t unk0x10;
int32_t unk0x14;
int32_t unk0x18;
WUT_UNKNOWN_BYTES(0x10);
char volumeLabel[128];
char volumeId[128];
char devicePath[16];
char mountPath[128];
};
WUT_CHECK_OFFSET(FSVolumeInfo, 0x00, flags);
WUT_CHECK_OFFSET(FSVolumeInfo, 0x04, mediaState);
@ -450,22 +454,24 @@ WUT_CHECK_SIZE(FSVolumeInfo, 444);
* Get an aligned FSClientBody from an FSClient.
*/
static inline FSClientBody *
FSGetClientBody(FSClient *client) {
FSGetClientBody(FSClient *client)
{
if (!client) {
return NULL;
}
return (FSClientBody *) ((((uint32_t) client) + 0x3F) & ~0x3F);
return (FSClientBody *)((((uint32_t)client) + 0x3F) & ~0x3F);
}
/**
* Get an aligned FSCmdBlockBody from an FSCmdBlock.
*/
static inline FSCmdBlockBody *
FSGetCmdBlockBody(FSCmdBlock *cmdBlock) {
FSGetCmdBlockBody(FSCmdBlock *cmdBlock)
{
if (!cmdBlock) {
return NULL;
}
return (FSCmdBlockBody *) ((((uint32_t) cmdBlock) + 0x3F) & ~0x3F);
return (FSCmdBlockBody *)((((uint32_t)cmdBlock) + 0x3F) & ~0x3F);
}
void
@ -536,16 +542,16 @@ FSGetStatAsync(FSClient *client,
FSStatus
FSRemove(FSClient *client,
FSCmdBlock *block,
const char *path,
FSErrorFlag errorMask);
FSCmdBlock *block,
const char *path,
FSErrorFlag errorMask);
FSStatus
FSRemoveAsync(FSClient *client,
FSCmdBlock *block,
const char *path,
FSErrorFlag errorMask,
FSAsyncData *asyncData);
FSCmdBlock *block,
const char *path,
FSErrorFlag errorMask,
FSAsyncData *asyncData);
FSStatus
@ -624,10 +630,10 @@ FSMakeDir(FSClient *client,
FSStatus
FSMakeDirAsync(FSClient *client,
FSCmdBlock *block,
const char *path,
FSErrorFlag errorMask,
FSAsyncData *asyncData);
FSCmdBlock *block,
const char *path,
FSErrorFlag errorMask,
FSAsyncData *asyncData);
FSStatus
FSReadDir(FSClient *client,
@ -646,9 +652,9 @@ FSReadDirAsync(FSClient *client,
FSStatus
FSRewindDir(FSClient *client,
FSCmdBlock *block,
FSDirectoryHandle handle,
FSErrorFlag errorMask);
FSCmdBlock *block,
FSDirectoryHandle handle,
FSErrorFlag errorMask);
FSStatus
FSCloseDir(FSClient *client,
@ -657,18 +663,18 @@ FSCloseDir(FSClient *client,
FSErrorFlag errorMask);
FSStatus
FSGetVolumeInfo(FSClient *client,
FSCmdBlock *block,
const char *path,
FSVolumeInfo *volumeInfo,
FSErrorFlag errorMask);
FSGetVolumeInfo(FSClient *client,
FSCmdBlock *block,
const char *path,
FSVolumeInfo *volumeInfo,
FSErrorFlag errorMask);
FSStatus
FSGetVolumeInfoAsync(FSClient *client,
FSCmdBlock *block,
const char *path,
FSVolumeInfo *volumeInfo,
FSErrorFlag errorMask,
FSGetVolumeInfoAsync(FSClient *client,
FSCmdBlock *block,
const char *path,
FSVolumeInfo *volumeInfo,
FSErrorFlag errorMask,
FSAsyncData *asyncData);
FSStatus
@ -770,47 +776,47 @@ FSReadFileWithPosAsync(FSClient *client,
FSStatus
FSWriteFile(FSClient *client,
FSCmdBlock *block,
uint8_t *buffer,
uint32_t size,
uint32_t count,
FSFileHandle handle,
uint32_t unk1,
FSErrorFlag errorMask);
FSCmdBlock *block,
uint8_t *buffer,
uint32_t size,
uint32_t count,
FSFileHandle handle,
uint32_t unk1,
FSErrorFlag errorMask);
FSStatus
FSWriteFileAsync(FSClient *client,
FSCmdBlock *block,
uint8_t *buffer,
uint32_t size,
uint32_t count,
FSFileHandle handle,
uint32_t unk1,
FSErrorFlag errorMask,
FSAsyncData *asyncData);
FSCmdBlock *block,
uint8_t *buffer,
uint32_t size,
uint32_t count,
FSFileHandle handle,
uint32_t unk1,
FSErrorFlag errorMask,
FSAsyncData *asyncData);
FSStatus
FSWriteFileWithPos(FSClient *client,
FSCmdBlock *block,
uint8_t *buffer,
uint32_t size,
uint32_t count,
uint32_t pos,
FSFileHandle handle,
uint32_t unk1,
FSErrorFlag errorMask);
FSCmdBlock *block,
uint8_t *buffer,
uint32_t size,
uint32_t count,
uint32_t pos,
FSFileHandle handle,
uint32_t unk1,
FSErrorFlag errorMask);
FSStatus
FSWriteFileWithPosAsync(FSClient *client,
FSCmdBlock *block,
uint8_t *buffer,
uint32_t size,
uint32_t count,
uint32_t pos,
FSFileHandle handle,
uint32_t unk1,
FSErrorFlag errorMask,
FSAsyncData *asyncData);
FSCmdBlock *block,
uint8_t *buffer,
uint32_t size,
uint32_t count,
uint32_t pos,
FSFileHandle handle,
uint32_t unk1,
FSErrorFlag errorMask,
FSAsyncData *asyncData);
FSStatus
FSGetPosFile(FSClient *client,
@ -844,44 +850,44 @@ FSSetPosFileAsync(FSClient *client,
FSStatus
FSFlushFile(FSClient *client,
FSCmdBlock *block,
FSFileHandle handle,
FSErrorFlag errorMask);
FSCmdBlock *block,
FSFileHandle handle,
FSErrorFlag errorMask);
FSStatus
FSFlushFileAsync(FSClient *client,
FSCmdBlock *block,
FSFileHandle handle,
FSErrorFlag errorMask,
FSAsyncData *asyncData);
FSCmdBlock *block,
FSFileHandle handle,
FSErrorFlag errorMask,
FSAsyncData *asyncData);
FSStatus
FSTruncateFile(FSClient *client,
FSCmdBlock *block,
FSFileHandle handle,
FSErrorFlag errorMask);
FSCmdBlock *block,
FSFileHandle handle,
FSErrorFlag errorMask);
FSStatus
FSTruncateFileAsync(FSClient *client,
FSCmdBlock *block,
FSFileHandle handle,
FSErrorFlag errorMask,
FSAsyncData *asyncData);
FSCmdBlock *block,
FSFileHandle handle,
FSErrorFlag errorMask,
FSAsyncData *asyncData);
FSStatus
FSRename(FSClient *client,
FSCmdBlock *block,
const char *oldPath,
const char *newPath,
FSErrorFlag errorMask);
FSCmdBlock *block,
const char *oldPath,
const char *newPath,
FSErrorFlag errorMask);
FSStatus
FSRenameAsync(FSClient *client,
FSCmdBlock *block,
const char *oldPath,
const char *newPath,
FSErrorFlag errorMask,
FSAsyncData *asyncData);
FSCmdBlock *block,
const char *oldPath,
const char *newPath,
FSErrorFlag errorMask,
FSAsyncData *asyncData);
FSVolumeState
FSGetVolumeState(FSClient *client);

View File

@ -82,19 +82,21 @@ typedef void (*FSAAsyncCallbackFn)(FSError result,
/**
* Block information.
*/
struct FSABlockInfo {
WUT_UNKNOWN_BYTES(0x14);
struct FSABlockInfo
{
WUT_UNKNOWN_BYTES(0x14);
};
WUT_CHECK_SIZE(FSABlockInfo, 0x14);
/**
* Device information.
*/
struct FSADeviceInfo {
WUT_UNKNOWN_BYTES(0x08);
uint64_t deviceSizeInSectors;
uint32_t deviceSectorSize;
WUT_UNKNOWN_BYTES(0x14);
struct FSADeviceInfo
{
WUT_UNKNOWN_BYTES(0x08);
uint64_t deviceSizeInSectors;
uint32_t deviceSectorSize;
WUT_UNKNOWN_BYTES(0x14);
};
WUT_CHECK_OFFSET(FSADeviceInfo, 0x08, deviceSizeInSectors);
WUT_CHECK_OFFSET(FSADeviceInfo, 0x10, deviceSectorSize);
@ -103,38 +105,43 @@ WUT_CHECK_SIZE(FSADeviceInfo, 0x28);
/**
* File System information.
*/
struct FSAFileSystemInfo {
WUT_UNKNOWN_BYTES(0x1E);
struct FSAFileSystemInfo
{
WUT_UNKNOWN_BYTES(0x1E);
};
WUT_CHECK_SIZE(FSAFileSystemInfo, 0x1E);
typedef enum FSAMountPriority {
FSA_MOUNT_PRIORITY_BASE = 0x1,
FSA_MOUNT_PRIORITY_RAM_DISK_CACHE = 0x4,
FSA_MOUNT_PRIORITY_TITLE_UPDATE = 0x9,
FSA_MOUNT_PRIORITY_UNMOUNT_ALL = 0x80000000,
typedef enum FSAMountPriority
{
FSA_MOUNT_PRIORITY_BASE = 0x1,
FSA_MOUNT_PRIORITY_RAM_DISK_CACHE = 0x4,
FSA_MOUNT_PRIORITY_TITLE_UPDATE = 0x9,
FSA_MOUNT_PRIORITY_UNMOUNT_ALL = 0x80000000,
} FSAMountPriority;
typedef enum FSAQueryInfoType {
FSA_QUERY_INFO_FREE_SPACE_SIZE = 0x0,
FSA_QUERY_INFO_DIR_SIZE = 0x1,
FSA_QUERY_INFO_ENTRY_NUM = 0x2,
FSA_QUERY_INFO_FILE_SYSTEM_INFO = 0x3,
FSA_QUERY_INFO_DEVICE_INFO = 0x4,
FSA_QUERY_INFO_STAT = 0x5,
FSA_QUERY_INFO_BAD_BLOCK_INFO = 0x6,
FSA_QUERY_INFO_JOURNAL_FREE_SPACE_SIZE = 0x7,
FSA_QUERY_INFO_FRAGMENT_BLOCK_INFO = 0x8,
typedef enum FSAQueryInfoType
{
FSA_QUERY_INFO_FREE_SPACE_SIZE = 0x0,
FSA_QUERY_INFO_DIR_SIZE = 0x1,
FSA_QUERY_INFO_ENTRY_NUM = 0x2,
FSA_QUERY_INFO_FILE_SYSTEM_INFO = 0x3,
FSA_QUERY_INFO_DEVICE_INFO = 0x4,
FSA_QUERY_INFO_STAT = 0x5,
FSA_QUERY_INFO_BAD_BLOCK_INFO = 0x6,
FSA_QUERY_INFO_JOURNAL_FREE_SPACE_SIZE = 0x7,
FSA_QUERY_INFO_FRAGMENT_BLOCK_INFO = 0x8,
} FSAQueryInfoType;
typedef enum FSAReadFlag {
FSA_READ_FLAG_NONE = 0x0,
FSA_READ_FLAG_READ_WITH_POS = 0x1
typedef enum FSAReadFlag
{
FSA_READ_FLAG_NONE = 0x0,
FSA_READ_FLAG_READ_WITH_POS = 0x1
} FSAReadFlag;
typedef enum FSAWriteFlag {
FSA_WRITE_FLAG_NONE = 0x0,
FSA_WRITE_FLAG_READ_WITH_POS = 0x1
typedef enum FSAWriteFlag
{
FSA_WRITE_FLAG_NONE = 0x0,
FSA_WRITE_FLAG_READ_WITH_POS = 0x1
} FSAWriteFlag;
/**
@ -142,33 +149,36 @@ typedef enum FSAWriteFlag {
*/
struct FSAProcessInfo
{
uint64_t titleId;
uint32_t processId;
uint32_t groupId;
uint64_t titleId;
uint32_t processId;
uint32_t groupId;
};
WUT_CHECK_OFFSET(FSAProcessInfo, 0x00, titleId);
WUT_CHECK_OFFSET(FSAProcessInfo, 0x08, processId);
WUT_CHECK_OFFSET(FSAProcessInfo, 0x0C, groupId);
WUT_CHECK_SIZE(FSAProcessInfo, 0x10);
struct FSARequestRawOpen {
char path[0x280];
struct FSARequestRawOpen
{
char path[0x280];
};
WUT_CHECK_OFFSET(FSARequestRawOpen, 0x0, path);
WUT_CHECK_SIZE(FSARequestRawOpen, 0x280);
struct FSARequestRawClose {
int32_t handle;
struct FSARequestRawClose
{
int32_t handle;
};
WUT_CHECK_OFFSET(FSARequestRawClose, 0x0, handle);
WUT_CHECK_SIZE(FSARequestRawClose, 0x04);
struct WUT_PACKED FSARequestRawRead {
WUT_UNKNOWN_BYTES(0x4);
uint64_t blocks_offset;
uint32_t count;
uint32_t size;
uint32_t device_handle;
struct WUT_PACKED FSARequestRawRead
{
WUT_UNKNOWN_BYTES(0x4);
uint64_t blocks_offset;
uint32_t count;
uint32_t size;
uint32_t device_handle;
};
WUT_CHECK_OFFSET(FSARequestRawRead, 0x04, blocks_offset);
WUT_CHECK_OFFSET(FSARequestRawRead, 0x0C, count);
@ -176,12 +186,13 @@ WUT_CHECK_OFFSET(FSARequestRawRead, 0x10, size);
WUT_CHECK_OFFSET(FSARequestRawRead, 0x14, device_handle);
WUT_CHECK_SIZE(FSARequestRawRead, 0x18);
struct WUT_PACKED FSARequestRawWrite {
WUT_UNKNOWN_BYTES(0x4);
uint64_t blocks_offset;
uint32_t count;
uint32_t size;
uint32_t device_handle;
struct WUT_PACKED FSARequestRawWrite
{
WUT_UNKNOWN_BYTES(0x4);
uint64_t blocks_offset;
uint32_t count;
uint32_t size;
uint32_t device_handle;
};
WUT_CHECK_OFFSET(FSARequestRawWrite, 0x04, blocks_offset);
WUT_CHECK_OFFSET(FSARequestRawWrite, 0x0C, count);
@ -194,10 +205,10 @@ WUT_CHECK_SIZE(FSARequestRawWrite, 0x18);
*/
struct FSARequestAppendFile
{
uint32_t size;
uint32_t count;
FSAFileHandle handle;
uint32_t unk0x0C;
uint32_t size;
uint32_t count;
FSAFileHandle handle;
uint32_t unk0x0C;
};
WUT_CHECK_OFFSET(FSARequestAppendFile, 0x0, size);
WUT_CHECK_OFFSET(FSARequestAppendFile, 0x4, count);
@ -210,7 +221,7 @@ WUT_CHECK_SIZE(FSARequestAppendFile, 0x10);
*/
struct FSARequestChangeDir
{
char path[FS_MAX_PATH +1];
char path[FS_MAX_PATH + 1];
};
WUT_CHECK_OFFSET(FSARequestChangeDir, 0x0, path);
WUT_CHECK_SIZE(FSARequestChangeDir, 0x280);
@ -221,9 +232,9 @@ WUT_CHECK_SIZE(FSARequestChangeDir, 0x280);
*/
struct FSARequestChangeMode
{
char path[FS_MAX_PATH +1];
uint32_t mode1;
uint32_t mode2;
char path[FS_MAX_PATH + 1];
uint32_t mode1;
uint32_t mode2;
};
WUT_CHECK_OFFSET(FSARequestChangeMode, 0x0, path);
WUT_CHECK_OFFSET(FSARequestChangeMode, 0x280, mode1);
@ -236,7 +247,7 @@ WUT_CHECK_SIZE(FSARequestChangeMode, 0x288);
*/
struct FSARequestCloseDir
{
FSADirectoryHandle handle;
FSADirectoryHandle handle;
};
WUT_CHECK_OFFSET(FSARequestCloseDir, 0x0, handle);
WUT_CHECK_SIZE(FSARequestCloseDir, 0x4);
@ -247,7 +258,7 @@ WUT_CHECK_SIZE(FSARequestCloseDir, 0x4);
*/
struct FSARequestCloseFile
{
FSAFileHandle handle;
FSAFileHandle handle;
};
WUT_CHECK_OFFSET(FSARequestCloseFile, 0x0, handle);
WUT_CHECK_SIZE(FSARequestCloseFile, 0x4);
@ -258,7 +269,7 @@ WUT_CHECK_SIZE(FSARequestCloseFile, 0x4);
*/
struct FSARequestFlushFile
{
FSAFileHandle handle;
FSAFileHandle handle;
};
WUT_CHECK_OFFSET(FSARequestFlushFile, 0x0, handle);
WUT_CHECK_SIZE(FSARequestFlushFile, 0x4);
@ -269,7 +280,7 @@ WUT_CHECK_SIZE(FSARequestFlushFile, 0x4);
*/
struct FSARequestFlushQuota
{
char path[FS_MAX_PATH +1];
char path[FS_MAX_PATH + 1];
};
WUT_CHECK_OFFSET(FSARequestFlushQuota, 0x0, path);
WUT_CHECK_SIZE(FSARequestFlushQuota, 0x280);
@ -280,8 +291,8 @@ WUT_CHECK_SIZE(FSARequestFlushQuota, 0x280);
*/
struct FSARequestGetInfoByQuery
{
char path[FS_MAX_PATH +1];
FSAQueryInfoType type;
char path[FS_MAX_PATH + 1];
FSAQueryInfoType type;
};
WUT_CHECK_OFFSET(FSARequestGetInfoByQuery, 0x0, path);
WUT_CHECK_OFFSET(FSARequestGetInfoByQuery, 0x280, type);
@ -293,7 +304,7 @@ WUT_CHECK_SIZE(FSARequestGetInfoByQuery, 0x284);
*/
struct FSARequestGetPosFile
{
FSAFileHandle handle;
FSAFileHandle handle;
};
WUT_CHECK_OFFSET(FSARequestGetPosFile, 0x0, handle);
WUT_CHECK_SIZE(FSARequestGetPosFile, 0x4);
@ -304,7 +315,7 @@ WUT_CHECK_SIZE(FSARequestGetPosFile, 0x4);
*/
struct FSARequestIsEof
{
FSAFileHandle handle;
FSAFileHandle handle;
};
WUT_CHECK_OFFSET(FSARequestIsEof, 0x0, handle);
WUT_CHECK_SIZE(FSARequestIsEof, 0x4);
@ -315,8 +326,8 @@ WUT_CHECK_SIZE(FSARequestIsEof, 0x4);
*/
struct FSARequestMakeDir
{
char path[FS_MAX_PATH +1];
uint32_t permission;
char path[FS_MAX_PATH + 1];
uint32_t permission;
};
WUT_CHECK_OFFSET(FSARequestMakeDir, 0x0, path);
WUT_CHECK_OFFSET(FSARequestMakeDir, 0x280, permission);
@ -327,9 +338,9 @@ WUT_CHECK_SIZE(FSARequestMakeDir, 0x284);
*/
struct WUT_PACKED FSARequestMakeQuota
{
char path[FS_MAX_PATH +1];
uint32_t mode;
uint64_t size;
char path[FS_MAX_PATH + 1];
uint32_t mode;
uint64_t size;
};
WUT_CHECK_OFFSET(FSARequestMakeQuota, 0x0, path);
WUT_CHECK_OFFSET(FSARequestMakeQuota, 0x280, mode);
@ -342,11 +353,11 @@ WUT_CHECK_SIZE(FSARequestMakeQuota, 0x28C);
*/
struct FSARequestMount
{
char path[FS_MAX_PATH +1];
char target[FS_MAX_PATH +1];
uint32_t unk0x500;
void* unkBuf;
uint32_t unkBufLen;
char path[FS_MAX_PATH + 1];
char target[FS_MAX_PATH + 1];
uint32_t unk0x500;
void *unkBuf;
uint32_t unkBufLen;
};
WUT_CHECK_OFFSET(FSARequestMount, 0x0, path);
WUT_CHECK_OFFSET(FSARequestMount, 0x280, target);
@ -361,12 +372,12 @@ WUT_CHECK_SIZE(FSARequestMount, 0x50C);
*/
struct WUT_PACKED FSARequestMountWithProcess
{
char path[FS_MAX_PATH +1];
char target[FS_MAX_PATH +1];
FSAMountPriority priority;
FSAProcessInfo process;
void* unkBuf;
uint32_t unkBufLen;
char path[FS_MAX_PATH + 1];
char target[FS_MAX_PATH + 1];
FSAMountPriority priority;
FSAProcessInfo process;
void *unkBuf;
uint32_t unkBufLen;
};
WUT_CHECK_OFFSET(FSARequestMountWithProcess, 0x0, path);
WUT_CHECK_OFFSET(FSARequestMountWithProcess, 0x280, target);
@ -382,7 +393,7 @@ WUT_CHECK_SIZE(FSARequestMountWithProcess, 0x51C);
*/
struct FSARequestOpenDir
{
char path[FS_MAX_PATH +1];
char path[FS_MAX_PATH + 1];
};
WUT_CHECK_OFFSET(FSARequestOpenDir, 0x0, path);
WUT_CHECK_SIZE(FSARequestOpenDir, 0x280);
@ -392,11 +403,11 @@ WUT_CHECK_SIZE(FSARequestOpenDir, 0x280);
*/
struct FSARequestOpenFile
{
char path[FS_MAX_PATH +1];
char mode[FS_MODE_LENGTH];
uint32_t unk0x290;
uint32_t unk0x294;
uint32_t unk0x298;
char path[FS_MAX_PATH + 1];
char mode[FS_MODE_LENGTH];
uint32_t unk0x290;
uint32_t unk0x294;
uint32_t unk0x298;
};
WUT_CHECK_OFFSET(FSARequestOpenFile, 0x0, path);
WUT_CHECK_OFFSET(FSARequestOpenFile, 0x280, mode);
@ -411,7 +422,7 @@ WUT_CHECK_SIZE(FSARequestOpenFile, 0x29C);
*/
struct FSARequestReadDir
{
FSADirectoryHandle handle;
FSADirectoryHandle handle;
};
WUT_CHECK_OFFSET(FSARequestReadDir, 0x0, handle);
WUT_CHECK_SIZE(FSARequestReadDir, 0x4);
@ -422,13 +433,13 @@ WUT_CHECK_SIZE(FSARequestReadDir, 0x4);
*/
struct FSARequestReadFile
{
//! Virtual pointer used only by Cafe, for IOS we should use ioctlv.vecs[1]
uint8_t* buffer;
uint32_t size;
uint32_t count;
FSAFilePosition pos;
FSAFileHandle handle;
FSAReadFlag readFlags;
//! Virtual pointer used only by Cafe, for IOS we should use ioctlv.vecs[1]
uint8_t *buffer;
uint32_t size;
uint32_t count;
FSAFilePosition pos;
FSAFileHandle handle;
FSAReadFlag readFlags;
};
WUT_CHECK_OFFSET(FSARequestReadFile, 0x00, buffer);
WUT_CHECK_OFFSET(FSARequestReadFile, 0x04, size);
@ -444,7 +455,7 @@ WUT_CHECK_SIZE(FSARequestReadFile, 0x18);
*/
struct FSARequestRemove
{
char path[FS_MAX_PATH +1];
char path[FS_MAX_PATH + 1];
};
WUT_CHECK_OFFSET(FSARequestRemove, 0x0, path);
WUT_CHECK_SIZE(FSARequestRemove, 0x280);
@ -455,8 +466,8 @@ WUT_CHECK_SIZE(FSARequestRemove, 0x280);
*/
struct FSARequestRename
{
char oldPath[FS_MAX_PATH +1];
char newPath[FS_MAX_PATH +1];
char oldPath[FS_MAX_PATH + 1];
char newPath[FS_MAX_PATH + 1];
};
WUT_CHECK_OFFSET(FSARequestRename, 0x0, oldPath);
WUT_CHECK_OFFSET(FSARequestRename, 0x280, newPath);
@ -468,7 +479,7 @@ WUT_CHECK_SIZE(FSARequestRename, 0x500);
*/
struct FSARequestRewindDir
{
FSADirectoryHandle handle;
FSADirectoryHandle handle;
};
WUT_CHECK_OFFSET(FSARequestRewindDir, 0x0, handle);
WUT_CHECK_SIZE(FSARequestRewindDir, 0x4);
@ -479,8 +490,8 @@ WUT_CHECK_SIZE(FSARequestRewindDir, 0x4);
*/
struct FSARequestSetPosFile
{
FSAFileHandle handle;
FSAFilePosition pos;
FSAFileHandle handle;
FSAFilePosition pos;
};
WUT_CHECK_OFFSET(FSARequestSetPosFile, 0x0, handle);
WUT_CHECK_OFFSET(FSARequestSetPosFile, 0x4, pos);
@ -492,7 +503,7 @@ WUT_CHECK_SIZE(FSARequestSetPosFile, 0x8);
*/
struct FSARequestStatFile
{
FSAFileHandle handle;
FSAFileHandle handle;
};
WUT_CHECK_OFFSET(FSARequestStatFile, 0x0, handle);
WUT_CHECK_SIZE(FSARequestStatFile, 0x4);
@ -503,7 +514,7 @@ WUT_CHECK_SIZE(FSARequestStatFile, 0x4);
*/
struct FSARequestTruncateFile
{
FSAFileHandle handle;
FSAFileHandle handle;
};
WUT_CHECK_OFFSET(FSARequestTruncateFile, 0x0, handle);
WUT_CHECK_SIZE(FSARequestTruncateFile, 0x4);
@ -514,8 +525,8 @@ WUT_CHECK_SIZE(FSARequestTruncateFile, 0x4);
*/
struct FSARequestUnmount
{
char path[FS_MAX_PATH +1];
uint32_t unk0x280;
char path[FS_MAX_PATH + 1];
uint32_t unk0x280;
};
WUT_CHECK_OFFSET(FSARequestUnmount, 0x0, path);
WUT_CHECK_OFFSET(FSARequestUnmount, 0x280, unk0x280);
@ -527,9 +538,9 @@ WUT_CHECK_SIZE(FSARequestUnmount, 0x284);
*/
struct WUT_PACKED FSARequestUnmountWithProcess
{
char path[FS_MAX_PATH +1];
FSAMountPriority priority;
FSAProcessInfo process;
char path[FS_MAX_PATH + 1];
FSAMountPriority priority;
FSAProcessInfo process;
};
WUT_CHECK_OFFSET(FSARequestUnmountWithProcess, 0x0, path);
WUT_CHECK_OFFSET(FSARequestUnmountWithProcess, 0x280, priority);
@ -542,13 +553,13 @@ WUT_CHECK_SIZE(FSARequestUnmountWithProcess, 0x294);
*/
struct FSARequestWriteFile
{
//! Virtual pointer used only by Cafe, for IOS we should use ioctlv.vecs[1]
const uint8_t* buffer;
uint32_t size;
uint32_t count;
FSAFilePosition pos;
FSAFileHandle handle;
FSAWriteFlag writeFlags;
//! Virtual pointer used only by Cafe, for IOS we should use ioctlv.vecs[1]
const uint8_t *buffer;
uint32_t size;
uint32_t count;
FSAFilePosition pos;
FSAFileHandle handle;
FSAWriteFlag writeFlags;
};
WUT_CHECK_OFFSET(FSARequestWriteFile, 0x00, buffer);
WUT_CHECK_OFFSET(FSARequestWriteFile, 0x04, size);
@ -560,108 +571,112 @@ WUT_CHECK_SIZE(FSARequestWriteFile, 0x18);
struct FSARequestChangeOwner
{
char path[FS_MAX_PATH +1];
WUT_UNKNOWN_BYTES(4);
uint32_t owner;
WUT_UNKNOWN_BYTES(4);
uint32_t group;
char path[FS_MAX_PATH + 1];
WUT_UNKNOWN_BYTES(4);
uint32_t owner;
WUT_UNKNOWN_BYTES(4);
uint32_t group;
};
WUT_CHECK_OFFSET(FSARequestChangeOwner, 0x0, path);
WUT_CHECK_OFFSET(FSARequestChangeOwner, 0x284, owner);
WUT_CHECK_OFFSET(FSARequestChangeOwner, 0x28C, group);
WUT_CHECK_SIZE(FSARequestChangeOwner, 0x290);
struct FSARequest {
FSError emulatedError;
struct FSARequest
{
FSError emulatedError;
union {
FSARequestRawOpen rawOpen;
FSARequestRawClose rawClose;
FSARequestRawRead rawRead;
FSARequestRawWrite rawWrite;
FSARequestAppendFile appendFile;
FSARequestChangeDir changeDir;
FSARequestChangeMode changeMode;
FSARequestCloseDir closeDir;
FSARequestCloseFile closeFile;
FSARequestFlushFile flushFile;
FSARequestFlushQuota flushQuota;
FSARequestGetInfoByQuery getInfoByQuery;
FSARequestGetPosFile getPosFile;
FSARequestIsEof isEof;
FSARequestMakeDir makeDir;
FSARequestMakeQuota makeQuota;
FSARequestMount mount;
FSARequestMountWithProcess mountWithProcess;
FSARequestOpenDir openDir;
FSARequestOpenFile openFile;
FSARequestReadDir readDir;
FSARequestReadFile readFile;
FSARequestRemove remove;
FSARequestRename rename;
FSARequestRewindDir rewindDir;
FSARequestSetPosFile setPosFile;
FSARequestStatFile statFile;
FSARequestTruncateFile truncateFile;
FSARequestUnmount unmount;
FSARequestUnmountWithProcess unmountWithProcess;
FSARequestWriteFile writeFile;
FSARequestChangeOwner changeOwner;
WUT_UNKNOWN_BYTES(0x51C);
};
union
{
FSARequestRawOpen rawOpen;
FSARequestRawClose rawClose;
FSARequestRawRead rawRead;
FSARequestRawWrite rawWrite;
FSARequestAppendFile appendFile;
FSARequestChangeDir changeDir;
FSARequestChangeMode changeMode;
FSARequestCloseDir closeDir;
FSARequestCloseFile closeFile;
FSARequestFlushFile flushFile;
FSARequestFlushQuota flushQuota;
FSARequestGetInfoByQuery getInfoByQuery;
FSARequestGetPosFile getPosFile;
FSARequestIsEof isEof;
FSARequestMakeDir makeDir;
FSARequestMakeQuota makeQuota;
FSARequestMount mount;
FSARequestMountWithProcess mountWithProcess;
FSARequestOpenDir openDir;
FSARequestOpenFile openFile;
FSARequestReadDir readDir;
FSARequestReadFile readFile;
FSARequestRemove remove;
FSARequestRename rename;
FSARequestRewindDir rewindDir;
FSARequestSetPosFile setPosFile;
FSARequestStatFile statFile;
FSARequestTruncateFile truncateFile;
FSARequestUnmount unmount;
FSARequestUnmountWithProcess unmountWithProcess;
FSARequestWriteFile writeFile;
FSARequestChangeOwner changeOwner;
WUT_UNKNOWN_BYTES(0x51C);
};
};
WUT_CHECK_OFFSET(FSARequest, 0x00, emulatedError);
WUT_CHECK_OFFSET(FSARequest, 0x04, rawOpen);
WUT_CHECK_SIZE(FSARequest, 0x520);
struct FSAResponseRawOpen {
int handle;
struct FSAResponseRawOpen
{
int handle;
};
WUT_CHECK_OFFSET(FSAResponseRawOpen, 0x0, handle);
WUT_CHECK_SIZE(FSAResponseRawOpen, 0x4);
struct FSAResponseGetCwd
{
char path[FS_MAX_PATH +1];
char path[FS_MAX_PATH + 1];
};
WUT_CHECK_OFFSET(FSAResponseGetCwd, 0x0, path);
WUT_CHECK_SIZE(FSAResponseGetCwd, 0x280);
struct FSAResponseGetFileBlockAddress
{
uint32_t address;
uint32_t address;
};
WUT_CHECK_OFFSET(FSAResponseGetFileBlockAddress, 0x0, address);
WUT_CHECK_SIZE(FSAResponseGetFileBlockAddress, 0x4);
struct FSAResponseGetPosFile
{
FSAFilePosition pos;
FSAFilePosition pos;
};
WUT_CHECK_OFFSET(FSAResponseGetPosFile, 0x0, pos);
WUT_CHECK_SIZE(FSAResponseGetPosFile, 0x4);
struct FSAResponseGetVolumeInfo
{
FSAVolumeInfo volumeInfo;
FSAVolumeInfo volumeInfo;
};
WUT_CHECK_OFFSET(FSAResponseGetVolumeInfo, 0x0, volumeInfo);
WUT_CHECK_SIZE(FSAResponseGetVolumeInfo, 0x1BC);
struct WUT_PACKED FSAResponseGetInfoByQuery
{
union WUT_PACKED {
FSABlockInfo badBlockInfo;
FSADeviceInfo deviceInfo;
uint64_t dirSize;
FSAEntryNum entryNum;
FSAFileSystemInfo fileSystemInfo;
FSABlockInfo fragmentBlockInfo;
uint64_t freeSpaceSize;
uint64_t journalFreeSpaceSize;
FSAStat stat;
};
union WUT_PACKED
{
FSABlockInfo badBlockInfo;
FSADeviceInfo deviceInfo;
uint64_t dirSize;
FSAEntryNum entryNum;
FSAFileSystemInfo fileSystemInfo;
FSABlockInfo fragmentBlockInfo;
uint64_t freeSpaceSize;
uint64_t journalFreeSpaceSize;
FSAStat stat;
};
};
WUT_CHECK_OFFSET(FSAResponseGetInfoByQuery, 0x0, badBlockInfo);
WUT_CHECK_OFFSET(FSAResponseGetInfoByQuery, 0x0, deviceInfo);
@ -676,149 +691,154 @@ WUT_CHECK_SIZE(FSAResponseGetInfoByQuery, 0x64);
struct FSAResponseOpenFile
{
FSAFileHandle handle;
FSAFileHandle handle;
};
WUT_CHECK_OFFSET(FSAResponseOpenFile, 0x0, handle);
WUT_CHECK_SIZE(FSAResponseOpenFile, 0x4);
struct FSAResponseOpenDir
{
FSADirectoryHandle handle;
FSADirectoryHandle handle;
};
WUT_CHECK_OFFSET(FSAResponseOpenDir, 0x0, handle);
WUT_CHECK_SIZE(FSAResponseOpenDir, 0x4);
struct FSAResponseReadDir
{
FSADirectoryEntry entry;
FSADirectoryEntry entry;
};
WUT_CHECK_OFFSET(FSAResponseReadDir, 0x0, entry);
WUT_CHECK_SIZE(FSAResponseReadDir, 0x164);
struct FSAResponseStatFile
{
FSAStat stat;
FSAStat stat;
};
WUT_CHECK_OFFSET(FSAResponseStatFile, 0x0, stat);
WUT_CHECK_SIZE(FSAResponseStatFile, 0x64);
struct WUT_PACKED FSAResponse {
uint32_t word0;
union WUT_PACKED {
FSAResponseRawOpen rawOpen;
FSAResponseGetCwd getCwd;
FSAResponseGetFileBlockAddress getFileBlockAddress;
FSAResponseGetPosFile getPosFile;
FSAResponseGetVolumeInfo getVolumeInfo;
FSAResponseGetInfoByQuery getInfoByQuery;
FSAResponseOpenDir openDir;
FSAResponseOpenFile openFile;
FSAResponseReadDir readDir;
FSAResponseStatFile statFile;
WUT_UNKNOWN_BYTES(0x28F);
};
struct WUT_PACKED FSAResponse
{
uint32_t word0;
union WUT_PACKED
{
FSAResponseRawOpen rawOpen;
FSAResponseGetCwd getCwd;
FSAResponseGetFileBlockAddress getFileBlockAddress;
FSAResponseGetPosFile getPosFile;
FSAResponseGetVolumeInfo getVolumeInfo;
FSAResponseGetInfoByQuery getInfoByQuery;
FSAResponseOpenDir openDir;
FSAResponseOpenFile openFile;
FSAResponseReadDir readDir;
FSAResponseStatFile statFile;
WUT_UNKNOWN_BYTES(0x28F);
};
};
WUT_CHECK_OFFSET(FSAResponse, 0x0, word0);
WUT_CHECK_OFFSET(FSAResponse, 0x4, rawOpen);
WUT_CHECK_SIZE(FSAResponse, 0x293);
enum FSACommandEnum {
FSA_COMMAND_INVALID = 0x0,
FSA_COMMAND_MOUNT = 0x1,
FSA_COMMAND_UNMOUNT = 0x2,
FSA_COMMAND_GET_VOLUME_INFO = 0x3,
FSA_COMMAND_GET_ATTACH = 0x4,
FSA_COMMAND_CHANGE_DIR = 0x5,
FSA_COMMAND_GET_CWD = 0x6,
FSA_COMMAND_MAKE_DIR = 0x7,
FSA_COMMAND_REMOVE = 0x8,
FSA_COMMAND_RENAME = 0x9,
FSA_COMMAND_OPEN_DIR = 0xA,
FSA_COMMAND_READ_DIR = 0xB,
FSA_COMMAND_REWIND_DIR = 0xC,
FSA_COMMAND_CLOSE_DIR = 0xD,
FSA_COMMAND_OPEN_FILE = 0xE,
FSA_COMMAND_READ_FILE = 0xF,
FSA_COMMAND_WRITE_FILE = 0x10,
FSA_COMMAND_GET_POS_FILE = 0x11,
FSA_COMMAND_SET_POS_FILE = 0x12,
FSA_COMMAND_IS_EOF = 0x13,
FSA_COMMAND_STAT_FILE = 0x14,
FSA_COMMAND_CLOSE_FILE = 0x15,
FSA_COMMAND_GET_ERROR = 0x16,
FSA_COMMAND_FLUSH_FILE = 0x17,
FSA_COMMAND_GET_INFO_BY_QUERY = 0x18,
FSA_COMMAND_APPEND_FILE = 0x19,
FSA_COMMAND_TRUNCATE_FILE = 0x1A,
FSA_COMMAND_FLUSH_VOLUME = 0x1B,
FSA_COMMAND_ROLLBACK_VOLUME = 0x1C,
FSA_COMMAND_MAKE_QUOTA = 0x1D,
FSA_COMMAND_FLUSH_QUOTA = 0x1E,
FSA_COMMAND_ROLLBACK_QUOTA = 0x1F,
FSA_COMMAND_CHANGE_MODE = 0x20,
FSA_COMMAND_OPEN_FILE_BY_STAT = 0x21,
FSA_COMMAND_REGISTER_FLUSH_QUOTA = 0x22,
FSA_COMMAND_FLUSH_MULTI_QUOTA = 0x23,
FSA_COMMAND_GET_FILE_BLOCK_ADDRESS = 0x25,
FSA_COMMAND_ADD_USER_PROCESS = 0x65,
FSA_COMMAND_DEL_USER_PROCESS = 0x66,
FSA_COMMAND_MOUNT_WITH_PROCESS = 0x67,
FSA_COMMAND_UNMOUNT_WITH_PROCESS = 0x68,
FSA_COMMAND_FORMAT = 0x69,
FSA_COMMAND_RAW_OPEN = 0x6A,
FSA_COMMAND_RAW_READ = 0x6B,
FSA_COMMAND_RAW_WRITE = 0x6C,
FSA_COMMAND_RAW_CLOSE = 0x6D,
FSA_COMMAND_GET_LAST_FAILED_VOLUME = 0x6E,
FSA_COMMAND_GET_VOLUME_EXISTENCE = 0x6F,
FSA_COMMAND_CHANGE_OWNER = 0x70,
FSA_COMMAND_CANCEL_GET_ATTACH = 0x71,
FSA_COMMAND_REMOVE_QUOTA = 0x72,
FSA_COMMAND_SET_CLIENT_PRIORITY = 0x73,
FSA_COMMAND_APPLY_MEMORY_CACHE = 0x74,
FSA_COMMAND_MAKE_LINK = 0x75,
FSA_COMMAND_XFER_PARAMS = 0x76,
FSA_COMMAND_EXEC_DEBUG_PROC = 0x78,
FSA_COMMAND_DEBUG_SET_TITLE_ID = 0x79,
FSA_COMMAND_DEBUG_SET_CAPABILITY = 0x7A,
FSA_COMMAND_SET_PROCESS_CONFIG = 0x82,
FSA_COMMAND_CONFIG_SET_MEMORY_CACHE = 0x83,
FSA_COMMAND_CONFIG_UNSET_MEMORY_CACHE = 0x84,
FSA_COMMAND_CONFIG_SET_PRF2_CHAR_CODE = 0x85,
FSA_COMMAND_GET_PROC_RESOURCE_USAGE = 0x8C,
FSA_COMMAND_GET_ALL_RESOURCE_USAGE = 0x8D,
FSA_COMMAND_SEND_PROFILE_CMD = 0x8E,
enum FSACommandEnum
{
FSA_COMMAND_INVALID = 0x0,
FSA_COMMAND_MOUNT = 0x1,
FSA_COMMAND_UNMOUNT = 0x2,
FSA_COMMAND_GET_VOLUME_INFO = 0x3,
FSA_COMMAND_GET_ATTACH = 0x4,
FSA_COMMAND_CHANGE_DIR = 0x5,
FSA_COMMAND_GET_CWD = 0x6,
FSA_COMMAND_MAKE_DIR = 0x7,
FSA_COMMAND_REMOVE = 0x8,
FSA_COMMAND_RENAME = 0x9,
FSA_COMMAND_OPEN_DIR = 0xA,
FSA_COMMAND_READ_DIR = 0xB,
FSA_COMMAND_REWIND_DIR = 0xC,
FSA_COMMAND_CLOSE_DIR = 0xD,
FSA_COMMAND_OPEN_FILE = 0xE,
FSA_COMMAND_READ_FILE = 0xF,
FSA_COMMAND_WRITE_FILE = 0x10,
FSA_COMMAND_GET_POS_FILE = 0x11,
FSA_COMMAND_SET_POS_FILE = 0x12,
FSA_COMMAND_IS_EOF = 0x13,
FSA_COMMAND_STAT_FILE = 0x14,
FSA_COMMAND_CLOSE_FILE = 0x15,
FSA_COMMAND_GET_ERROR = 0x16,
FSA_COMMAND_FLUSH_FILE = 0x17,
FSA_COMMAND_GET_INFO_BY_QUERY = 0x18,
FSA_COMMAND_APPEND_FILE = 0x19,
FSA_COMMAND_TRUNCATE_FILE = 0x1A,
FSA_COMMAND_FLUSH_VOLUME = 0x1B,
FSA_COMMAND_ROLLBACK_VOLUME = 0x1C,
FSA_COMMAND_MAKE_QUOTA = 0x1D,
FSA_COMMAND_FLUSH_QUOTA = 0x1E,
FSA_COMMAND_ROLLBACK_QUOTA = 0x1F,
FSA_COMMAND_CHANGE_MODE = 0x20,
FSA_COMMAND_OPEN_FILE_BY_STAT = 0x21,
FSA_COMMAND_REGISTER_FLUSH_QUOTA = 0x22,
FSA_COMMAND_FLUSH_MULTI_QUOTA = 0x23,
FSA_COMMAND_GET_FILE_BLOCK_ADDRESS = 0x25,
FSA_COMMAND_ADD_USER_PROCESS = 0x65,
FSA_COMMAND_DEL_USER_PROCESS = 0x66,
FSA_COMMAND_MOUNT_WITH_PROCESS = 0x67,
FSA_COMMAND_UNMOUNT_WITH_PROCESS = 0x68,
FSA_COMMAND_FORMAT = 0x69,
FSA_COMMAND_RAW_OPEN = 0x6A,
FSA_COMMAND_RAW_READ = 0x6B,
FSA_COMMAND_RAW_WRITE = 0x6C,
FSA_COMMAND_RAW_CLOSE = 0x6D,
FSA_COMMAND_GET_LAST_FAILED_VOLUME = 0x6E,
FSA_COMMAND_GET_VOLUME_EXISTENCE = 0x6F,
FSA_COMMAND_CHANGE_OWNER = 0x70,
FSA_COMMAND_CANCEL_GET_ATTACH = 0x71,
FSA_COMMAND_REMOVE_QUOTA = 0x72,
FSA_COMMAND_SET_CLIENT_PRIORITY = 0x73,
FSA_COMMAND_APPLY_MEMORY_CACHE = 0x74,
FSA_COMMAND_MAKE_LINK = 0x75,
FSA_COMMAND_XFER_PARAMS = 0x76,
FSA_COMMAND_EXEC_DEBUG_PROC = 0x78,
FSA_COMMAND_DEBUG_SET_TITLE_ID = 0x79,
FSA_COMMAND_DEBUG_SET_CAPABILITY = 0x7A,
FSA_COMMAND_SET_PROCESS_CONFIG = 0x82,
FSA_COMMAND_CONFIG_SET_MEMORY_CACHE = 0x83,
FSA_COMMAND_CONFIG_UNSET_MEMORY_CACHE = 0x84,
FSA_COMMAND_CONFIG_SET_PRF2_CHAR_CODE = 0x85,
FSA_COMMAND_GET_PROC_RESOURCE_USAGE = 0x8C,
FSA_COMMAND_GET_ALL_RESOURCE_USAGE = 0x8D,
FSA_COMMAND_SEND_PROFILE_CMD = 0x8E,
};
enum FSAIpcRequestTypeEnum {
FSA_IPC_REQUEST_IOCTL = 0,
FSA_IPC_REQUEST_IOCTLV = 1,
enum FSAIpcRequestTypeEnum
{
FSA_IPC_REQUEST_IOCTL = 0,
FSA_IPC_REQUEST_IOCTLV = 1,
};
struct FSAAsyncResult {
//! Queue to put a message on when command is complete.
OSMessageQueue *ioMsgQueue;
struct FSAAsyncResult
{
//! Queue to put a message on when command is complete.
OSMessageQueue *ioMsgQueue;
//! Message used for ioMsgQueue.
FSMessage msg;
//! Message used for ioMsgQueue.
FSMessage msg;
//! Callback to call when the command is complete.
FSAAsyncCallbackFn userCallback;
//! Callback to call when the command is complete.
FSAAsyncCallbackFn userCallback;
//! Result.
FSError error;
//! Result.
FSError error;
//! FSA command.
FSACommand command;
//! FSA command.
FSACommand command;
//! Pointer to allocated FSA IPC Request.
FSARequest *request;
//! Pointer to allocated FSA IPC Request.
FSARequest *request;
//! Pointer to allocated FSA IPC Response.
FSAResponse *response;
//! Pointer to allocated FSA IPC Response.
FSAResponse *response;
//! Callback to call when the command is complete.
void *userContext;
//! Callback to call when the command is complete.
void *userContext;
};
WUT_CHECK_OFFSET(FSAAsyncResult, 0x00, ioMsgQueue);
WUT_CHECK_OFFSET(FSAAsyncResult, 0x04, msg);
@ -830,37 +850,38 @@ WUT_CHECK_OFFSET(FSAAsyncResult, 0x24, response);
WUT_CHECK_OFFSET(FSAAsyncResult, 0x28, userContext);
WUT_CHECK_SIZE(FSAAsyncResult, 0x2C);
struct WUT_PACKED FSAShimBuffer {
//! Buffer for FSA IPC request.
FSARequest request;
WUT_UNKNOWN_BYTES(0x60);
struct WUT_PACKED FSAShimBuffer
{
//! Buffer for FSA IPC request.
FSARequest request;
WUT_UNKNOWN_BYTES(0x60);
//! Buffer for FSA IPC response.
FSAResponse response;
WUT_UNKNOWN_BYTES(0x880 - 0x813);
//! Buffer for FSA IPC response.
FSAResponse response;
WUT_UNKNOWN_BYTES(0x880 - 0x813);
//! Memory to use for ioctlv calls, unknown maximum count - but at least 3.
IOSVec ioctlvVec[3];
//! Memory to use for ioctlv calls, unknown maximum count - but at least 3.
IOSVec ioctlvVec[3];
WUT_UNKNOWN_BYTES(0x900 - 0x8A4);
WUT_UNKNOWN_BYTES(0x900 - 0x8A4);
//! Command for FSA.
FSACommand command;
//! Command for FSA.
FSACommand command;
//! Handle to FSA device.
uint32_t clientHandle;
//! Handle to FSA device.
uint32_t clientHandle;
//! IOS IPC request type to use.
FSAIpcRequestType ipcReqType;
//! IOS IPC request type to use.
FSAIpcRequestType ipcReqType;
//! Number of ioctlv input vectors.
uint8_t ioctlvVecIn;
//! Number of ioctlv input vectors.
uint8_t ioctlvVecIn;
//! Number of ioctlv output vectors.
uint8_t ioctlvVecOut;
//! Number of ioctlv output vectors.
uint8_t ioctlvVecOut;
//! FSAAsyncResult used for FSA* functions.
FSAAsyncResult fsaAsyncResult;
//! FSAAsyncResult used for FSA* functions.
FSAAsyncResult fsaAsyncResult;
};
WUT_CHECK_OFFSET(FSAShimBuffer, 0x0, request);
WUT_CHECK_OFFSET(FSAShimBuffer, 0x580, response);
@ -879,31 +900,34 @@ typedef void (*FSAClientAttachAsyncCallbackFn)(FSError result,
FSAResponse *response,
void *userContext);
struct FSAClientAttachAsyncData {
//! Callback to call when an attach has happened.
FSAClientAttachAsyncCallbackFn userCallback;
struct FSAClientAttachAsyncData
{
//! Callback to call when an attach has happened.
FSAClientAttachAsyncCallbackFn userCallback;
//! Callback context
void *userContext;
//! Callback context
void *userContext;
//! Queue to put a message on when command is complete.
OSMessageQueue *ioMsgQueue;
//! Queue to put a message on when command is complete.
OSMessageQueue *ioMsgQueue;
};
WUT_CHECK_OFFSET(FSAClientAttachAsyncData, 0x00, userCallback);
WUT_CHECK_OFFSET(FSAClientAttachAsyncData, 0x04, userContext);
WUT_CHECK_OFFSET(FSAClientAttachAsyncData, 0x08, ioMsgQueue);
WUT_CHECK_SIZE(FSAClientAttachAsyncData, 0xC);
typedef enum FSAMountFlags {
FSA_MOUNT_FLAG_LOCAL_MOUNT = 0,
FSA_MOUNT_FLAG_BIND_MOUNT = 1,
FSA_MOUNT_FLAG_GLOBAL_MOUNT = 2,
typedef enum FSAMountFlags
{
FSA_MOUNT_FLAG_LOCAL_MOUNT = 0,
FSA_MOUNT_FLAG_BIND_MOUNT = 1,
FSA_MOUNT_FLAG_GLOBAL_MOUNT = 2,
} FSAMountFlags;
typedef enum FSAUnmountFlags {
FSA_UNMOUNT_FLAG_NONE = 0x00000000,
FSA_UNMOUNT_FLAG_FORCE = 0x00000002,
FSA_UNMOUNT_FLAG_BIND_MOUNT = 0x80000000,
typedef enum FSAUnmountFlags
{
FSA_UNMOUNT_FLAG_NONE = 0x00000000,
FSA_UNMOUNT_FLAG_FORCE = 0x00000002,
FSA_UNMOUNT_FLAG_BIND_MOUNT = 0x80000000,
} FSAUnmountFlags;
FSError

View File

@ -30,12 +30,12 @@ typedef enum IMPadType
typedef enum IMDeviceState
{
IM_DEVICE_STATE_CLEAR = 0,
IM_DEVICE_STATE_INACTIVE = 1,
IM_DEVICE_STATE_ACTIVE = 2,
IM_DEVICE_STATE_HOME = 3,
IM_DEVICE_STATE_POWER = 4,
IM_DEVICE_STATE_SYNC = 5,
IM_DEVICE_STATE_CLEAR = 0,
IM_DEVICE_STATE_INACTIVE = 1,
IM_DEVICE_STATE_ACTIVE = 2,
IM_DEVICE_STATE_HOME = 3,
IM_DEVICE_STATE_POWER = 4,
IM_DEVICE_STATE_SYNC = 5,
} IMDeviceState;
struct WUT_PACKED IMRequest
@ -97,18 +97,18 @@ WUT_CHECK_SIZE(IMDeviceStateEx, 0xC);
typedef enum IMParameter
{
IM_PARAMETER_INACTIVE_SECONDS = 0,
IM_PARAMETER_DIM_ENABLED = 1,
IM_PARAMETER_DIM_PERIOD = 2,
IM_PARAMETER_APD_ENABLED = 3,
IM_PARAMETER_APD_PERIOD = 4,
IM_PARAMETER_RESET_ENABLE = 5,
IM_PARAMETER_RESET_SECONDS = 6,
IM_PARAMETER_POWER_OFF_ENABLE = 7,
IM_PARAMETER_APD_OCCURED = 8,
IM_PARAMETER_DIM_ENABLE_TV = 9,
IM_PARAMETER_DIM_ENABLE_DRC = 10,
IM_PARAMETER_MAX = 11,
IM_PARAMETER_INACTIVE_SECONDS = 0,
IM_PARAMETER_DIM_ENABLED = 1,
IM_PARAMETER_DIM_PERIOD = 2,
IM_PARAMETER_APD_ENABLED = 3,
IM_PARAMETER_APD_PERIOD = 4,
IM_PARAMETER_RESET_ENABLE = 5,
IM_PARAMETER_RESET_SECONDS = 6,
IM_PARAMETER_POWER_OFF_ENABLE = 7,
IM_PARAMETER_APD_OCCURED = 8,
IM_PARAMETER_DIM_ENABLE_TV = 9,
IM_PARAMETER_DIM_ENABLE_DRC = 10,
IM_PARAMETER_MAX = 11,
} IMParameter;
typedef enum IMTimer
@ -158,7 +158,7 @@ IM_GetParameter(IOSHandle handle,
void *asyncCallbackContext);
IOSError
IM_GetParameters(IMParameters* parameters);
IM_GetParameters(IMParameters *parameters);
IOSError
IM_GetNvParameter(IOSHandle handle,

View File

@ -6,7 +6,10 @@ extern "C" {
#endif
int
__os_snprintf(char *buf, size_t n, const char *format, ... )
__os_snprintf(char *buf,
size_t n,
const char *format,
...)
WUT_FORMAT_PRINTF(3, 4);
#ifdef __cplusplus

View File

@ -29,8 +29,8 @@ typedef enum OSInterruptType
OS_INTERRUPT_TYPE_AHB = 12
} OSInterruptType;
typedef void(*OSUserInterruptHandler)(OSInterruptType type, OSContext* interruptedContext);
typedef void (*OSUserInterruptHandler)(OSInterruptType type, OSContext *interruptedContext);
BOOL
OSEnableInterrupts();

View File

@ -16,56 +16,56 @@ typedef int32_t IOSHandle;
typedef enum IOSOpenMode
{
IOS_OPEN_READ = 1 << 0,
IOS_OPEN_WRITE = 1 << 1,
IOS_OPEN_READWRITE = IOS_OPEN_READ | IOS_OPEN_WRITE,
IOS_OPEN_READ = 1 << 0,
IOS_OPEN_WRITE = 1 << 1,
IOS_OPEN_READWRITE = IOS_OPEN_READ | IOS_OPEN_WRITE,
} IOSOpenMode;
typedef enum IOSError
{
IOS_ERROR_OK = 0,
IOS_ERROR_ACCESS = -1,
IOS_ERROR_EXISTS = -2,
IOS_ERROR_INTR = -3,
IOS_ERROR_INVALID = -4,
IOS_ERROR_MAX = -5,
IOS_ERROR_NOEXISTS = -6,
IOS_ERROR_QEMPTY = -7,
IOS_ERROR_QFULL = -8,
IOS_ERROR_UNKNOWN = -9,
IOS_ERROR_NOTREADY = -10,
IOS_ERROR_ECC = -11,
IOS_ERROR_ECCCRIT = -12,
IOS_ERROR_BADBLOCK = -13,
IOS_ERROR_INVALIDOBJTYPE = -14,
IOS_ERROR_INVALIDRNG = -15,
IOS_ERROR_INVALIDFLAG = -16,
IOS_ERROR_INVALIDFORMAT = -17,
IOS_ERROR_INVALIDVERSION = -18,
IOS_ERROR_INVALIDSIGNER = -19,
IOS_ERROR_FAILCHECKVALUE = -20,
IOS_ERROR_FAILINTERNAL = -21,
IOS_ERROR_FAILALLOC = -22,
IOS_ERROR_INVALIDSIZE = -23,
IOS_ERROR_NOLINK = -24,
IOS_ERROR_ANFAILED = -25,
IOS_ERROR_MAXSEMCOUNT = -26,
IOS_ERROR_SEMUNAVAILABLE = -27,
IOS_ERROR_INVALIDHANDLE = -28,
IOS_ERROR_INVALIDARG = -29,
IOS_ERROR_NORESOURCE = -30,
IOS_ERROR_BUSY = -31,
IOS_ERROR_TIMEOUT = -32,
IOS_ERROR_ALIGNMENT = -33,
IOS_ERROR_BSP = -34,
IOS_ERROR_DATAPENDING = -35,
IOS_ERROR_EXPIRED = -36,
IOS_ERROR_NOREADACCESS = -37,
IOS_ERROR_NOWRITEACCESS = -38,
IOS_ERROR_NOREADWRITEACCESS = -39,
IOS_ERROR_CLIENTTXNLIMIT = -40,
IOS_ERROR_STALEHANDLE = -41,
IOS_ERROR_UNKNOWNVALUE = -42,
IOS_ERROR_OK = 0,
IOS_ERROR_ACCESS = -1,
IOS_ERROR_EXISTS = -2,
IOS_ERROR_INTR = -3,
IOS_ERROR_INVALID = -4,
IOS_ERROR_MAX = -5,
IOS_ERROR_NOEXISTS = -6,
IOS_ERROR_QEMPTY = -7,
IOS_ERROR_QFULL = -8,
IOS_ERROR_UNKNOWN = -9,
IOS_ERROR_NOTREADY = -10,
IOS_ERROR_ECC = -11,
IOS_ERROR_ECCCRIT = -12,
IOS_ERROR_BADBLOCK = -13,
IOS_ERROR_INVALIDOBJTYPE = -14,
IOS_ERROR_INVALIDRNG = -15,
IOS_ERROR_INVALIDFLAG = -16,
IOS_ERROR_INVALIDFORMAT = -17,
IOS_ERROR_INVALIDVERSION = -18,
IOS_ERROR_INVALIDSIGNER = -19,
IOS_ERROR_FAILCHECKVALUE = -20,
IOS_ERROR_FAILINTERNAL = -21,
IOS_ERROR_FAILALLOC = -22,
IOS_ERROR_INVALIDSIZE = -23,
IOS_ERROR_NOLINK = -24,
IOS_ERROR_ANFAILED = -25,
IOS_ERROR_MAXSEMCOUNT = -26,
IOS_ERROR_SEMUNAVAILABLE = -27,
IOS_ERROR_INVALIDHANDLE = -28,
IOS_ERROR_INVALIDARG = -29,
IOS_ERROR_NORESOURCE = -30,
IOS_ERROR_BUSY = -31,
IOS_ERROR_TIMEOUT = -32,
IOS_ERROR_ALIGNMENT = -33,
IOS_ERROR_BSP = -34,
IOS_ERROR_DATAPENDING = -35,
IOS_ERROR_EXPIRED = -36,
IOS_ERROR_NOREADACCESS = -37,
IOS_ERROR_NOWRITEACCESS = -38,
IOS_ERROR_NOREADWRITEACCESS = -39,
IOS_ERROR_CLIENTTXNLIMIT = -40,
IOS_ERROR_STALEHANDLE = -41,
IOS_ERROR_UNKNOWNVALUE = -42,
} IOSError;
struct IOSVec

View File

@ -1,8 +1,8 @@
#pragma once
#include <wut.h>
#include "mutex.h"
#include "ios.h"
#include "mutex.h"
#ifdef __cplusplus
extern "C" {
@ -17,21 +17,22 @@ typedef struct IPCBufPool IPCBufPool;
*
* Functions similar to a ring buffer.
*/
struct IPCBufPoolFIFO {
//! The current message index to push to.
int32_t pushIndex;
struct IPCBufPoolFIFO
{
//! The current message index to push to.
int32_t pushIndex;
//! The current message index to pop from.
int32_t popIndex;
//! The current message index to pop from.
int32_t popIndex;
//! The number of messages in the queue.
int32_t count;
//! The number of messages in the queue.
int32_t count;
//! Tracks the total number of messages in the count.
int32_t maxCount;
//! Tracks the total number of messages in the count.
int32_t maxCount;
//! Messages in the queue.
void **messages;
//! Messages in the queue.
void **messages;
};
WUT_CHECK_OFFSET(IPCBufPoolFIFO, 0x00, pushIndex);
WUT_CHECK_OFFSET(IPCBufPoolFIFO, 0x04, popIndex);
@ -43,15 +44,16 @@ WUT_CHECK_SIZE(IPCBufPoolFIFO, 0x14);
/**
* Attributes returned by IPCBufPoolGetAttributes.
*/
struct IPCBufPoolAttributes {
//! Size of a message in the buffer pool.
uint32_t messageSize;
struct IPCBufPoolAttributes
{
//! Size of a message in the buffer pool.
uint32_t messageSize;
//! Size of the buffer pool.
uint32_t poolSize;
//! Size of the buffer pool.
uint32_t poolSize;
//! Number of pending messages in the pool fifo.
uint32_t numMessages;
//! Number of pending messages in the pool fifo.
uint32_t numMessages;
};
WUT_CHECK_OFFSET(IPCBufPoolAttributes, 0x00, messageSize);
WUT_CHECK_OFFSET(IPCBufPoolAttributes, 0x04, poolSize);
@ -63,41 +65,42 @@ WUT_CHECK_SIZE(IPCBufPoolAttributes, 0x0C);
/**
* A simple message buffer pool used for IPC communication.
*/
struct IPCBufPool {
//! Magic header always set to IPCBufPool::MagicHeader.
uint32_t magic;
struct IPCBufPool
{
//! Magic header always set to IPCBufPool::MagicHeader.
uint32_t magic;
//! Pointer to buffer used for this IPCBufPool.
void *buffer;
//! Pointer to buffer used for this IPCBufPool.
void *buffer;
//! Size of buffer.
uint32_t size;
//! Size of buffer.
uint32_t size;
uint32_t unk0x0C;
uint32_t unk0x10;
uint32_t unk0x0C;
uint32_t unk0x10;
//! Message size from IPCBufPoolCreate.
uint32_t messageSize0x14;
//! Message size from IPCBufPoolCreate.
uint32_t messageSize0x14;
//! Message size from IPCBufPoolCreate.
uint32_t messageSize0x18;
//! Message size from IPCBufPoolCreate.
uint32_t messageSize0x18;
//! Number of messages in the IPCBufPoolFIFO.
uint32_t messageCount;
//! Number of messages in the IPCBufPoolFIFO.
uint32_t messageCount;
//! Pointer to start of messages.
void *messages;
//! Pointer to start of messages.
void *messages;
//! Number of bytes used for the message pointers in IPCBufPoolFIFO.
uint32_t *messageIndexSize;
//! Number of bytes used for the message pointers in IPCBufPoolFIFO.
uint32_t *messageIndexSize;
//! FIFO queue of messages.
IPCBufPoolFIFO fifo;
//! FIFO queue of messages.
IPCBufPoolFIFO fifo;
//! Mutex used to secure access to fifo.
OSMutex mutex;
//! Mutex used to secure access to fifo.
OSMutex mutex;
WUT_UNKNOWN_BYTES(0x04);
WUT_UNKNOWN_BYTES(0x04);
};
WUT_CHECK_OFFSET(IPCBufPool, 0x00, magic);
WUT_CHECK_OFFSET(IPCBufPool, 0x04, buffer);

View File

@ -12,86 +12,90 @@
extern "C" {
#endif
typedef enum OSICICommand {
OS_ICI_COMMAND_INVALID_IC_RANGE = 1,
OS_ICI_COMMAND_RESCHEDULE_CORE = 2,
OS_ICI_COMMAND_HALT_CORE = 3,
OS_ICI_COMMAND_PROC_EXIT = 4,
OS_ICI_COMMAND_SET_DABR = 5,
OS_ICI_COMMAND_PROC_SCHED = 6,
OS_ICI_COMMAND_FAST_BG_EXIT = 7,
OS_ICI_COMMAND_IOP_SHELL_CORE_TRACE = 8,
OS_ICI_COMMAND_SYSTEM_FATAL = 9,
OS_ICI_COMMAND_SET_IABR = 10,
OS_ICI_COMMAND_PANIC_0X15 = 0xB,
OS_ICI_COMMAND_PROC_KILL = 0xC,
OS_ICI_COMMAND_PROC_CRASH = 0xD,
OS_ICI_COMMAND_UNKNOWN = 0xE, // Waits for rendezvous, then updates heartbeat
OS_ICI_COMMAND_OVERLAY_ARENA = 0xF,
typedef enum OSICICommand
{
OS_ICI_COMMAND_INVALID_IC_RANGE = 1,
OS_ICI_COMMAND_RESCHEDULE_CORE = 2,
OS_ICI_COMMAND_HALT_CORE = 3,
OS_ICI_COMMAND_PROC_EXIT = 4,
OS_ICI_COMMAND_SET_DABR = 5,
OS_ICI_COMMAND_PROC_SCHED = 6,
OS_ICI_COMMAND_FAST_BG_EXIT = 7,
OS_ICI_COMMAND_IOP_SHELL_CORE_TRACE = 8,
OS_ICI_COMMAND_SYSTEM_FATAL = 9,
OS_ICI_COMMAND_SET_IABR = 10,
OS_ICI_COMMAND_PANIC_0X15 = 0xB,
OS_ICI_COMMAND_PROC_KILL = 0xC,
OS_ICI_COMMAND_PROC_CRASH = 0xD,
OS_ICI_COMMAND_UNKNOWN = 0xE, // Waits for rendezvous, then updates heartbeat
OS_ICI_COMMAND_OVERLAY_ARENA = 0xF,
} OSICICommand;
typedef void (*OSExceptionCallbackExFn)(OSExceptionType exceptionType, OSContext * interruptedContext, OSContext *cbContext);
typedef void (*OSExceptionCallbackExFn)(OSExceptionType exceptionType, OSContext *interruptedContext, OSContext *cbContext);
typedef void (*KernelTimerCallbackFn)(OSExceptionType exception, OSContext *interruptedContext, OSContext *currentContext);
typedef uint32_t KernelTimerHandle;
typedef struct OSExceptionChainInfo {
OSExceptionCallbackExFn callback;
void *stack;
OSContext *context;
typedef struct OSExceptionChainInfo
{
OSExceptionCallbackExFn callback;
void *stack;
OSContext *context;
} OSExceptionChainInfo;
WUT_CHECK_OFFSET(OSExceptionChainInfo, 0, callback);
WUT_CHECK_OFFSET(OSExceptionChainInfo, 4, stack);
WUT_CHECK_OFFSET(OSExceptionChainInfo, 8, context);
WUT_CHECK_SIZE(OSExceptionChainInfo, 12);
typedef struct KernelInfo0 {
struct CoreinitInfo {
void *loaderHandle;
void *textAddr;
uint32_t textOffset;
uint32_t textSize;
void *dataAddr;
uint32_t dataOffset;
uint32_t dataSize;
void *loadAddr;
uint32_t loadOffset;
uint32_t loadSize;
};
typedef struct KernelInfo0
{
struct CoreinitInfo
{
void *loaderHandle;
void *textAddr;
uint32_t textOffset;
uint32_t textSize;
void *dataAddr;
uint32_t dataOffset;
uint32_t dataSize;
void *loadAddr;
uint32_t loadOffset;
uint32_t loadSize;
};
int32_t upid;
int32_t rampid;
uint32_t appFlags;
void *dataAreaStart;
void *dataAreaEnd;
void *physDataAreaStart;
void *physDataAreaEnd;
void *physAvailStart;
void *physAvailEnd;
void *physCodeGenStart;
void *physCodeGenEnd;
void *sdaBase;
void *sda2Base;
uint32_t systemHeapSize;
void *stackEnd0;
void *stackEnd1;
void *stackEnd2;
void *stackBase0;
void *stackBase1;
void *stackBase2;
void *exceptionStackEnd0;
void *exceptionStackEnd1;
void *exceptionStackEnd2;
void *exceptionStackBase0;
void *exceptionStackBase1;
void *exceptionStackBase2;
void *lockedCacheBase0;
void *lockedCacheBase1;
void *lockedCacheBase2;
struct CoreinitInfo coreinit;
uint32_t unk0x9C;
uint64_t titleId;
int32_t upid;
int32_t rampid;
uint32_t appFlags;
void *dataAreaStart;
void *dataAreaEnd;
void *physDataAreaStart;
void *physDataAreaEnd;
void *physAvailStart;
void *physAvailEnd;
void *physCodeGenStart;
void *physCodeGenEnd;
void *sdaBase;
void *sda2Base;
uint32_t systemHeapSize;
void *stackEnd0;
void *stackEnd1;
void *stackEnd2;
void *stackBase0;
void *stackBase1;
void *stackBase2;
void *exceptionStackEnd0;
void *exceptionStackEnd1;
void *exceptionStackEnd2;
void *exceptionStackBase0;
void *exceptionStackBase1;
void *exceptionStackBase2;
void *lockedCacheBase0;
void *lockedCacheBase1;
void *lockedCacheBase2;
struct CoreinitInfo coreinit;
uint32_t unk0x9C;
uint64_t titleId;
} KernelInfo0;
WUT_CHECK_OFFSET(KernelInfo0, 0x00, upid);
WUT_CHECK_OFFSET(KernelInfo0, 0x04, rampid);
@ -127,23 +131,43 @@ WUT_CHECK_OFFSET(KernelInfo0, 0x9C, unk0x9C);
WUT_CHECK_OFFSET(KernelInfo0, 0xA0, titleId);
WUT_CHECK_SIZE(KernelInfo0, 0xA8);
typedef struct KernelInfo6 {
uint64_t osTitleId;
uint32_t unk0x08;
WUT_PADDING_BYTES(0x108 - 0xC);
typedef struct KernelInfo6
{
uint64_t osTitleId;
uint32_t unk0x08;
WUT_PADDING_BYTES(0x108 - 0xC);
} KernelInfo6;
WUT_CHECK_OFFSET(KernelInfo6, 0x00, osTitleId);
WUT_CHECK_OFFSET(KernelInfo6, 0x08, unk0x08);
WUT_CHECK_SIZE(KernelInfo6, 0x108);
void __KernelSetUserModeExHandler(OSExceptionType exceptionType, OSExceptionChainInfo *chainInfo, OSExceptionChainInfo *prevChainInfo);
void
__KernelSetUserModeExHandler(OSExceptionType exceptionType,
OSExceptionChainInfo *chainInfo,
OSExceptionChainInfo *prevChainInfo);
KernelTimerHandle __KernelAllocateTimer(KernelTimerCallbackFn, void *exceptionStack, OSContext *context);
uint32_t __KernelPrimeTimer(KernelTimerHandle handle, uint64_t startTimeInTicks, uint64_t intervalInTicks, uint32_t unknown);
KernelTimerHandle
__KernelAllocateTimer(KernelTimerCallbackFn,
void *exceptionStack,
OSContext *context);
void __KernelSendICI(OSICICommand cmd, void *arg1, uint32_t unknown1, uint32_t unknown2);
uint32_t
__KernelPrimeTimer(KernelTimerHandle handle,
uint64_t startTimeInTicks,
uint64_t intervalInTicks,
uint32_t unknown);
void __KernelGetInfo(uint32_t type, void *outBuffer, uint32_t outBufferSize, uint32_t core);
void
__KernelSendICI(OSICICommand cmd,
void *arg1,
uint32_t unknown1,
uint32_t unknown2);
void
__KernelGetInfo(uint32_t type,
void *outBuffer,
uint32_t outBufferSize,
uint32_t core);
static inline void
__KernelGetInfo0(KernelInfo0 *outBuffer, uint32_t core)

View File

@ -20,7 +20,7 @@ extern "C" {
/**
* Magic title ID used for triggering a full system reboot.
*/
#define OS_TITLE_ID_REBOOT 0xFFFFFFFFFFFFFFFEllu
#define OS_TITLE_ID_REBOOT 0xFFFFFFFFFFFFFFFEllu
/**
* Forces a OS relaunch on the next title launch.

View File

@ -24,74 +24,74 @@ typedef struct MCPTitleListType MCPTitleListType;
typedef enum MCPAppType
{
MCP_APP_TYPE_GAME_UPDATE = 0x0800001B,
MCP_APP_TYPE_GAME_DLC = 0x0800000E,
MCP_APP_TYPE_BOOT1 = 0x10000009,
MCP_APP_TYPE_SYSTEM_LIBRARIES = 0x1000000A,
MCP_APP_TYPE_BLUETOOTH_FIRMWARE = 0x10000012,
MCP_APP_TYPE_DRC_FIRMWARE = 0x10000013,
MCP_APP_TYPE_DRH_FIRMWARE = 0x10000014,
MCP_APP_TYPE_SYSTEM_VERSION = 0x10000015,
MCP_APP_TYPE_DRC_LANGUAGE = 0x1000001A,
MCP_APP_TYPE_EXCEPTIONS_DATA = 0x18000010,
MCP_APP_TYPE_SHARED_DATA = 0x1800001C,
MCP_APP_TYPE_CERT_STORE = 0x1800001E,
MCP_APP_TYPE_PATCH_MAP_DATA = 0x18000023,
MCP_APP_TYPE_WAGONU_MIGRATION_LIST = 0x18000029,
MCP_APP_TYPE_CAFFEINE_TITLE_LIST = 0x18000030,
MCP_APP_TYPE_MCP_TITLE_LIST = 0x18000031,
MCP_APP_TYPE_GAME = 0x80000000,
MCP_APP_TYPE_GAME_WII = 0x8000002E,
MCP_APP_TYPE_SYSTEM_MENU = 0x90000001,
MCP_APP_TYPE_SYSTEM_UPDATER = 0x9000000B,
MCP_APP_TYPE_SYSTEM_APPS = 0x90000020,
MCP_APP_TYPE_ACCOUNT_APPS = 0x90000021,
MCP_APP_TYPE_SYSTEM_SETTINGS = 0x90000022,
MCP_APP_TYPE_ECO_PROCESS = 0x9000002F,
MCP_APP_TYPE_EMANUAL = 0xD0000003,
MCP_APP_TYPE_HOME_MENU = 0xD0000004,
MCP_APP_TYPE_ERROR_DISPLAY = 0xD0000005,
MCP_APP_TYPE_BROWSER = 0xD0000006,
MCP_APP_TYPE_MIIVERSE_POST = 0xD000000D,
MCP_APP_TYPE_MIIVERSE = 0xD0000016,
MCP_APP_TYPE_ESHOP = 0xD0000017,
MCP_APP_TYPE_FRIEND_LIST = 0xD0000018,
MCP_APP_TYPE_DOWNLOAD_MANAGEMENT = 0xD0000019,
MCP_APP_TYPE_AOC_OVERLAY = 0xD000002C,
MCP_APP_TYPE_AMIIBO_SETTINGS = 0xD0000033,
MCP_APP_TYPE_GAME_UPDATE = 0x0800001B,
MCP_APP_TYPE_GAME_DLC = 0x0800000E,
MCP_APP_TYPE_BOOT1 = 0x10000009,
MCP_APP_TYPE_SYSTEM_LIBRARIES = 0x1000000A,
MCP_APP_TYPE_BLUETOOTH_FIRMWARE = 0x10000012,
MCP_APP_TYPE_DRC_FIRMWARE = 0x10000013,
MCP_APP_TYPE_DRH_FIRMWARE = 0x10000014,
MCP_APP_TYPE_SYSTEM_VERSION = 0x10000015,
MCP_APP_TYPE_DRC_LANGUAGE = 0x1000001A,
MCP_APP_TYPE_EXCEPTIONS_DATA = 0x18000010,
MCP_APP_TYPE_SHARED_DATA = 0x1800001C,
MCP_APP_TYPE_CERT_STORE = 0x1800001E,
MCP_APP_TYPE_PATCH_MAP_DATA = 0x18000023,
MCP_APP_TYPE_WAGONU_MIGRATION_LIST = 0x18000029,
MCP_APP_TYPE_CAFFEINE_TITLE_LIST = 0x18000030,
MCP_APP_TYPE_MCP_TITLE_LIST = 0x18000031,
MCP_APP_TYPE_GAME = 0x80000000,
MCP_APP_TYPE_GAME_WII = 0x8000002E,
MCP_APP_TYPE_SYSTEM_MENU = 0x90000001,
MCP_APP_TYPE_SYSTEM_UPDATER = 0x9000000B,
MCP_APP_TYPE_SYSTEM_APPS = 0x90000020,
MCP_APP_TYPE_ACCOUNT_APPS = 0x90000021,
MCP_APP_TYPE_SYSTEM_SETTINGS = 0x90000022,
MCP_APP_TYPE_ECO_PROCESS = 0x9000002F,
MCP_APP_TYPE_EMANUAL = 0xD0000003,
MCP_APP_TYPE_HOME_MENU = 0xD0000004,
MCP_APP_TYPE_ERROR_DISPLAY = 0xD0000005,
MCP_APP_TYPE_BROWSER = 0xD0000006,
MCP_APP_TYPE_MIIVERSE_POST = 0xD000000D,
MCP_APP_TYPE_MIIVERSE = 0xD0000016,
MCP_APP_TYPE_ESHOP = 0xD0000017,
MCP_APP_TYPE_FRIEND_LIST = 0xD0000018,
MCP_APP_TYPE_DOWNLOAD_MANAGEMENT = 0xD0000019,
MCP_APP_TYPE_AOC_OVERLAY = 0xD000002C,
MCP_APP_TYPE_AMIIBO_SETTINGS = 0xD0000033,
} MCPAppType;
typedef enum MCPDeviceType
{
MCP_DEVICE_TYPE_AUTO = 1, /* returns result for ODD, MLC and USB */
MCP_DEVICE_TYPE_ODD = 2,
MCP_DEVICE_TYPE_MLC = 3,
MCP_DEVICE_TYPE_USB = 4,
MCP_DEVICE_TYPE_AUTO = 1, /* returns result for ODD, MLC and USB */
MCP_DEVICE_TYPE_ODD = 2,
MCP_DEVICE_TYPE_MLC = 3,
MCP_DEVICE_TYPE_USB = 4,
/* any value >= 5 is MCP_DEVICE_TYPE_AUTO */
} MCPDeviceType;
typedef enum MCPDeviceFlags
{
MCP_DEVICE_FLAG_UNK_1 = 0x1,
MCP_DEVICE_FLAG_UNK_2 = 0x2,
MCP_DEVICE_FLAG_UNK_4 = 0x4,
MCP_DEVICE_FLAG_UNK_8 = 0x8,
MCP_DEVICE_FLAG_UNK_1 = 0x1,
MCP_DEVICE_FLAG_UNK_2 = 0x2,
MCP_DEVICE_FLAG_UNK_4 = 0x4,
MCP_DEVICE_FLAG_UNK_8 = 0x8,
} MCPDeviceFlags;
typedef enum MCPInstallTarget
{
MCP_INSTALL_TARGET_MLC = 0,
MCP_INSTALL_TARGET_USB = 1,
MCP_INSTALL_TARGET_MLC = 0,
MCP_INSTALL_TARGET_USB = 1,
} MCPInstallTarget;
typedef enum MCPRegion
{
MCP_REGION_JAPAN = 0x01,
MCP_REGION_USA = 0x02,
MCP_REGION_EUROPE = 0x04,
MCP_REGION_CHINA = 0x10,
MCP_REGION_KOREA = 0x20,
MCP_REGION_TAIWAN = 0x40,
MCP_REGION_JAPAN = 0x01,
MCP_REGION_USA = 0x02,
MCP_REGION_EUROPE = 0x04,
MCP_REGION_CHINA = 0x10,
MCP_REGION_KOREA = 0x20,
MCP_REGION_TAIWAN = 0x40,
} MCPRegion;
typedef enum MCPCompatAVFile
@ -382,8 +382,9 @@ MCP_ChangeEcoSettings(int32_t handle,
uint32_t maxOnTime,
uint16_t defaultOffTime);
static inline const char*
MCP_GetDeviceNameByDeviceType(MCPDeviceType deviceType) {
static inline const char *
MCP_GetDeviceNameByDeviceType(MCPDeviceType deviceType)
{
switch (deviceType) {
case MCP_DEVICE_TYPE_AUTO:
return "auto";

View File

@ -17,17 +17,18 @@ extern "C" {
typedef struct MEMAllocatorFunctions MEMAllocatorFunctions;
typedef struct MEMAllocator MEMAllocator;
typedef void * (*MEMAllocatorAllocFn)(MEMAllocator *allocator, uint32_t size);
typedef void (*MEMAllocatorFreeFn) (MEMAllocator *allocator, void *ptr);
typedef void *(*MEMAllocatorAllocFn)(MEMAllocator *allocator, uint32_t size);
typedef void (*MEMAllocatorFreeFn)(MEMAllocator *allocator, void *ptr);
//! Holds context information that will be used to allocate and free memory.
struct MEMAllocator {
struct MEMAllocator
{
//! Points to the alloc/free functions.
MEMAllocatorFunctions *funcs;
//! The heap handle.
MEMHeapHandle heap;
MEMHeapHandle heap;
//! The alignment the allocator will use.
uint32_t align;
uint32_t align;
WUT_UNKNOWN_BYTES(4);
};
WUT_CHECK_OFFSET(MEMAllocator, 0x0, funcs);
@ -36,9 +37,10 @@ WUT_CHECK_OFFSET(MEMAllocator, 0x8, align);
WUT_CHECK_SIZE(MEMAllocator, 0x10);
//! The alloc/free functions.
struct MEMAllocatorFunctions {
struct MEMAllocatorFunctions
{
MEMAllocatorAllocFn alloc;
MEMAllocatorFreeFn free;
MEMAllocatorFreeFn free;
};
WUT_CHECK_OFFSET(MEMAllocatorFunctions, 0x0, alloc);
WUT_CHECK_OFFSET(MEMAllocatorFunctions, 0x4, free);

View File

@ -16,25 +16,24 @@ typedef struct MEMExpHeap MEMExpHeap;
typedef struct MEMExpHeapBlock MEMExpHeapBlock;
typedef struct MEMExpHeapBlockList MEMExpHeapBlockList;
typedef void (*MEMExpHeapBlockVisitor)(void *block, MEMHeapHandle heap,
void *context);
typedef void (*MEMExpHeapBlockVisitor)(void *block, MEMHeapHandle heap, void *context);
typedef enum MEMExpHeapMode
{
MEM_EXP_HEAP_MODE_FIRST_FREE = 0,
MEM_EXP_HEAP_MODE_NEAREST_SIZE = 1,
MEM_EXP_HEAP_MODE_FIRST_FREE = 0,
MEM_EXP_HEAP_MODE_NEAREST_SIZE = 1,
} MEMExpHeapMode;
typedef enum MEMExpHeapDirection
{
MEM_EXP_HEAP_DIR_FROM_TOP = 0,
MEM_EXP_HEAP_DIR_FROM_BOTTOM = 1,
MEM_EXP_HEAP_DIR_FROM_TOP = 0,
MEM_EXP_HEAP_DIR_FROM_BOTTOM = 1,
} MEMExpHeapDirection;
typedef enum MEMExpHeapCheckFlags
{
MEM_EXP_HEAP_CHECK_FLAGS_NONE = 0,
MEM_EXP_HEAP_CHECK_FLAGS_LOG_ERRORS = 1,
MEM_EXP_HEAP_CHECK_FLAGS_NONE = 0,
MEM_EXP_HEAP_CHECK_FLAGS_LOG_ERRORS = 1,
} MEMExpHeapCheckFlags;
struct MEMExpHeapBlock

View File

@ -14,9 +14,9 @@ extern "C" {
typedef enum MEMFrmHeapFreeMode
{
MEM_FRM_HEAP_FREE_HEAD = 1 << 0,
MEM_FRM_HEAP_FREE_TAIL = 1 << 1,
MEM_FRM_HEAP_FREE_ALL = MEM_FRM_HEAP_FREE_HEAD | MEM_FRM_HEAP_FREE_TAIL,
MEM_FRM_HEAP_FREE_HEAD = 1 << 0,
MEM_FRM_HEAP_FREE_TAIL = 1 << 1,
MEM_FRM_HEAP_FREE_ALL = MEM_FRM_HEAP_FREE_HEAD | MEM_FRM_HEAP_FREE_TAIL,
} MEMFrmHeapFreeMode;
typedef struct MEMFrmHeap MEMFrmHeap;

View File

@ -1,7 +1,7 @@
#pragma once
#include <wut.h>
#include "spinlock.h"
#include "memlist.h"
#include "spinlock.h"
/**
* \defgroup coreinit_memheap Common Memory Heap
@ -20,9 +20,9 @@ typedef MEMHeapHeader *MEMHeapHandle;
typedef enum MEMBaseHeapType
{
MEM_BASE_HEAP_MEM1 = 0,
MEM_BASE_HEAP_MEM2 = 1,
MEM_BASE_HEAP_FG = 8,
MEM_BASE_HEAP_MEM1 = 0,
MEM_BASE_HEAP_MEM2 = 1,
MEM_BASE_HEAP_FG = 8,
} MEMBaseHeapType;
typedef enum MEMHeapFillType
@ -34,18 +34,18 @@ typedef enum MEMHeapFillType
typedef enum MEMHeapTag
{
MEM_BLOCK_HEAP_TAG = 0x424C4B48u,
MEM_EXPANDED_HEAP_TAG = 0x45585048u,
MEM_FRAME_HEAP_TAG = 0x46524D48u,
MEM_UNIT_HEAP_TAG = 0x554E5448u,
MEM_USER_HEAP_TAG = 0x55535248u,
MEM_BLOCK_HEAP_TAG = 0x424C4B48u,
MEM_EXPANDED_HEAP_TAG = 0x45585048u,
MEM_FRAME_HEAP_TAG = 0x46524D48u,
MEM_UNIT_HEAP_TAG = 0x554E5448u,
MEM_USER_HEAP_TAG = 0x55535248u,
} MEMHeapTag;
typedef enum MEMHeapFlags
{
MEM_HEAP_FLAG_ZERO_ALLOCATED = 1 << 0,
MEM_HEAP_FLAG_DEBUG_MODE = 1 << 1,
MEM_HEAP_FLAG_USE_LOCK = 1 << 2,
MEM_HEAP_FLAG_ZERO_ALLOCATED = 1 << 0,
MEM_HEAP_FLAG_DEBUG_MODE = 1 << 1,
MEM_HEAP_FLAG_USE_LOCK = 1 << 2,
} MEMHeapFlags;
struct MEMHeapHeader

View File

@ -20,11 +20,11 @@ typedef enum OSMemoryType
typedef enum OSSharedDataType
{
OS_SHAREDDATATYPE_FONT_CHINESE = 0,
OS_SHAREDDATATYPE_FONT_KOREAN = 1,
OS_SHAREDDATATYPE_FONT_STANDARD = 2,
OS_SHAREDDATATYPE_FONT_TAIWANESE = 3,
OS_SHAREDDATATYPE_FONT_MAX = 4,
OS_SHAREDDATATYPE_FONT_CHINESE = 0,
OS_SHAREDDATATYPE_FONT_KOREAN = 1,
OS_SHAREDDATATYPE_FONT_STANDARD = 2,
OS_SHAREDDATATYPE_FONT_TAIWANESE = 3,
OS_SHAREDDATATYPE_FONT_MAX = 4,
} OSSharedDataType;
BOOL

View File

@ -14,11 +14,11 @@ extern "C" {
typedef enum OSMemoryMapMode
{
OS_MAP_MEMORY_INVALID = 0,
OS_MAP_MEMORY_READ_ONLY = 1,
OS_MAP_MEMORY_READ_WRITE = 2,
OS_MAP_MEMORY_FREE = 3,
OS_MAP_MEMORY_ALLOCATED = 4,
OS_MAP_MEMORY_INVALID = 0,
OS_MAP_MEMORY_READ_ONLY = 1,
OS_MAP_MEMORY_READ_WRITE = 2,
OS_MAP_MEMORY_FREE = 3,
OS_MAP_MEMORY_ALLOCATED = 4,
} OSMemoryMapMode;
#define OS_PAGE_SIZE (128 * 1024)

View File

@ -17,24 +17,24 @@ typedef struct OSMessageQueue OSMessageQueue;
typedef enum OSMessageFlags
{
OS_MESSAGE_FLAGS_NONE = 0,
OS_MESSAGE_FLAGS_BLOCKING = 1 << 0,
OS_MESSAGE_FLAGS_HIGH_PRIORITY = 1 << 1,
OS_MESSAGE_FLAGS_NONE = 0,
OS_MESSAGE_FLAGS_BLOCKING = 1 << 0,
OS_MESSAGE_FLAGS_HIGH_PRIORITY = 1 << 1,
} OSMessageFlags;
typedef enum OSFunctionType
{
OS_FUNCTION_TYPE_HIO_OPEN = 1,
OS_FUNCTION_TYPE_HIO_READ_ASYNC = 2,
OS_FUNCTION_TYPE_HIO_WRITE_ASYNC = 3,
OS_FUNCTION_TYPE_FSA_CMD_ASYNC = 4,
OS_FUNCTION_TYPE_FSA_PR_CMD_ASYNC = 5,
OS_FUNCTION_TYPE_FSA_PR_CMD_ASYNC_NO_ALLOC = 6,
OS_FUNCTION_TYPE_FSA_ATTACH_EVENT = 7,
OS_FUNCTION_TYPE_FS_CMD_ASYNC = 8,
OS_FUNCTION_TYPE_FS_CMD_HANDLER = 9,
OS_FUNCTION_TYPE_FS_ATTACH_EVENT = 10,
OS_FUNCTION_TYPE_FS_STATE_CHANGE_EVENT = 11,
OS_FUNCTION_TYPE_HIO_OPEN = 1,
OS_FUNCTION_TYPE_HIO_READ_ASYNC = 2,
OS_FUNCTION_TYPE_HIO_WRITE_ASYNC = 3,
OS_FUNCTION_TYPE_FSA_CMD_ASYNC = 4,
OS_FUNCTION_TYPE_FSA_PR_CMD_ASYNC = 5,
OS_FUNCTION_TYPE_FSA_PR_CMD_ASYNC_NO_ALLOC = 6,
OS_FUNCTION_TYPE_FSA_ATTACH_EVENT = 7,
OS_FUNCTION_TYPE_FS_CMD_ASYNC = 8,
OS_FUNCTION_TYPE_FS_CMD_HANDLER = 9,
OS_FUNCTION_TYPE_FS_ATTACH_EVENT = 10,
OS_FUNCTION_TYPE_FS_STATE_CHANGE_EVENT = 11,
} OSFunctionType;
struct OSMessage

View File

@ -15,13 +15,14 @@ extern "C" {
/// Used to tell OSSetPerformanceMonitor() which arguments are valid.
typedef enum OSPerfMonArg {
OS_PM_ARG_MMCR0 = 1u << 0u,
OS_PM_ARG_MMCR1 = 1u << 1u,
OS_PM_ARG_PMC1 = 1u << 2u,
OS_PM_ARG_PMC2 = 1u << 3u,
OS_PM_ARG_PMC3 = 1u << 4u,
OS_PM_ARG_PMC4 = 1u << 5u,
typedef enum OSPerfMonArg
{
OS_PM_ARG_MMCR0 = 1u << 0u,
OS_PM_ARG_MMCR1 = 1u << 1u,
OS_PM_ARG_PMC1 = 1u << 2u,
OS_PM_ARG_PMC2 = 1u << 3u,
OS_PM_ARG_PMC3 = 1u << 4u,
OS_PM_ARG_PMC4 = 1u << 5u,
} OSPerfMonArg;
/**
@ -29,49 +30,50 @@ typedef enum OSPerfMonArg {
*
* \sa OSSetPerformanceMonitor
*/
typedef enum OSPerfMonMMCR0Flags {
OS_PM_MMCR0_PMC1_CURRENT = 0b0000000u << 6,
OS_PM_MMCR0_PMC1_CPU_CYCLES = 0b0000001u << 6,
OS_PM_MMCR0_PMC1_INSTRUCTIONS_COMPLETED = 0b0000010u << 6,
OS_PM_MMCR0_PMC1_TBL_RISING_TRANSITIONS = 0b0000011u << 6,
OS_PM_MMCR0_PMC1_INSTRUCTIONS_DISPATCHED = 0b0000100u << 6,
OS_PM_MMCR0_PMC1_EIEIO_INSTRUCTIONS_COMPLETED = 0b0000101u << 6,
OS_PM_MMCR0_PMC1_ITLB_SEARCH_CYCLES = 0b0000110u << 6,
OS_PM_MMCR0_PMC1_L2_HITS = 0b0000111u << 6,
OS_PM_MMCR0_PMC1_INSTRUCTIONS_EA_DELIVERED = 0b0001000u << 6,
OS_PM_MMCR0_PMC1_INSTRUCTIONS_COMPLETED_MATCHES_IABR = 0b0001001u << 6,
OS_PM_MMCR0_PMC1_SLOW_L1_MISSES = 0b0001010u << 6,
OS_PM_MMCR0_PMC1_UNRESOLVED_BRANCHES = 0b0001011u << 6,
OS_PM_MMCR0_PMC1_UNRESOLVED_STALL_CYCLES = 0b0001100u << 6,
OS_PM_MMCR0_PMC1_L1_SHARED_STORES = 0b0001110u << 6,
OS_PM_MMCR0_PMC1_L2_SHARED_INTERVENTIONS = 0b0001111u << 6,
OS_PM_MMCR0_PMC1_CACHE_PARADOXES = 0b0010000u << 6,
OS_PM_MMCR0_PMC1_CIU_LOAD_REQUESTS = 0b0010100u << 6,
OS_PM_MMCR0_PMC1_BIU_ADDRESS_ONLY_REQUESTS = 0b0010101u << 6,
OS_PM_MMCR0_PMC1_CIU_PARADOXES = 0b0010110u << 6,
OS_PM_MMCR0_PMC1_60XE_BUS_DATA_BEATS = 0b0010111u << 6,
typedef enum OSPerfMonMMCR0Flags
{
OS_PM_MMCR0_PMC1_CURRENT = 0b0000000u << 6,
OS_PM_MMCR0_PMC1_CPU_CYCLES = 0b0000001u << 6,
OS_PM_MMCR0_PMC1_INSTRUCTIONS_COMPLETED = 0b0000010u << 6,
OS_PM_MMCR0_PMC1_TBL_RISING_TRANSITIONS = 0b0000011u << 6,
OS_PM_MMCR0_PMC1_INSTRUCTIONS_DISPATCHED = 0b0000100u << 6,
OS_PM_MMCR0_PMC1_EIEIO_INSTRUCTIONS_COMPLETED = 0b0000101u << 6,
OS_PM_MMCR0_PMC1_ITLB_SEARCH_CYCLES = 0b0000110u << 6,
OS_PM_MMCR0_PMC1_L2_HITS = 0b0000111u << 6,
OS_PM_MMCR0_PMC1_INSTRUCTIONS_EA_DELIVERED = 0b0001000u << 6,
OS_PM_MMCR0_PMC1_INSTRUCTIONS_COMPLETED_MATCHES_IABR = 0b0001001u << 6,
OS_PM_MMCR0_PMC1_SLOW_L1_MISSES = 0b0001010u << 6,
OS_PM_MMCR0_PMC1_UNRESOLVED_BRANCHES = 0b0001011u << 6,
OS_PM_MMCR0_PMC1_UNRESOLVED_STALL_CYCLES = 0b0001100u << 6,
OS_PM_MMCR0_PMC1_L1_SHARED_STORES = 0b0001110u << 6,
OS_PM_MMCR0_PMC1_L2_SHARED_INTERVENTIONS = 0b0001111u << 6,
OS_PM_MMCR0_PMC1_CACHE_PARADOXES = 0b0010000u << 6,
OS_PM_MMCR0_PMC1_CIU_LOAD_REQUESTS = 0b0010100u << 6,
OS_PM_MMCR0_PMC1_BIU_ADDRESS_ONLY_REQUESTS = 0b0010101u << 6,
OS_PM_MMCR0_PMC1_CIU_PARADOXES = 0b0010110u << 6,
OS_PM_MMCR0_PMC1_60XE_BUS_DATA_BEATS = 0b0010111u << 6,
OS_PM_MMCR0_PMC2_CURRENT = 0b000000u,
OS_PM_MMCR0_PMC2_CPU_CYCLES = 0b000001u,
OS_PM_MMCR0_PMC2_INSTRUCTIONS_COMPLETED = 0b000010u,
OS_PM_MMCR0_PMC2_TBL_RISING_TRANSITIONS = 0b000011u,
OS_PM_MMCR0_PMC2_INSTRUCTIONS_DISPATCHED = 0b000100u,
OS_PM_MMCR0_PMC2_L1_ICACHE_MISSES = 0b000101u,
OS_PM_MMCR0_PMC2_ITLB_MISSES = 0b000110u,
OS_PM_MMCR0_PMC2_L2_INSTRUCTION_MISSES = 0b000111u,
OS_PM_MMCR0_PMC2_PRED_BRANCHES_NOT_TAKEN = 0b001000u,
OS_PM_MMCR0_PMC2_RESERVED_LOADS = 0b001010u,
OS_PM_MMCR0_PMC2_LOADS_AND_STORES = 0b001011u,
OS_PM_MMCR0_PMC2_CACHE_SNOOPS = 0b001100u,
OS_PM_MMCR0_PMC2_L1_TO_L2_CASTOUTS = 0b001101u,
OS_PM_MMCR0_PMC2_SYSTEM_UNIT_INSTRUCTIONS = 0b001110u,
OS_PM_MMCR0_PMC2_L1_INSTRUCTION_MISS_CYCLES = 0b001111u,
OS_PM_MMCR0_PMC2_FIRST_SPECULATIVE_BRANCH_RESOLVES = 0b010000u,
OS_PM_MMCR0_PMC2_L2_SHARED_STORES = 0b010001u,
OS_PM_MMCR0_PMC2_L1_SHARED_INTERVENTIONS = 0b010010u,
OS_PM_MMCR0_PMC2_CIU_STORE_REQUESTS = 0b010100u,
OS_PM_MMCR0_PMC2_SLOW_OUTSTANDING_BIU_TRANSACTIONS = 0b010101u,
OS_PM_MMCR0_PMC2_CIU_MODIFIED_INTERVENTIONS = 0b010110u,
OS_PM_MMCR0_PMC2_CURRENT = 0b000000u,
OS_PM_MMCR0_PMC2_CPU_CYCLES = 0b000001u,
OS_PM_MMCR0_PMC2_INSTRUCTIONS_COMPLETED = 0b000010u,
OS_PM_MMCR0_PMC2_TBL_RISING_TRANSITIONS = 0b000011u,
OS_PM_MMCR0_PMC2_INSTRUCTIONS_DISPATCHED = 0b000100u,
OS_PM_MMCR0_PMC2_L1_ICACHE_MISSES = 0b000101u,
OS_PM_MMCR0_PMC2_ITLB_MISSES = 0b000110u,
OS_PM_MMCR0_PMC2_L2_INSTRUCTION_MISSES = 0b000111u,
OS_PM_MMCR0_PMC2_PRED_BRANCHES_NOT_TAKEN = 0b001000u,
OS_PM_MMCR0_PMC2_RESERVED_LOADS = 0b001010u,
OS_PM_MMCR0_PMC2_LOADS_AND_STORES = 0b001011u,
OS_PM_MMCR0_PMC2_CACHE_SNOOPS = 0b001100u,
OS_PM_MMCR0_PMC2_L1_TO_L2_CASTOUTS = 0b001101u,
OS_PM_MMCR0_PMC2_SYSTEM_UNIT_INSTRUCTIONS = 0b001110u,
OS_PM_MMCR0_PMC2_L1_INSTRUCTION_MISS_CYCLES = 0b001111u,
OS_PM_MMCR0_PMC2_FIRST_SPECULATIVE_BRANCH_RESOLVES = 0b010000u,
OS_PM_MMCR0_PMC2_L2_SHARED_STORES = 0b010001u,
OS_PM_MMCR0_PMC2_L1_SHARED_INTERVENTIONS = 0b010010u,
OS_PM_MMCR0_PMC2_CIU_STORE_REQUESTS = 0b010100u,
OS_PM_MMCR0_PMC2_SLOW_OUTSTANDING_BIU_TRANSACTIONS = 0b010101u,
OS_PM_MMCR0_PMC2_CIU_MODIFIED_INTERVENTIONS = 0b010110u,
} OSPerfMonMMCR0Flags;
/**
@ -79,48 +81,49 @@ typedef enum OSPerfMonMMCR0Flags {
*
* \sa OSSetPerformanceMonitor
*/
typedef enum OSPerfMonMMCR1Flags {
OS_PM_MMCR1_PMC3_CURRENT = 0b00000u << 27,
OS_PM_MMCR1_PMC3_CPU_CYCLES = 0b00001u << 27,
OS_PM_MMCR1_PMC3_INSTRUCTIONS_COMPLETED = 0b00010u << 27,
OS_PM_MMCR1_PMC3_TBL_RISING_TRANSITIONS = 0b00011u << 27,
OS_PM_MMCR1_PMC3_INSTRUCTIONS_DISPATCHED = 0b00100u << 27,
OS_PM_MMCR1_PMC3_L1_DCACHE_MISSES = 0b00101u << 27,
OS_PM_MMCR1_PMC3_DTLB_MISSES = 0b00110u << 27,
OS_PM_MMCR1_PMC3_L2_DATA_MISSES = 0b00111u << 27,
OS_PM_MMCR1_PMC3_PRED_BRANCHES_TAKEN = 0b01000u << 27,
OS_PM_MMCR1_PMC3_COND_STORES_COMPLETED = 0b01010u << 27,
OS_PM_MMCR1_PMC3_FPU_INSTRUCTIONS_COMPLETED = 0b01011u << 27,
OS_PM_MMCR1_PMC3_L2_CASTOUTS_BY_SNOOPS = 0b01100u << 27,
OS_PM_MMCR1_PMC3_L2_CACHE_OPERATIONS = 0b01101u << 27,
OS_PM_MMCR1_PMC3_L1_LOAD_MISS_CYCLES = 0b01111u << 27,
OS_PM_MMCR1_PMC3_SECOND_SPECULATIVE_BRANCH_RESOLVES = 0b10000u << 27,
OS_PM_MMCR1_PMC3_BPU_STALL_LR_CR_CYCLES = 0b10001u << 27,
OS_PM_MMCR1_PMC3_L1_MODIFIED_INTERVENTIONS = 0b10010u << 27,
OS_PM_MMCR1_PMC3_ICBI_SNOOPS = 0b10011u << 27,
OS_PM_MMCR1_PMC3_CIU_ADDRESS_ONLY_REQUESTS = 0b10100u << 27,
OS_PM_MMCR1_PMC3_BIU_LOAD_REQUESTS = 0b10101u << 27,
OS_PM_MMCR1_PMC3_CIU_SHARED_INTERVENTIONS = 0b10110u << 27,
typedef enum OSPerfMonMMCR1Flags
{
OS_PM_MMCR1_PMC3_CURRENT = 0b00000u << 27,
OS_PM_MMCR1_PMC3_CPU_CYCLES = 0b00001u << 27,
OS_PM_MMCR1_PMC3_INSTRUCTIONS_COMPLETED = 0b00010u << 27,
OS_PM_MMCR1_PMC3_TBL_RISING_TRANSITIONS = 0b00011u << 27,
OS_PM_MMCR1_PMC3_INSTRUCTIONS_DISPATCHED = 0b00100u << 27,
OS_PM_MMCR1_PMC3_L1_DCACHE_MISSES = 0b00101u << 27,
OS_PM_MMCR1_PMC3_DTLB_MISSES = 0b00110u << 27,
OS_PM_MMCR1_PMC3_L2_DATA_MISSES = 0b00111u << 27,
OS_PM_MMCR1_PMC3_PRED_BRANCHES_TAKEN = 0b01000u << 27,
OS_PM_MMCR1_PMC3_COND_STORES_COMPLETED = 0b01010u << 27,
OS_PM_MMCR1_PMC3_FPU_INSTRUCTIONS_COMPLETED = 0b01011u << 27,
OS_PM_MMCR1_PMC3_L2_CASTOUTS_BY_SNOOPS = 0b01100u << 27,
OS_PM_MMCR1_PMC3_L2_CACHE_OPERATIONS = 0b01101u << 27,
OS_PM_MMCR1_PMC3_L1_LOAD_MISS_CYCLES = 0b01111u << 27,
OS_PM_MMCR1_PMC3_SECOND_SPECULATIVE_BRANCH_RESOLVES = 0b10000u << 27,
OS_PM_MMCR1_PMC3_BPU_STALL_LR_CR_CYCLES = 0b10001u << 27,
OS_PM_MMCR1_PMC3_L1_MODIFIED_INTERVENTIONS = 0b10010u << 27,
OS_PM_MMCR1_PMC3_ICBI_SNOOPS = 0b10011u << 27,
OS_PM_MMCR1_PMC3_CIU_ADDRESS_ONLY_REQUESTS = 0b10100u << 27,
OS_PM_MMCR1_PMC3_BIU_LOAD_REQUESTS = 0b10101u << 27,
OS_PM_MMCR1_PMC3_CIU_SHARED_INTERVENTIONS = 0b10110u << 27,
OS_PM_MMCR1_PMC4_CURRENT = 0b00000u << 22,
OS_PM_MMCR1_PMC4_CPU_CYCLES = 0b00001u << 22,
OS_PM_MMCR1_PMC4_INSTRUCTIONS_COMPLETED = 0b00010u << 22,
OS_PM_MMCR1_PMC4_TBL_RISING_TRANSITIONS = 0b00011u << 22,
OS_PM_MMCR1_PMC4_INSTRUCTIONS_DISPATCHED = 0b00100u << 22,
OS_PM_MMCR1_PMC4_L2_CASTOUTS = 0b00101u << 22,
OS_PM_MMCR1_PMC4_DTLB_SEARCH_CYCLES = 0b00110u << 22,
OS_PM_MMCR1_PMC4_BRANCHES_MISPREDICTED = 0b01000u << 22,
OS_PM_MMCR1_PMC4_INTACT_COND_STORES_COMPLETED = 0b01010u << 22,
OS_PM_MMCR1_PMC4_SYNC_INSTRUCTIONS_COMPLETED = 0b01011u << 22,
OS_PM_MMCR1_PMC4_SNOOP_RETRIES = 0b01100u << 22,
OS_PM_MMCR1_PMC4_INTEGER_OPERATIONS = 0b01101u << 22,
OS_PM_MMCR1_PMC4_BPU_STALL_TWO_BRANCHES_CYCLES = 0b01110u << 22,
OS_PM_MMCR1_PMC4_L2_MODIFIED_INTERVENTIONS = 0b10000u << 22,
OS_PM_MMCR1_PMC4_TLBIE_SNOOPS = 0b10001u << 22,
OS_PM_MMCR1_PMC4_L2_BANK_REFRESH_OVERFLOWS = 0b10010u << 22,
OS_PM_MMCR1_PMC4_CIU_ARTRY_COUNT = 0b10100u << 22,
OS_PM_MMCR1_PMC4_BIU_STORE_REQUESTS = 0b10101u << 22,
OS_PM_MMCR1_PMC4_CIU_TWO_CORE_SHARED_INTERVENTIONS = 0b10110u << 22,
OS_PM_MMCR1_PMC4_CURRENT = 0b00000u << 22,
OS_PM_MMCR1_PMC4_CPU_CYCLES = 0b00001u << 22,
OS_PM_MMCR1_PMC4_INSTRUCTIONS_COMPLETED = 0b00010u << 22,
OS_PM_MMCR1_PMC4_TBL_RISING_TRANSITIONS = 0b00011u << 22,
OS_PM_MMCR1_PMC4_INSTRUCTIONS_DISPATCHED = 0b00100u << 22,
OS_PM_MMCR1_PMC4_L2_CASTOUTS = 0b00101u << 22,
OS_PM_MMCR1_PMC4_DTLB_SEARCH_CYCLES = 0b00110u << 22,
OS_PM_MMCR1_PMC4_BRANCHES_MISPREDICTED = 0b01000u << 22,
OS_PM_MMCR1_PMC4_INTACT_COND_STORES_COMPLETED = 0b01010u << 22,
OS_PM_MMCR1_PMC4_SYNC_INSTRUCTIONS_COMPLETED = 0b01011u << 22,
OS_PM_MMCR1_PMC4_SNOOP_RETRIES = 0b01100u << 22,
OS_PM_MMCR1_PMC4_INTEGER_OPERATIONS = 0b01101u << 22,
OS_PM_MMCR1_PMC4_BPU_STALL_TWO_BRANCHES_CYCLES = 0b01110u << 22,
OS_PM_MMCR1_PMC4_L2_MODIFIED_INTERVENTIONS = 0b10000u << 22,
OS_PM_MMCR1_PMC4_TLBIE_SNOOPS = 0b10001u << 22,
OS_PM_MMCR1_PMC4_L2_BANK_REFRESH_OVERFLOWS = 0b10010u << 22,
OS_PM_MMCR1_PMC4_CIU_ARTRY_COUNT = 0b10100u << 22,
OS_PM_MMCR1_PMC4_BIU_STORE_REQUESTS = 0b10101u << 22,
OS_PM_MMCR1_PMC4_CIU_TWO_CORE_SHARED_INTERVENTIONS = 0b10110u << 22,
} OSPerfMonMMCR1Flags;
/**
@ -139,64 +142,61 @@ typedef enum OSPerfMonMMCR1Flags {
* \param pmc3 Value to write to register PMC3.
* \param pmc4 Value to write to register PMC4.
*/
void OSSetPerformanceMonitor(uint32_t arg_mask,
uint32_t mmcr0,
uint32_t mmcr1,
uint32_t pmc1,
uint32_t pmc2,
uint32_t pmc3,
uint32_t pmc4);
void
OSSetPerformanceMonitor(uint32_t arg_mask,
uint32_t mmcr0,
uint32_t mmcr1,
uint32_t pmc1,
uint32_t pmc2,
uint32_t pmc3,
uint32_t pmc4);
/**
* Convenience function to read from UPMC1.
*/
static inline
uint32_t
static inline uint32_t
OSGetUPMC1()
{
uint32_t result;
asm("mfupmc1 %[result]"
: [result] "=r"(result));
return result;
uint32_t result;
asm("mfupmc1 %[result]"
: [result] "=r"(result));
return result;
}
/**
* Convenience function to read from UPMC2.
*/
static inline
uint32_t
static inline uint32_t
OSGetUPMC2()
{
uint32_t result;
asm("mfupmc2 %[result]"
: [result] "=r"(result));
return result;
uint32_t result;
asm("mfupmc2 %[result]"
: [result] "=r"(result));
return result;
}
/**
* Convenience function to read from UPMC3.
*/
static inline
uint32_t
static inline uint32_t
OSGetUPMC3()
{
uint32_t result;
asm("mfupmc3 %[result]"
: [result] "=r"(result));
return result;
uint32_t result;
asm("mfupmc3 %[result]"
: [result] "=r"(result));
return result;
}
/**
* Convenience function to read from UPMC4.
*/
static inline
uint32_t
static inline uint32_t
OSGetUPMC4()
{
uint32_t result;
asm("mfupmc4 %[result]"
: [result] "=r"(result));
return result;
uint32_t result;
asm("mfupmc4 %[result]"
: [result] "=r"(result));
return result;
}
#ifdef __cplusplus

View File

@ -13,14 +13,14 @@ extern "C" {
typedef enum OSSavedFrameType
{
OS_SAVED_FRAME_A = 0,
OS_SAVED_FRAME_B = 1,
OS_SAVED_FRAME_A = 0,
OS_SAVED_FRAME_B = 1,
} OSSavedFrameType;
typedef enum OSSavedFrameScreen
{
OS_SAVED_FRAME_SCREEN_TV = 2,
OS_SAVED_FRAME_SCREEN_DRC = 4,
OS_SAVED_FRAME_SCREEN_TV = 2,
OS_SAVED_FRAME_SCREEN_DRC = 4,
} OSSavedFrameScreen;
uint32_t

View File

@ -11,7 +11,7 @@
extern "C" {
#endif
extern void* __OSSchedulerLock;
extern void *__OSSchedulerLock;
void
__OSEnableScheduler();
@ -20,17 +20,17 @@ void
__OSDisableScheduler();
void
__OSLockScheduler(void* lockId);
__OSLockScheduler(void *lockId);
void
__OSUnlockScheduler(void* lockId);
__OSUnlockScheduler(void *lockId);
BOOL
OSIsSchedulerLocked(void* lockId);
OSIsSchedulerLocked(void *lockId);
void
__OSTryLockScheduler(void* lockId);
__OSTryLockScheduler(void *lockId);
void
__OSTouchSchedulerLock();

View File

@ -44,9 +44,9 @@ extern "C" {
typedef enum OSScreenID
{
//! Represents the TV connected to the system.
SCREEN_TV = 0,
SCREEN_TV = 0,
//! Represents the screen in the DRC (gamepad).
SCREEN_DRC = 1,
SCREEN_DRC = 1,
} OSScreenID;
/**

View File

@ -26,39 +26,39 @@ typedef struct SmdSimpleBufPool SmdSimpleBufPool;
typedef enum SmdLockType
{
//! Locking is done with a mutex
SMD_LOCK_TYPE_MUTEX = 0,
//! Locking is done by disabling interrupts
SMD_LOCK_TYPE_DISABLE_INTERRUPTS = 1,
//! No locking is done
SMD_LOCK_TYPE_NONE = 2,
//! Locking is done with a mutex
SMD_LOCK_TYPE_MUTEX = 0,
//! Locking is done by disabling interrupts
SMD_LOCK_TYPE_DISABLE_INTERRUPTS = 1,
//! No locking is done
SMD_LOCK_TYPE_NONE = 2,
} SmdLockType;
typedef enum SmdPpcState
{
SMD_PPC_STATE_INVALID = 0,
SMD_PPC_STATE_INITIALIZED = 1,
SMD_PPC_STATE_CLOSED = 2,
SMD_PPC_STATE_OPENED = 3,
SMD_PPC_STATE_INVALID = 0,
SMD_PPC_STATE_INITIALIZED = 1,
SMD_PPC_STATE_CLOSED = 2,
SMD_PPC_STATE_OPENED = 3,
} SmdPpcState;
typedef enum SmdInterfaceState
{
SMD_INTERFACE_STATE_OPENED = 0x2222,
SMD_INTERFACE_STATE_CLOSED = 0x3333,
SMD_INTERFACE_STATE_OPENED = 0x2222,
SMD_INTERFACE_STATE_CLOSED = 0x3333,
} SmdInterfaceState;
typedef enum SmdElementType
{
SMD_ELEMENT_TYPE_MESSAGE = 0,
SMD_ELEMENT_TYPE_VECTOR_SPEC = 1,
SMD_ELEMENT_TYPE_VECTOR = 2,
SMD_ELEMENT_TYPE_MESSAGE = 0,
SMD_ELEMENT_TYPE_VECTOR_SPEC = 1,
SMD_ELEMENT_TYPE_VECTOR = 2,
} SmdElementType;
struct SmdVectorSpec
{
void *ptr;
uint32_t size;
void *ptr;
uint32_t size;
};
WUT_CHECK_OFFSET(SmdVectorSpec, 0x00, ptr);
WUT_CHECK_OFFSET(SmdVectorSpec, 0x04, size);
@ -66,9 +66,9 @@ WUT_CHECK_SIZE(SmdVectorSpec, 0x8);
struct SmdVector
{
uint32_t command;
int32_t count;
SmdVectorSpec vecs[4];
uint32_t command;
int32_t count;
SmdVectorSpec vecs[4];
};
WUT_CHECK_OFFSET(SmdVector, 0x00, command);
WUT_CHECK_OFFSET(SmdVector, 0x04, count);
@ -77,13 +77,14 @@ WUT_CHECK_SIZE(SmdVector, 0x28);
struct SmdElement
{
SmdElementType type;
uint32_t size;
union {
uint8_t data[0xf8];
SmdVector spec;
uint32_t vectorPaddr;
};
SmdElementType type;
uint32_t size;
union
{
uint8_t data[0xf8];
SmdVector spec;
uint32_t vectorPaddr;
};
};
WUT_CHECK_OFFSET(SmdElement, 0x00, type);
WUT_CHECK_OFFSET(SmdElement, 0x04, size);
@ -94,13 +95,14 @@ WUT_CHECK_SIZE(SmdElement, 0x100);
struct SmdReceiveData
{
SmdElementType type;
uint32_t size;
union {
uint8_t message[0x80];
SmdVector spec;
SmdVector *vector;
};
SmdElementType type;
uint32_t size;
union
{
uint8_t message[0x80];
SmdVector spec;
SmdVector *vector;
};
};
WUT_CHECK_OFFSET(SmdReceiveData, 0x00, type);
WUT_CHECK_OFFSET(SmdReceiveData, 0x04, size);
@ -111,16 +113,16 @@ WUT_CHECK_SIZE(SmdReceiveData, 0x88);
struct SmdInterface
{
SmdInterfaceState state;
WUT_PADDING_BYTES(0x7C);
uint32_t elementCount;
WUT_PADDING_BYTES(0x7C);
int32_t readOffset;
WUT_PADDING_BYTES(0x7C);
int32_t writeOffset;
WUT_PADDING_BYTES(0x7C);
uint32_t bufPaddr;
WUT_PADDING_BYTES(0x7C);
SmdInterfaceState state;
WUT_PADDING_BYTES(0x7C);
uint32_t elementCount;
WUT_PADDING_BYTES(0x7C);
int32_t readOffset;
WUT_PADDING_BYTES(0x7C);
int32_t writeOffset;
WUT_PADDING_BYTES(0x7C);
uint32_t bufPaddr;
WUT_PADDING_BYTES(0x7C);
};
WUT_CHECK_OFFSET(SmdInterface, 0x000, state);
WUT_CHECK_OFFSET(SmdInterface, 0x080, elementCount);
@ -131,13 +133,13 @@ WUT_CHECK_SIZE(SmdInterface, 0x280);
struct SmdCtrlTable
{
char name[0x10];
uint32_t reusedCount;
WUT_PADDING_BYTES(0x6C);
SmdInterface iopInterface;
WUT_PADDING_BYTES(0x40);
SmdInterface ppcInterface;
WUT_PADDING_BYTES(0x40);
char name[0x10];
uint32_t reusedCount;
WUT_PADDING_BYTES(0x6C);
SmdInterface iopInterface;
WUT_PADDING_BYTES(0x40);
SmdInterface ppcInterface;
WUT_PADDING_BYTES(0x40);
};
WUT_CHECK_OFFSET(SmdCtrlTable, 0x000, name);
WUT_CHECK_OFFSET(SmdCtrlTable, 0x010, reusedCount);
@ -147,12 +149,12 @@ WUT_CHECK_SIZE(SmdCtrlTable, 0x600);
struct SmdPpcCtrlTableVectors
{
SmdCtrlTable *ctrlTable;
uint32_t ctrlTableSize;
SmdElement *writeBuf;
uint32_t writeBufSize;
SmdElement *readBuf;
uint32_t readBufSize;
SmdCtrlTable *ctrlTable;
uint32_t ctrlTableSize;
SmdElement *writeBuf;
uint32_t writeBufSize;
SmdElement *readBuf;
uint32_t readBufSize;
};
WUT_CHECK_OFFSET(SmdPpcCtrlTableVectors, 0x00, ctrlTable);
WUT_CHECK_OFFSET(SmdPpcCtrlTableVectors, 0x04, ctrlTableSize);
@ -164,15 +166,15 @@ WUT_CHECK_SIZE(SmdPpcCtrlTableVectors, 0x18);
struct SmdPpc
{
SmdPpc *self;
SmdCtrlTable *ctrlTable;
SmdLockType lockType;
OSMutex mutex;
uint32_t messageCount;
SmdElement *writeBuf;
SmdElement *readBuf;
SmdPpcState state;
WUT_PADDING_BYTES(0x38);
SmdPpc *self;
SmdCtrlTable *ctrlTable;
SmdLockType lockType;
OSMutex mutex;
uint32_t messageCount;
SmdElement *writeBuf;
SmdElement *readBuf;
SmdPpcState state;
WUT_PADDING_BYTES(0x38);
};
WUT_CHECK_OFFSET(SmdPpc, 0x00, self);
WUT_CHECK_OFFSET(SmdPpc, 0x04, ctrlTable);
@ -186,19 +188,19 @@ WUT_CHECK_SIZE(SmdPpc, 0x80);
struct SmdSimpleBufPool
{
SmdSimpleBufPool *self;
OSMutex mutex;
void *poolData;
uint32_t poolDataSize;
SmdLockType lockType;
uint32_t allocSize;
uint32_t realAllocSize;
uint32_t maxAllocCount;
void *allocPoolStart;
void *allocPoolEnd;
uint32_t elementsIn;
uint32_t freeErrorCount;
WUT_PADDING_BYTES(0x28);
SmdSimpleBufPool *self;
OSMutex mutex;
void *poolData;
uint32_t poolDataSize;
SmdLockType lockType;
uint32_t allocSize;
uint32_t realAllocSize;
uint32_t maxAllocCount;
void *allocPoolStart;
void *allocPoolEnd;
uint32_t elementsIn;
uint32_t freeErrorCount;
WUT_PADDING_BYTES(0x28);
};
WUT_CHECK_OFFSET(SmdSimpleBufPool, 0x00, self);
WUT_CHECK_OFFSET(SmdSimpleBufPool, 0x04, mutex);

View File

@ -21,19 +21,19 @@ typedef uint32_t (*MPTaskFunc)(uint32_t, uint32_t);
typedef enum MPTaskState
{
MP_TASK_STATE_INITIALISED = 1 << 0,
MP_TASK_STATE_READY = 1 << 1,
MP_TASK_STATE_RUNNING = 1 << 2,
MP_TASK_STATE_FINISHED = 1 << 3,
MP_TASK_STATE_INITIALISED = 1 << 0,
MP_TASK_STATE_READY = 1 << 1,
MP_TASK_STATE_RUNNING = 1 << 2,
MP_TASK_STATE_FINISHED = 1 << 3,
} MPTaskState;
typedef enum MPTaskQueueState
{
MP_TASK_QUEUE_STATE_INITIALISED = 1 << 0,
MP_TASK_QUEUE_STATE_READY = 1 << 1,
MP_TASK_QUEUE_STATE_STOPPING = 1 << 2,
MP_TASK_QUEUE_STATE_STOPPED = 1 << 3,
MP_TASK_QUEUE_STATE_FINISHED = 1 << 4,
MP_TASK_QUEUE_STATE_INITIALISED = 1 << 0,
MP_TASK_QUEUE_STATE_READY = 1 << 1,
MP_TASK_QUEUE_STATE_STOPPING = 1 << 2,
MP_TASK_QUEUE_STATE_STOPPED = 1 << 3,
MP_TASK_QUEUE_STATE_FINISHED = 1 << 4,
} MPTaskQueueState;
#pragma pack(push, 1)
@ -177,7 +177,7 @@ MPInitTask(MPTask *task,
uint32_t userArg2);
BOOL
MPTermTask(MPTask* task);
MPTermTask(MPTask *task);
BOOL
MPGetTaskInfo(MPTask *task,

View File

@ -3,9 +3,9 @@
#include <time.h>
#include "alarm.h"
#include "context.h"
#include "time.h"
#include "threadqueue.h"
#include "exception.h"
#include "threadqueue.h"
#include "time.h"
/**
* \defgroup coreinit_thread Thread
@ -60,73 +60,74 @@ typedef void (*OSThreadDeallocatorFn)(OSThread *thread, void *stack);
typedef enum OSThreadSpecificID
{
//! These can be used by applications
OS_THREAD_SPECIFIC_0 = 0,
OS_THREAD_SPECIFIC_1 = 1,
OS_THREAD_SPECIFIC_2 = 2,
OS_THREAD_SPECIFIC_3 = 3,
OS_THREAD_SPECIFIC_4 = 4,
OS_THREAD_SPECIFIC_5 = 5,
OS_THREAD_SPECIFIC_6 = 6,
OS_THREAD_SPECIFIC_7 = 7,
OS_THREAD_SPECIFIC_8 = 8,
OS_THREAD_SPECIFIC_9 = 9,
OS_THREAD_SPECIFIC_10 = 10,
OS_THREAD_SPECIFIC_11 = 11,
OS_THREAD_SPECIFIC_12 = 12,
OS_THREAD_SPECIFIC_13 = 13,
OS_THREAD_SPECIFIC_0 = 0,
OS_THREAD_SPECIFIC_1 = 1,
OS_THREAD_SPECIFIC_2 = 2,
OS_THREAD_SPECIFIC_3 = 3,
OS_THREAD_SPECIFIC_4 = 4,
OS_THREAD_SPECIFIC_5 = 5,
OS_THREAD_SPECIFIC_6 = 6,
OS_THREAD_SPECIFIC_7 = 7,
OS_THREAD_SPECIFIC_8 = 8,
OS_THREAD_SPECIFIC_9 = 9,
OS_THREAD_SPECIFIC_10 = 10,
OS_THREAD_SPECIFIC_11 = 11,
OS_THREAD_SPECIFIC_12 = 12,
OS_THREAD_SPECIFIC_13 = 13,
//! These are reserved to wut for internal use
OS_THREAD_SPECIFIC_WUT_RESERVED_0 = 14,
OS_THREAD_SPECIFIC_WUT_RESERVED_1 = 15,
OS_THREAD_SPECIFIC_WUT_RESERVED_0 = 14,
OS_THREAD_SPECIFIC_WUT_RESERVED_1 = 15,
} OSThreadSpecificID;
enum OS_THREAD_STATE
{
OS_THREAD_STATE_NONE = 0,
OS_THREAD_STATE_NONE = 0,
//! Thread is ready to run
OS_THREAD_STATE_READY = 1 << 0,
OS_THREAD_STATE_READY = 1 << 0,
//! Thread is running
OS_THREAD_STATE_RUNNING = 1 << 1,
OS_THREAD_STATE_RUNNING = 1 << 1,
//! Thread is waiting, i.e. on a mutex
OS_THREAD_STATE_WAITING = 1 << 2,
OS_THREAD_STATE_WAITING = 1 << 2,
//! Thread is about to terminate
OS_THREAD_STATE_MORIBUND = 1 << 3,
OS_THREAD_STATE_MORIBUND = 1 << 3,
};
enum OS_THREAD_REQUEST
{
OS_THREAD_REQUEST_NONE = 0,
OS_THREAD_REQUEST_SUSPEND = 1,
OS_THREAD_REQUEST_CANCEL = 2,
OS_THREAD_REQUEST_NONE = 0,
OS_THREAD_REQUEST_SUSPEND = 1,
OS_THREAD_REQUEST_CANCEL = 2,
};
enum OS_THREAD_ATTRIB
{
//! Allow the thread to run on CPU0.
OS_THREAD_ATTRIB_AFFINITY_CPU0 = 1 << 0,
OS_THREAD_ATTRIB_AFFINITY_CPU0 = 1 << 0,
//! Allow the thread to run on CPU1.
OS_THREAD_ATTRIB_AFFINITY_CPU1 = 1 << 1,
OS_THREAD_ATTRIB_AFFINITY_CPU1 = 1 << 1,
//! Allow the thread to run on CPU2.
OS_THREAD_ATTRIB_AFFINITY_CPU2 = 1 << 2,
OS_THREAD_ATTRIB_AFFINITY_CPU2 = 1 << 2,
//! Allow the thread to run any CPU.
OS_THREAD_ATTRIB_AFFINITY_ANY = ((1 << 0) | (1 << 1) | (1 << 2)),
OS_THREAD_ATTRIB_AFFINITY_ANY = ((1 << 0) | (1 << 1) | (1 << 2)),
//! Start the thread detached.
OS_THREAD_ATTRIB_DETACHED = 1 << 3,
OS_THREAD_ATTRIB_DETACHED = 1 << 3,
//! Enables tracking of stack usage.
OS_THREAD_ATTRIB_STACK_USAGE = 1 << 5,
OS_THREAD_ATTRIB_STACK_USAGE = 1 << 5,
OS_THREAD_ATTRIB_UNKNOWN = 1 << 7
OS_THREAD_ATTRIB_UNKNOWN = 1 << 7
};
enum OS_THREAD_TYPE {
enum OS_THREAD_TYPE
{
OS_THREAD_TYPE_DRIVER = 0,
OS_THREAD_TYPE_IO = 1,
OS_THREAD_TYPE_APP = 2
@ -169,7 +170,7 @@ WUT_CHECK_SIZE(OSFastMutexQueue, 0x08);
struct OSTLSSection
{
void* data;
void *data;
WUT_UNKNOWN_BYTES(4);
};
WUT_CHECK_OFFSET(OSTLSSection, 0x00, data);
@ -309,10 +310,10 @@ struct WUT_ALIGNAS(8) OSThread
WUT_UNKNOWN_BYTES(0x2);
//! TLS Sections
OSTLSSection* tlsSections;
OSTLSSection *tlsSections;
//! The fast mutex we are currently waiting for
OSFastMutex* fastMutex;
OSFastMutex *fastMutex;
//! The fast mutexes we are currently contended on
OSFastMutexQueue contendedFastMutexes;

View File

@ -53,17 +53,17 @@ WUT_CHECK_OFFSET(OSCalendarTime, 0x20, tm_msec);
WUT_CHECK_OFFSET(OSCalendarTime, 0x24, tm_usec);
WUT_CHECK_SIZE(OSCalendarTime, 0x28);
#define OSTimerClockSpeed ((OSGetSystemInfo()->busClockSpeed) / 4)
#define OSTimerClockSpeed ((OSGetSystemInfo()->busClockSpeed) / 4)
#define OSSecondsToTicks(val) ((uint64_t)(val) * (uint64_t)OSTimerClockSpeed)
#define OSMillisecondsToTicks(val) (((uint64_t)(val) * (uint64_t)OSTimerClockSpeed) / 1000ull)
#define OSMicrosecondsToTicks(val) (((uint64_t)(val) * (uint64_t)OSTimerClockSpeed) / 1000000ull)
#define OSNanosecondsToTicks(val) (((uint64_t)(val) * ((uint64_t)OSTimerClockSpeed) / 31250ull) / 32000ull)
#define OSSecondsToTicks(val) ((uint64_t)(val) * (uint64_t)OSTimerClockSpeed)
#define OSMillisecondsToTicks(val) (((uint64_t)(val) * (uint64_t)OSTimerClockSpeed) / 1000ull)
#define OSMicrosecondsToTicks(val) (((uint64_t)(val) * (uint64_t)OSTimerClockSpeed) / 1000000ull)
#define OSNanosecondsToTicks(val) (((uint64_t)(val) * ((uint64_t)OSTimerClockSpeed) / 31250ull) / 32000ull)
#define OSTicksToSeconds(val) ((uint64_t)(val) / (uint64_t)OSTimerClockSpeed)
#define OSTicksToMilliseconds(val) (((uint64_t)(val) * 1000ull) / (uint64_t)OSTimerClockSpeed)
#define OSTicksToMicroseconds(val) (((uint64_t)(val) * 1000000ull) / (uint64_t)OSTimerClockSpeed)
#define OSTicksToNanoseconds(val) (((uint64_t)(val) * 32000ull) / ((uint64_t)OSTimerClockSpeed / 31250ull))
#define OSTicksToSeconds(val) ((uint64_t)(val) / (uint64_t)OSTimerClockSpeed)
#define OSTicksToMilliseconds(val) (((uint64_t)(val) * 1000ull) / (uint64_t)OSTimerClockSpeed)
#define OSTicksToMicroseconds(val) (((uint64_t)(val) * 1000000ull) / (uint64_t)OSTimerClockSpeed)
#define OSTicksToNanoseconds(val) (((uint64_t)(val) * 32000ull) / ((uint64_t)OSTimerClockSpeed / 31250ull))
OSTime
OSGetTime();

View File

@ -11,7 +11,8 @@
extern "C" {
#endif
uint64_t OSGetTitleID(void);
uint64_t
OSGetTitleID(void);
#ifdef __cplusplus
}

View File

@ -9,8 +9,9 @@ extern "C" {
int
__OSGetSavedAudioFlags();
int __OSGetTransitionAudioBuffer(void **buffer,
uint32_t *size);
int
__OSGetTransitionAudioBuffer(void **buffer,
uint32_t *size);
void
__OSSetTransitionAudioSize(uint32_t size);

View File

@ -20,75 +20,75 @@ typedef struct UCAsyncParams UCAsyncParams;
typedef enum UCCommand
{
UC_CMD_READ_SYS_CONFIG = 0x30,
UC_CMD_WRITE_SYS_CONFIG = 0x31,
UC_CMD_DELETE_SYS_CONFIG = 0x32,
UC_CMD_QUERY_SYS_CONFIG = 0x33,
UC_CMD_LIST_SYS_CONFIG = 0x34,
UC_CMD_READ_SYS_CONFIG = 0x30,
UC_CMD_WRITE_SYS_CONFIG = 0x31,
UC_CMD_DELETE_SYS_CONFIG = 0x32,
UC_CMD_QUERY_SYS_CONFIG = 0x33,
UC_CMD_LIST_SYS_CONFIG = 0x34,
} UCCommand;
typedef enum UCDataType
{
UC_DATATYPE_UNDEFINED = 0x00,
UC_DATATYPE_UNSIGNED_BYTE = 0x01,
UC_DATATYPE_UNSIGNED_SHORT = 0x02,
UC_DATATYPE_UNSIGNED_INT = 0x03,
UC_DATATYPE_SIGNED_INT = 0x04,
UC_DATATYPE_FLOAT = 0x05,
UC_DATATYPE_STRING = 0x06,
UC_DATATYPE_HEXBINARY = 0x07,
UC_DATATYPE_COMPLEX = 0x08,
UC_DATATYPE_INVALID = 0xFF,
UC_DATATYPE_UNDEFINED = 0x00,
UC_DATATYPE_UNSIGNED_BYTE = 0x01,
UC_DATATYPE_UNSIGNED_SHORT = 0x02,
UC_DATATYPE_UNSIGNED_INT = 0x03,
UC_DATATYPE_SIGNED_INT = 0x04,
UC_DATATYPE_FLOAT = 0x05,
UC_DATATYPE_STRING = 0x06,
UC_DATATYPE_HEXBINARY = 0x07,
UC_DATATYPE_COMPLEX = 0x08,
UC_DATATYPE_INVALID = 0xFF,
} UCDataType;
typedef enum UCErrors
{
UC_ERROR_OK = 0,
UC_ERROR_ERROR = -1,
UC_ERROR_OTHER = -0x200001,
UC_ERROR_SYSTEM = -0x200002,
UC_ERROR_ALLOC = -0x200003,
UC_ERROR_OPCODE = -0x200004,
UC_ERROR_INVALID_PARAM = -0x200005,
UC_ERROR_INVALID_TYPE = -0x200006,
UC_ERROR_UNSUPPORTED = -0x200007,
UC_ERROR_NON_LEAF_NODE = -0x200008,
UC_ERROR_KEY_NOT_FOUND = -0x200009,
UC_ERROR_MODIFY = -0x20000A,
UC_ERROR_STRING_TOO_LONG = -0x20000B,
UC_ERROR_ROOT_KEYS_DIFFER = -0x20000C,
UC_ERROR_INVALID_LOCATION = -0x20000D,
UC_ERROR_BAD_COMMENT = -0x20000E,
UC_ERROR_READ_ACCESS = -0x20000F,
UC_ERROR_WRITE_ACCESS = -0x200010,
UC_ERROR_CREATE_ACCESS = -0x200011,
UC_ERROR_FILE_SYS_NAME = -0x200012,
UC_ERROR_FILE_SYS_INIT = -0x200013,
UC_ERROR_FILE_SYS_MOUNT = -0x200014,
UC_ERROR_FILE_OPEN = -0x200015,
UC_ERROR_FILE_STAT = -0x200016,
UC_ERROR_FILE_READ = -0x200017,
UC_ERROR_FILE_WRITE = -0x200018,
UC_ERROR_FILE_TOO_BIG = -0x200019,
UC_ERROR_FILE_REMOVE = -0x20001A,
UC_ERROR_FILE_RENAME = -0x20001B,
UC_ERROR_FILE_CLOSE = -0x20001C,
UC_ERROR_FILE_SEEK = -0x20001D,
UC_ERROR_FILE_CONFIRM = -0x20001E,
UC_ERROR_FILE_BACKUP = -0x20001F,
UC_ERROR_MALFORMED_XML = -0x200020,
UC_ERROR_VERSION = -0x200021,
UC_ERROR_NO_IPC_BUFFERS = -0x200022,
UC_ERROR_FILE_LOCK_NEEDED = -0x200024,
UC_ERROR_SYS_PROT = -0x200028,
UC_ERROR_OK = 0,
UC_ERROR_ERROR = -1,
UC_ERROR_OTHER = -0x200001,
UC_ERROR_SYSTEM = -0x200002,
UC_ERROR_ALLOC = -0x200003,
UC_ERROR_OPCODE = -0x200004,
UC_ERROR_INVALID_PARAM = -0x200005,
UC_ERROR_INVALID_TYPE = -0x200006,
UC_ERROR_UNSUPPORTED = -0x200007,
UC_ERROR_NON_LEAF_NODE = -0x200008,
UC_ERROR_KEY_NOT_FOUND = -0x200009,
UC_ERROR_MODIFY = -0x20000A,
UC_ERROR_STRING_TOO_LONG = -0x20000B,
UC_ERROR_ROOT_KEYS_DIFFER = -0x20000C,
UC_ERROR_INVALID_LOCATION = -0x20000D,
UC_ERROR_BAD_COMMENT = -0x20000E,
UC_ERROR_READ_ACCESS = -0x20000F,
UC_ERROR_WRITE_ACCESS = -0x200010,
UC_ERROR_CREATE_ACCESS = -0x200011,
UC_ERROR_FILE_SYS_NAME = -0x200012,
UC_ERROR_FILE_SYS_INIT = -0x200013,
UC_ERROR_FILE_SYS_MOUNT = -0x200014,
UC_ERROR_FILE_OPEN = -0x200015,
UC_ERROR_FILE_STAT = -0x200016,
UC_ERROR_FILE_READ = -0x200017,
UC_ERROR_FILE_WRITE = -0x200018,
UC_ERROR_FILE_TOO_BIG = -0x200019,
UC_ERROR_FILE_REMOVE = -0x20001A,
UC_ERROR_FILE_RENAME = -0x20001B,
UC_ERROR_FILE_CLOSE = -0x20001C,
UC_ERROR_FILE_SEEK = -0x20001D,
UC_ERROR_FILE_CONFIRM = -0x20001E,
UC_ERROR_FILE_BACKUP = -0x20001F,
UC_ERROR_MALFORMED_XML = -0x200020,
UC_ERROR_VERSION = -0x200021,
UC_ERROR_NO_IPC_BUFFERS = -0x200022,
UC_ERROR_FILE_LOCK_NEEDED = -0x200024,
UC_ERROR_SYS_PROT = -0x200028,
} UCErrors;
typedef enum UCFileSys
{
UC_FILE_SYS_INVALID = 0x00,
UC_FILE_SYS_SYS = 0x01,
UC_FILE_SYS_SLC = 0x02,
UC_FILE_SYS_RAM = 0x03,
UC_FILE_SYS_INVALID = 0x00,
UC_FILE_SYS_SYS = 0x01,
UC_FILE_SYS_SLC = 0x02,
UC_FILE_SYS_RAM = 0x03,
} UCFileSys;
#pragma pack(push, 1)
@ -118,13 +118,13 @@ typedef void (*UCAsyncCallbackFn)(UCError result,
#pragma pack(push, 1)
struct UCAsyncParams
{
UCAsyncCallbackFn callback;
void *context;
UCCommand command;
uint32_t unk0x0C;
uint32_t count;
UCSysConfig *settings;
IOSVec *vecs;
UCAsyncCallbackFn callback;
void *context;
UCCommand command;
uint32_t unk0x0C;
uint32_t count;
UCSysConfig *settings;
IOSVec *vecs;
};
#pragma pack(pop)
WUT_CHECK_OFFSET(UCAsyncParams, 0x00, callback);

View File

@ -17,30 +17,52 @@ struct FSClient;
namespace Rpl
{
void ErrEulaSetVersion(int version);
bool ErrEulaJump(const char *buffer, uint32_t bufferSize);
void ErrEulaPlayAppearSE(bool playAppearSoundEffect);
bool ErrEulaIsSelectCursorActive();
void ErrEulaChangeLang(nn::erreula::LangType language);
void ErrEulaDisappearHomeNixSign();
bool ErrEulaIsAppearHomeNixSign();
void ErrEulaAppearHomeNixSign(const nn::erreula::HomeNixSignArg &arg);
void ErrEulaSetControllerRemo(nn::erreula::ControllerType controller);
int32_t ErrEulaGetSelectButtonNumError();
int32_t ErrEulaGetResultCode();
nn::erreula::ResultType ErrEulaGetResultType();
nn::erreula::State ErrEulaGetStateErrorViewer();
bool ErrEulaIsDecideSelectRightButtonError();
bool ErrEulaIsDecideSelectLeftButtonError();
bool ErrEulaIsDecideSelectButtonError();
void ErrEulaDisappearError();
void ErrEulaAppearError(const nn::erreula::AppearArg &arg);
void ErrEulaCalc(const nn::erreula::ControllerInfo &controllerInfo);
void ErrEulaDrawDRC();
void ErrEulaDrawTV();
void ErrEulaDestroy();
void ErrEulaCreate(void *workMemory, nn::erreula::RegionType region,
nn::erreula::LangType language, FSClient *fsClient);
void
ErrEulaSetVersion(int version);
bool
ErrEulaJump(const char *buffer, uint32_t bufferSize);
void
ErrEulaPlayAppearSE(bool playAppearSoundEffect);
bool
ErrEulaIsSelectCursorActive();
void
ErrEulaChangeLang(nn::erreula::LangType language);
void
ErrEulaDisappearHomeNixSign();
bool
ErrEulaIsAppearHomeNixSign();
void
ErrEulaAppearHomeNixSign(const nn::erreula::HomeNixSignArg &arg);
void
ErrEulaSetControllerRemo(nn::erreula::ControllerType controller);
int32_t
ErrEulaGetSelectButtonNumError();
int32_t
ErrEulaGetResultCode();
nn::erreula::ResultType
ErrEulaGetResultType();
nn::erreula::State
ErrEulaGetStateErrorViewer();
bool
ErrEulaIsDecideSelectRightButtonError();
bool
ErrEulaIsDecideSelectLeftButtonError();
bool
ErrEulaIsDecideSelectButtonError();
void
ErrEulaDisappearError();
void
ErrEulaAppearError(const nn::erreula::AppearArg &arg);
void
ErrEulaCalc(const nn::erreula::ControllerInfo &controllerInfo);
void
ErrEulaDrawDRC();
void
ErrEulaDrawTV();
void
ErrEulaDestroy();
void
ErrEulaCreate(void *workMemory, nn::erreula::RegionType region, nn::erreula::LangType language, FSClient *fsClient);
} // namespace Rpl

View File

@ -16,27 +16,27 @@ typedef struct GX2DebugCaptureInterface GX2DebugCaptureInterface;
typedef enum GX2DebugCaptureInterfaceVersion
{
GX2_DEBUG_CAPTURE_INTERFACE_VERSION = 1,
GX2_DEBUG_CAPTURE_INTERFACE_VERSION = 1,
} GX2DebugCaptureInterfaceVersion;
//! Options for \link GX2DebugCaptureStart \endlink.
typedef enum GX2DebugCaptureStartFlags
{
//! When set \link GX2DebugCaptureStart \endlink will call \link GX2DrawDone \endlink before the capture is started.
GX2_DEBUG_CAPTURE_START_FLAGS_NONE = 0,
GX2_DEBUG_CAPTURE_START_FLAGS_NONE = 0,
//! When set \link GX2DebugCaptureStart \endlink will NOT call \link GX2DrawDone \endlink.
GX2_DEBUG_CAPTURE_START_FLAGS_DISABLE_GX2DRAWDONE = 1,
GX2_DEBUG_CAPTURE_START_FLAGS_DISABLE_GX2DRAWDONE = 1,
} GX2DebugCaptureStartFlags;
//! Options for \link GX2DebugCaptureEnd \endlink.
typedef enum GX2DebugCaptureEndFlags
{
//! When set \link GX2DebugCaptureEnd \endlink will call \link GX2Flush \endlink before the capture is completed.
GX2_DEBUG_CAPTURE_END_FLAGS_NONE = 0,
GX2_DEBUG_CAPTURE_END_FLAGS_NONE = 0,
//! When set \link GX2DebugCaptureEnd \endlink will NOT call \link GX2Flush \endlink.
GX2_DEBUG_CAPTURE_END_FLAGS_DISABLE_GX2FLUSH = 1,
GX2_DEBUG_CAPTURE_END_FLAGS_DISABLE_GX2FLUSH = 1,
} GX2DebugCaptureEndFlags;
struct GX2DebugCaptureInterface
@ -140,7 +140,7 @@ GX2DebugCaptureEnd(GX2DebugCaptureEndFlags flags);
* Equivalent to calling GX2DebugCaptureFrames(filename, 1)
*/
void
GX2DebugCaptureFrame(const char* filename);
GX2DebugCaptureFrame(const char *filename);
/**
@ -152,7 +152,7 @@ GX2DebugCaptureFrame(const char* filename);
* Capture begins and ends during GX2SwapScanBuffers.
*/
void
GX2DebugCaptureFrames(const char* filename,
GX2DebugCaptureFrames(const char *filename,
uint32_t count);
#ifdef __cplusplus

View File

@ -11,188 +11,188 @@
extern "C" {
#endif
#define GX2_FALSE (0)
#define GX2_TRUE (1)
#define GX2_DISABLE (0)
#define GX2_ENABLE (1)
#define GX2_FALSE (0)
#define GX2_TRUE (1)
#define GX2_DISABLE (0)
#define GX2_ENABLE (1)
#define GX2_COMMAND_BUFFER_ALIGNMENT (0x40)
#define GX2_CONTEXT_STATE_ALIGNMENT (0x100)
#define GX2_SCAN_BUFFER_ALIGNMENT (0x1000)
#define GX2_SHADER_PROGRAM_ALIGNMENT (0x100)
#define GX2_VERTEX_BUFFER_ALIGNMENT (0x40)
#define GX2_INDEX_BUFFER_ALIGNMENT (0x20)
#define GX2_UNIFORM_BLOCK_ALIGNMENT (0x100)
#define GX2_COMMAND_BUFFER_ALIGNMENT (0x40)
#define GX2_CONTEXT_STATE_ALIGNMENT (0x100)
#define GX2_SCAN_BUFFER_ALIGNMENT (0x1000)
#define GX2_SHADER_PROGRAM_ALIGNMENT (0x100)
#define GX2_VERTEX_BUFFER_ALIGNMENT (0x40)
#define GX2_INDEX_BUFFER_ALIGNMENT (0x20)
#define GX2_UNIFORM_BLOCK_ALIGNMENT (0x100)
#define GX2_COMMAND_BUFFER_SIZE (0x400000)
#define GX2_COMMAND_BUFFER_SIZE (0x400000)
typedef enum GX2AAMode
{
GX2_AA_MODE1X = 0,
GX2_AA_MODE2X = 1,
GX2_AA_MODE4X = 2,
GX2_AA_MODE8X = 3,
GX2_AA_MODE1X = 0,
GX2_AA_MODE2X = 1,
GX2_AA_MODE4X = 2,
GX2_AA_MODE8X = 3,
} GX2AAMode;
typedef enum GX2AlphaToMaskMode
{
GX2_ALPHA_TO_MASK_MODE_NON_DITHERED = 0,
GX2_ALPHA_TO_MASK_MODE_DITHER_0 = 1,
GX2_ALPHA_TO_MASK_MODE_DITHER_90 = 2,
GX2_ALPHA_TO_MASK_MODE_DITHER_180 = 3,
GX2_ALPHA_TO_MASK_MODE_DITHER_270 = 4,
GX2_ALPHA_TO_MASK_MODE_NON_DITHERED = 0,
GX2_ALPHA_TO_MASK_MODE_DITHER_0 = 1,
GX2_ALPHA_TO_MASK_MODE_DITHER_90 = 2,
GX2_ALPHA_TO_MASK_MODE_DITHER_180 = 3,
GX2_ALPHA_TO_MASK_MODE_DITHER_270 = 4,
} GX2AlphaToMaskMode;
typedef enum GX2AspectRatio
{
GX2_ASPECT_RATIO_4_3 = 0,
GX2_ASPECT_RATIO_16_9 = 1,
GX2_ASPECT_RATIO_4_3 = 0,
GX2_ASPECT_RATIO_16_9 = 1,
} GX2AspectRatio;
typedef enum GX2AttribFormat
{
GX2_ATTRIB_TYPE_8 = 0x00,
GX2_ATTRIB_TYPE_4_4 = 0x01,
GX2_ATTRIB_TYPE_16 = 0x02,
GX2_ATTRIB_TYPE_16_FLOAT = 0x03,
GX2_ATTRIB_TYPE_8_8 = 0x04,
GX2_ATTRIB_TYPE_32 = 0x05,
GX2_ATTRIB_TYPE_32_FLOAT = 0x06,
GX2_ATTRIB_TYPE_16_16 = 0x07,
GX2_ATTRIB_TYPE_16_16_FLOAT = 0x08,
GX2_ATTRIB_TYPE_10_11_11_FLOAT = 0x09,
GX2_ATTRIB_TYPE_8_8_8_8 = 0x0A,
GX2_ATTRIB_TYPE_10_10_10_2 = 0x0B,
GX2_ATTRIB_TYPE_32_32 = 0x0C,
GX2_ATTRIB_TYPE_32_32_FLOAT = 0x0D,
GX2_ATTRIB_TYPE_16_16_16_16 = 0x0E,
GX2_ATTRIB_TYPE_16_16_16_16_FLOAT = 0x0F,
GX2_ATTRIB_TYPE_32_32_32 = 0x10,
GX2_ATTRIB_TYPE_32_32_32_FLOAT = 0x11,
GX2_ATTRIB_TYPE_32_32_32_32 = 0x12,
GX2_ATTRIB_TYPE_32_32_32_32_FLOAT = 0x13,
GX2_ATTRIB_TYPE_8 = 0x00,
GX2_ATTRIB_TYPE_4_4 = 0x01,
GX2_ATTRIB_TYPE_16 = 0x02,
GX2_ATTRIB_TYPE_16_FLOAT = 0x03,
GX2_ATTRIB_TYPE_8_8 = 0x04,
GX2_ATTRIB_TYPE_32 = 0x05,
GX2_ATTRIB_TYPE_32_FLOAT = 0x06,
GX2_ATTRIB_TYPE_16_16 = 0x07,
GX2_ATTRIB_TYPE_16_16_FLOAT = 0x08,
GX2_ATTRIB_TYPE_10_11_11_FLOAT = 0x09,
GX2_ATTRIB_TYPE_8_8_8_8 = 0x0A,
GX2_ATTRIB_TYPE_10_10_10_2 = 0x0B,
GX2_ATTRIB_TYPE_32_32 = 0x0C,
GX2_ATTRIB_TYPE_32_32_FLOAT = 0x0D,
GX2_ATTRIB_TYPE_16_16_16_16 = 0x0E,
GX2_ATTRIB_TYPE_16_16_16_16_FLOAT = 0x0F,
GX2_ATTRIB_TYPE_32_32_32 = 0x10,
GX2_ATTRIB_TYPE_32_32_32_FLOAT = 0x11,
GX2_ATTRIB_TYPE_32_32_32_32 = 0x12,
GX2_ATTRIB_TYPE_32_32_32_32_FLOAT = 0x13,
GX2_ATTRIB_FLAG_INTEGER = 0x100,
GX2_ATTRIB_FLAG_SIGNED = 0x200,
GX2_ATTRIB_FLAG_DEGAMMA = 0x400,
GX2_ATTRIB_FLAG_SCALED = 0x800,
GX2_ATTRIB_FLAG_INTEGER = 0x100,
GX2_ATTRIB_FLAG_SIGNED = 0x200,
GX2_ATTRIB_FLAG_DEGAMMA = 0x400,
GX2_ATTRIB_FLAG_SCALED = 0x800,
GX2_ATTRIB_FORMAT_UNORM_8 = GX2_ATTRIB_TYPE_8,
GX2_ATTRIB_FORMAT_UNORM_8_8 = GX2_ATTRIB_TYPE_8_8,
GX2_ATTRIB_FORMAT_UNORM_8_8_8_8 = GX2_ATTRIB_TYPE_8_8_8_8,
GX2_ATTRIB_FORMAT_UNORM_8 = GX2_ATTRIB_TYPE_8,
GX2_ATTRIB_FORMAT_UNORM_8_8 = GX2_ATTRIB_TYPE_8_8,
GX2_ATTRIB_FORMAT_UNORM_8_8_8_8 = GX2_ATTRIB_TYPE_8_8_8_8,
GX2_ATTRIB_FORMAT_UINT_8 = GX2_ATTRIB_FLAG_INTEGER | GX2_ATTRIB_TYPE_8,
GX2_ATTRIB_FORMAT_UINT_8_8 = GX2_ATTRIB_FLAG_INTEGER | GX2_ATTRIB_TYPE_8_8,
GX2_ATTRIB_FORMAT_UINT_8_8_8_8 = GX2_ATTRIB_FLAG_INTEGER | GX2_ATTRIB_TYPE_8_8_8_8,
GX2_ATTRIB_FORMAT_UINT_8 = GX2_ATTRIB_FLAG_INTEGER | GX2_ATTRIB_TYPE_8,
GX2_ATTRIB_FORMAT_UINT_8_8 = GX2_ATTRIB_FLAG_INTEGER | GX2_ATTRIB_TYPE_8_8,
GX2_ATTRIB_FORMAT_UINT_8_8_8_8 = GX2_ATTRIB_FLAG_INTEGER | GX2_ATTRIB_TYPE_8_8_8_8,
GX2_ATTRIB_FORMAT_SNORM_8 = GX2_ATTRIB_FLAG_SIGNED | GX2_ATTRIB_TYPE_8,
GX2_ATTRIB_FORMAT_SNORM_8_8 = GX2_ATTRIB_FLAG_SIGNED | GX2_ATTRIB_TYPE_8_8,
GX2_ATTRIB_FORMAT_SNORM_8_8_8_8 = GX2_ATTRIB_FLAG_SIGNED | GX2_ATTRIB_TYPE_8_8_8_8,
GX2_ATTRIB_FORMAT_SNORM_8 = GX2_ATTRIB_FLAG_SIGNED | GX2_ATTRIB_TYPE_8,
GX2_ATTRIB_FORMAT_SNORM_8_8 = GX2_ATTRIB_FLAG_SIGNED | GX2_ATTRIB_TYPE_8_8,
GX2_ATTRIB_FORMAT_SNORM_8_8_8_8 = GX2_ATTRIB_FLAG_SIGNED | GX2_ATTRIB_TYPE_8_8_8_8,
GX2_ATTRIB_FORMAT_SINT_8 = GX2_ATTRIB_FLAG_SIGNED | GX2_ATTRIB_FLAG_INTEGER | GX2_ATTRIB_TYPE_8,
GX2_ATTRIB_FORMAT_SINT_8_8 = GX2_ATTRIB_FLAG_SIGNED | GX2_ATTRIB_FLAG_INTEGER | GX2_ATTRIB_TYPE_8_8,
GX2_ATTRIB_FORMAT_SINT_8_8_8_8 = GX2_ATTRIB_FLAG_SIGNED | GX2_ATTRIB_FLAG_INTEGER | GX2_ATTRIB_TYPE_8_8_8_8,
GX2_ATTRIB_FORMAT_SINT_8 = GX2_ATTRIB_FLAG_SIGNED | GX2_ATTRIB_FLAG_INTEGER | GX2_ATTRIB_TYPE_8,
GX2_ATTRIB_FORMAT_SINT_8_8 = GX2_ATTRIB_FLAG_SIGNED | GX2_ATTRIB_FLAG_INTEGER | GX2_ATTRIB_TYPE_8_8,
GX2_ATTRIB_FORMAT_SINT_8_8_8_8 = GX2_ATTRIB_FLAG_SIGNED | GX2_ATTRIB_FLAG_INTEGER | GX2_ATTRIB_TYPE_8_8_8_8,
GX2_ATTRIB_FORMAT_FLOAT_32 = GX2_ATTRIB_FLAG_SCALED | GX2_ATTRIB_TYPE_32_FLOAT,
GX2_ATTRIB_FORMAT_FLOAT_32_32 = GX2_ATTRIB_FLAG_SCALED | GX2_ATTRIB_TYPE_32_32_FLOAT,
GX2_ATTRIB_FORMAT_FLOAT_32_32_32 = GX2_ATTRIB_FLAG_SCALED | GX2_ATTRIB_TYPE_32_32_32_FLOAT,
GX2_ATTRIB_FORMAT_FLOAT_32_32_32_32 = GX2_ATTRIB_FLAG_SCALED | GX2_ATTRIB_TYPE_32_32_32_32_FLOAT,
GX2_ATTRIB_FORMAT_FLOAT_32 = GX2_ATTRIB_FLAG_SCALED | GX2_ATTRIB_TYPE_32_FLOAT,
GX2_ATTRIB_FORMAT_FLOAT_32_32 = GX2_ATTRIB_FLAG_SCALED | GX2_ATTRIB_TYPE_32_32_FLOAT,
GX2_ATTRIB_FORMAT_FLOAT_32_32_32 = GX2_ATTRIB_FLAG_SCALED | GX2_ATTRIB_TYPE_32_32_32_FLOAT,
GX2_ATTRIB_FORMAT_FLOAT_32_32_32_32 = GX2_ATTRIB_FLAG_SCALED | GX2_ATTRIB_TYPE_32_32_32_32_FLOAT,
} GX2AttribFormat;
WUT_ENUM_BITMASK_TYPE(GX2AttribFormat)
typedef enum GX2AttribIndexType
{
GX2_ATTRIB_INDEX_PER_VERTEX = 0,
GX2_ATTRIB_INDEX_PER_INSTANCE = 1,
GX2_ATTRIB_INDEX_PER_VERTEX = 0,
GX2_ATTRIB_INDEX_PER_INSTANCE = 1,
} GX2AttribIndexType;
typedef enum GX2BlendMode
{
GX2_BLEND_MODE_ZERO = 0,
GX2_BLEND_MODE_ONE = 1,
GX2_BLEND_MODE_SRC_COLOR = 2,
GX2_BLEND_MODE_INV_SRC_COLOR = 3,
GX2_BLEND_MODE_SRC_ALPHA = 4,
GX2_BLEND_MODE_INV_SRC_ALPHA = 5,
GX2_BLEND_MODE_DST_ALPHA = 6,
GX2_BLEND_MODE_INV_DST_ALPHA = 7,
GX2_BLEND_MODE_DST_COLOR = 8,
GX2_BLEND_MODE_INV_DST_COLOR = 9,
GX2_BLEND_MODE_SRC_ALPHA_SAT = 10,
GX2_BLEND_MODE_BOTH_SRC_ALPHA = 11,
GX2_BLEND_MODE_BOTH_INV_SRC_ALPHA = 12,
GX2_BLEND_MODE_BLEND_FACTOR = 13,
GX2_BLEND_MODE_INV_BLEND_FACTOR = 14,
GX2_BLEND_MODE_SRC1_COLOR = 15,
GX2_BLEND_MODE_INV_SRC1_COLOR = 16,
GX2_BLEND_MODE_SRC1_ALPHA = 17,
GX2_BLEND_MODE_INV_SRC1_ALPHA = 18,
GX2_BLEND_MODE_CONSTANT_ALPHA = 19,
GX2_BLEND_MODE_INV_CONSTANT_ALPHA = 20,
GX2_BLEND_MODE_ZERO = 0,
GX2_BLEND_MODE_ONE = 1,
GX2_BLEND_MODE_SRC_COLOR = 2,
GX2_BLEND_MODE_INV_SRC_COLOR = 3,
GX2_BLEND_MODE_SRC_ALPHA = 4,
GX2_BLEND_MODE_INV_SRC_ALPHA = 5,
GX2_BLEND_MODE_DST_ALPHA = 6,
GX2_BLEND_MODE_INV_DST_ALPHA = 7,
GX2_BLEND_MODE_DST_COLOR = 8,
GX2_BLEND_MODE_INV_DST_COLOR = 9,
GX2_BLEND_MODE_SRC_ALPHA_SAT = 10,
GX2_BLEND_MODE_BOTH_SRC_ALPHA = 11,
GX2_BLEND_MODE_BOTH_INV_SRC_ALPHA = 12,
GX2_BLEND_MODE_BLEND_FACTOR = 13,
GX2_BLEND_MODE_INV_BLEND_FACTOR = 14,
GX2_BLEND_MODE_SRC1_COLOR = 15,
GX2_BLEND_MODE_INV_SRC1_COLOR = 16,
GX2_BLEND_MODE_SRC1_ALPHA = 17,
GX2_BLEND_MODE_INV_SRC1_ALPHA = 18,
GX2_BLEND_MODE_CONSTANT_ALPHA = 19,
GX2_BLEND_MODE_INV_CONSTANT_ALPHA = 20,
} GX2BlendMode;
typedef enum GX2BlendCombineMode
{
GX2_BLEND_COMBINE_MODE_ADD = 0,
GX2_BLEND_COMBINE_MODE_SUB = 1,
GX2_BLEND_COMBINE_MODE_MIN = 2,
GX2_BLEND_COMBINE_MODE_MAX = 3,
GX2_BLEND_COMBINE_MODE_REV_SUB = 4,
GX2_BLEND_COMBINE_MODE_ADD = 0,
GX2_BLEND_COMBINE_MODE_SUB = 1,
GX2_BLEND_COMBINE_MODE_MIN = 2,
GX2_BLEND_COMBINE_MODE_MAX = 3,
GX2_BLEND_COMBINE_MODE_REV_SUB = 4,
} GX2BlendCombineMode;
typedef enum GX2BufferingMode
{
GX2_BUFFERING_MODE_SINGLE = 1,
GX2_BUFFERING_MODE_DOUBLE = 2,
GX2_BUFFERING_MODE_TRIPLE = 3,
GX2_BUFFERING_MODE_SINGLE = 1,
GX2_BUFFERING_MODE_DOUBLE = 2,
GX2_BUFFERING_MODE_TRIPLE = 3,
} GX2BufferingMode;
typedef enum GX2ChannelMask
{
GX2_CHANNEL_MASK_R = 1,
GX2_CHANNEL_MASK_G = 2,
GX2_CHANNEL_MASK_RG = 3,
GX2_CHANNEL_MASK_B = 4,
GX2_CHANNEL_MASK_RB = 5,
GX2_CHANNEL_MASK_GB = 6,
GX2_CHANNEL_MASK_RGB = 7,
GX2_CHANNEL_MASK_A = 8,
GX2_CHANNEL_MASK_RA = 9,
GX2_CHANNEL_MASK_GA = 10,
GX2_CHANNEL_MASK_RGA = 11,
GX2_CHANNEL_MASK_BA = 12,
GX2_CHANNEL_MASK_RBA = 13,
GX2_CHANNEL_MASK_GBA = 14,
GX2_CHANNEL_MASK_RGBA = 15,
GX2_CHANNEL_MASK_R = 1,
GX2_CHANNEL_MASK_G = 2,
GX2_CHANNEL_MASK_RG = 3,
GX2_CHANNEL_MASK_B = 4,
GX2_CHANNEL_MASK_RB = 5,
GX2_CHANNEL_MASK_GB = 6,
GX2_CHANNEL_MASK_RGB = 7,
GX2_CHANNEL_MASK_A = 8,
GX2_CHANNEL_MASK_RA = 9,
GX2_CHANNEL_MASK_GA = 10,
GX2_CHANNEL_MASK_RGA = 11,
GX2_CHANNEL_MASK_BA = 12,
GX2_CHANNEL_MASK_RBA = 13,
GX2_CHANNEL_MASK_GBA = 14,
GX2_CHANNEL_MASK_RGBA = 15,
} GX2ChannelMask;
typedef enum GX2ClearFlags
{
GX2_CLEAR_FLAGS_DEPTH = 1,
GX2_CLEAR_FLAGS_STENCIL = 2,
GX2_CLEAR_FLAGS_BOTH = (GX2_CLEAR_FLAGS_DEPTH | GX2_CLEAR_FLAGS_STENCIL),
GX2_CLEAR_FLAGS_DEPTH = 1,
GX2_CLEAR_FLAGS_STENCIL = 2,
GX2_CLEAR_FLAGS_BOTH = (GX2_CLEAR_FLAGS_DEPTH | GX2_CLEAR_FLAGS_STENCIL),
} GX2ClearFlags;
WUT_ENUM_BITMASK_TYPE(GX2ClearFlags)
typedef enum GX2CompareFunction
{
GX2_COMPARE_FUNC_NEVER = 0,
GX2_COMPARE_FUNC_LESS = 1,
GX2_COMPARE_FUNC_EQUAL = 2,
GX2_COMPARE_FUNC_LEQUAL = 3,
GX2_COMPARE_FUNC_GREATER = 4,
GX2_COMPARE_FUNC_NOT_EQUAL = 5,
GX2_COMPARE_FUNC_GEQUAL = 6,
GX2_COMPARE_FUNC_ALWAYS = 7,
GX2_COMPARE_FUNC_NEVER = 0,
GX2_COMPARE_FUNC_LESS = 1,
GX2_COMPARE_FUNC_EQUAL = 2,
GX2_COMPARE_FUNC_LEQUAL = 3,
GX2_COMPARE_FUNC_GREATER = 4,
GX2_COMPARE_FUNC_NOT_EQUAL = 5,
GX2_COMPARE_FUNC_GEQUAL = 6,
GX2_COMPARE_FUNC_ALWAYS = 7,
} GX2CompareFunction;
typedef enum GX2DrcRenderMode
{
GX2_DRC_RENDER_MODE_DISABLED = 0,
GX2_DRC_RENDER_MODE_SINGLE = 1,
GX2_DRC_RENDER_MODE_DOUBLE = 2,
GX2_DRC_RENDER_MODE_DISABLED = 0,
GX2_DRC_RENDER_MODE_SINGLE = 1,
GX2_DRC_RENDER_MODE_DOUBLE = 2,
} GX2DrcRenderMode;
typedef enum GX2EventType
@ -206,10 +206,10 @@ typedef enum GX2EventType
typedef enum GX2EndianSwapMode
{
GX2_ENDIAN_SWAP_NONE = 0,
GX2_ENDIAN_SWAP_8_IN_16 = 1,
GX2_ENDIAN_SWAP_8_IN_32 = 2,
GX2_ENDIAN_SWAP_DEFAULT = 3,
GX2_ENDIAN_SWAP_NONE = 0,
GX2_ENDIAN_SWAP_8_IN_16 = 1,
GX2_ENDIAN_SWAP_8_IN_32 = 2,
GX2_ENDIAN_SWAP_DEFAULT = 3,
} GX2EndianSwapMode;
typedef enum GX2FetchShaderType
@ -222,401 +222,401 @@ typedef enum GX2FetchShaderType
typedef enum GX2FrontFace
{
GX2_FRONT_FACE_CCW = 0,
GX2_FRONT_FACE_CW = 1,
GX2_FRONT_FACE_CCW = 0,
GX2_FRONT_FACE_CW = 1,
} GX2FrontFace;
typedef enum GX2IndexType
{
GX2_INDEX_TYPE_U16_LE = 0,
GX2_INDEX_TYPE_U32_LE = 1,
GX2_INDEX_TYPE_U16 = 4,
GX2_INDEX_TYPE_U32 = 9,
GX2_INDEX_TYPE_U16_LE = 0,
GX2_INDEX_TYPE_U32_LE = 1,
GX2_INDEX_TYPE_U16 = 4,
GX2_INDEX_TYPE_U32 = 9,
} GX2IndexType;
typedef enum GX2InvalidateMode
{
GX2_INVALIDATE_MODE_NONE = 0,
GX2_INVALIDATE_MODE_ATTRIBUTE_BUFFER = 1 << 0,
GX2_INVALIDATE_MODE_TEXTURE = 1 << 1,
GX2_INVALIDATE_MODE_UNIFORM_BLOCK = 1 << 2,
GX2_INVALIDATE_MODE_SHADER = 1 << 3,
GX2_INVALIDATE_MODE_COLOR_BUFFER = 1 << 4,
GX2_INVALIDATE_MODE_DEPTH_BUFFER = 1 << 5,
GX2_INVALIDATE_MODE_CPU = 1 << 6,
GX2_INVALIDATE_MODE_STREAM_OUT_BUFFER = 1 << 7,
GX2_INVALIDATE_MODE_EXPORT_BUFFER = 1 << 8,
GX2_INVALIDATE_MODE_CPU_ATTRIBUTE_BUFFER= GX2_INVALIDATE_MODE_CPU | GX2_INVALIDATE_MODE_ATTRIBUTE_BUFFER,
GX2_INVALIDATE_MODE_CPU_TEXTURE = GX2_INVALIDATE_MODE_CPU | GX2_INVALIDATE_MODE_TEXTURE,
GX2_INVALIDATE_MODE_CPU_SHADER = GX2_INVALIDATE_MODE_CPU | GX2_INVALIDATE_MODE_SHADER,
GX2_INVALIDATE_MODE_NONE = 0,
GX2_INVALIDATE_MODE_ATTRIBUTE_BUFFER = 1 << 0,
GX2_INVALIDATE_MODE_TEXTURE = 1 << 1,
GX2_INVALIDATE_MODE_UNIFORM_BLOCK = 1 << 2,
GX2_INVALIDATE_MODE_SHADER = 1 << 3,
GX2_INVALIDATE_MODE_COLOR_BUFFER = 1 << 4,
GX2_INVALIDATE_MODE_DEPTH_BUFFER = 1 << 5,
GX2_INVALIDATE_MODE_CPU = 1 << 6,
GX2_INVALIDATE_MODE_STREAM_OUT_BUFFER = 1 << 7,
GX2_INVALIDATE_MODE_EXPORT_BUFFER = 1 << 8,
GX2_INVALIDATE_MODE_CPU_ATTRIBUTE_BUFFER = GX2_INVALIDATE_MODE_CPU | GX2_INVALIDATE_MODE_ATTRIBUTE_BUFFER,
GX2_INVALIDATE_MODE_CPU_TEXTURE = GX2_INVALIDATE_MODE_CPU | GX2_INVALIDATE_MODE_TEXTURE,
GX2_INVALIDATE_MODE_CPU_SHADER = GX2_INVALIDATE_MODE_CPU | GX2_INVALIDATE_MODE_SHADER,
} GX2InvalidateMode;
WUT_ENUM_BITMASK_TYPE(GX2InvalidateMode)
typedef enum GX2InitAttributes
{
GX2_INIT_END = 0,
GX2_INIT_CMD_BUF_BASE = 1,
GX2_INIT_CMD_BUF_POOL_SIZE = 2,
GX2_INIT_ARGC = 7,
GX2_INIT_ARGV = 8,
GX2_INIT_PROFILE_MODE = 9,
GX2_INIT_TOSS_STAGE = 10,
GX2_INIT_APP_IO_THREAD_STACK_SIZE = 11,
GX2_INIT_END = 0,
GX2_INIT_CMD_BUF_BASE = 1,
GX2_INIT_CMD_BUF_POOL_SIZE = 2,
GX2_INIT_ARGC = 7,
GX2_INIT_ARGV = 8,
GX2_INIT_PROFILE_MODE = 9,
GX2_INIT_TOSS_STAGE = 10,
GX2_INIT_APP_IO_THREAD_STACK_SIZE = 11,
} GX2InitAttributes;
typedef enum GX2LogicOp
{
GX2_LOGIC_OP_CLEAR = 0x00,
GX2_LOGIC_OP_NOR = 0x11,
GX2_LOGIC_OP_INV_AND = 0x22,
GX2_LOGIC_OP_INV_COPY = 0x33,
GX2_LOGIC_OP_REV_AND = 0x44,
GX2_LOGIC_OP_INV = 0x55,
GX2_LOGIC_OP_XOR = 0x66,
GX2_LOGIC_OP_NOT_AND = 0x77,
GX2_LOGIC_OP_AND = 0x88,
GX2_LOGIC_OP_EQUIV = 0x99,
GX2_LOGIC_OP_NOP = 0xAA,
GX2_LOGIC_OP_INV_OR = 0xBB,
GX2_LOGIC_OP_COPY = 0xCC,
GX2_LOGIC_OP_REV_OR = 0xDD,
GX2_LOGIC_OP_OR = 0xEE,
GX2_LOGIC_OP_SET = 0xFF,
GX2_LOGIC_OP_CLEAR = 0x00,
GX2_LOGIC_OP_NOR = 0x11,
GX2_LOGIC_OP_INV_AND = 0x22,
GX2_LOGIC_OP_INV_COPY = 0x33,
GX2_LOGIC_OP_REV_AND = 0x44,
GX2_LOGIC_OP_INV = 0x55,
GX2_LOGIC_OP_XOR = 0x66,
GX2_LOGIC_OP_NOT_AND = 0x77,
GX2_LOGIC_OP_AND = 0x88,
GX2_LOGIC_OP_EQUIV = 0x99,
GX2_LOGIC_OP_NOP = 0xAA,
GX2_LOGIC_OP_INV_OR = 0xBB,
GX2_LOGIC_OP_COPY = 0xCC,
GX2_LOGIC_OP_REV_OR = 0xDD,
GX2_LOGIC_OP_OR = 0xEE,
GX2_LOGIC_OP_SET = 0xFF,
} GX2LogicOp;
typedef enum GX2PrimitiveMode
{
GX2_PRIMITIVE_MODE_POINTS = 1,
GX2_PRIMITIVE_MODE_LINES = 2,
GX2_PRIMITIVE_MODE_LINE_STRIP = 3,
GX2_PRIMITIVE_MODE_TRIANGLES = 4,
GX2_PRIMITIVE_MODE_TRIANGLE_FAN = 5,
GX2_PRIMITIVE_MODE_TRIANGLE_STRIP = 6,
GX2_PRIMITIVE_MODE_LINES_ADJACENCY = 10,
GX2_PRIMITIVE_MODE_LINE_STRIP_ADJACENCY = 11,
GX2_PRIMITIVE_MODE_TRIANGLES_ADJACENCY = 12,
GX2_PRIMITIVE_MODE_TRIANGLE_STRIP_ADJACENCY = 13,
GX2_PRIMITIVE_MODE_RECTS = 17,
GX2_PRIMITIVE_MODE_LINE_LOOP = 18,
GX2_PRIMITIVE_MODE_QUADS = 19,
GX2_PRIMITIVE_MODE_QUAD_STRIP = 20,
GX2_PRIMITIVE_MODE_POINTS = 1,
GX2_PRIMITIVE_MODE_LINES = 2,
GX2_PRIMITIVE_MODE_LINE_STRIP = 3,
GX2_PRIMITIVE_MODE_TRIANGLES = 4,
GX2_PRIMITIVE_MODE_TRIANGLE_FAN = 5,
GX2_PRIMITIVE_MODE_TRIANGLE_STRIP = 6,
GX2_PRIMITIVE_MODE_LINES_ADJACENCY = 10,
GX2_PRIMITIVE_MODE_LINE_STRIP_ADJACENCY = 11,
GX2_PRIMITIVE_MODE_TRIANGLES_ADJACENCY = 12,
GX2_PRIMITIVE_MODE_TRIANGLE_STRIP_ADJACENCY = 13,
GX2_PRIMITIVE_MODE_RECTS = 17,
GX2_PRIMITIVE_MODE_LINE_LOOP = 18,
GX2_PRIMITIVE_MODE_QUADS = 19,
GX2_PRIMITIVE_MODE_QUAD_STRIP = 20,
} GX2PrimitiveMode;
typedef enum GX2PolygonMode
{
GX2_POLYGON_MODE_POINT = 0,
GX2_POLYGON_MODE_LINE = 1,
GX2_POLYGON_MODE_TRIANGLE = 2,
GX2_POLYGON_MODE_POINT = 0,
GX2_POLYGON_MODE_LINE = 1,
GX2_POLYGON_MODE_TRIANGLE = 2,
} GX2PolygonMode;
typedef enum GX2RenderTarget
{
GX2_RENDER_TARGET_0 = 0,
GX2_RENDER_TARGET_1 = 1,
GX2_RENDER_TARGET_2 = 2,
GX2_RENDER_TARGET_3 = 3,
GX2_RENDER_TARGET_4 = 4,
GX2_RENDER_TARGET_5 = 5,
GX2_RENDER_TARGET_6 = 6,
GX2_RENDER_TARGET_7 = 7,
GX2_RENDER_TARGET_0 = 0,
GX2_RENDER_TARGET_1 = 1,
GX2_RENDER_TARGET_2 = 2,
GX2_RENDER_TARGET_3 = 3,
GX2_RENDER_TARGET_4 = 4,
GX2_RENDER_TARGET_5 = 5,
GX2_RENDER_TARGET_6 = 6,
GX2_RENDER_TARGET_7 = 7,
} GX2RenderTarget;
typedef enum GX2RoundingMode
{
GX2_ROUNDING_MODE_ROUND_TO_EVEN = 0,
GX2_ROUNDING_MODE_TRUNCATE = 1,
GX2_ROUNDING_MODE_ROUND_TO_EVEN = 0,
GX2_ROUNDING_MODE_TRUNCATE = 1,
} GX2RoundingMode;
typedef enum GX2SamplerVarType
{
GX2_SAMPLER_VAR_TYPE_SAMPLER_1D = 0,
GX2_SAMPLER_VAR_TYPE_SAMPLER_2D = 1,
GX2_SAMPLER_VAR_TYPE_SAMPLER_3D = 3,
GX2_SAMPLER_VAR_TYPE_SAMPLER_CUBE = 4,
GX2_SAMPLER_VAR_TYPE_SAMPLER_1D = 0,
GX2_SAMPLER_VAR_TYPE_SAMPLER_2D = 1,
GX2_SAMPLER_VAR_TYPE_SAMPLER_3D = 3,
GX2_SAMPLER_VAR_TYPE_SAMPLER_CUBE = 4,
} GX2SamplerVarType;
typedef enum GX2ScanTarget
{
GX2_SCAN_TARGET_TV0 = 1 << 0,
GX2_SCAN_TARGET_TV1 = 1 << 1,
GX2_SCAN_TARGET_DRC0 = 1 << 2,
GX2_SCAN_TARGET_DRC1 = 1 << 3,
GX2_SCAN_TARGET_TV = GX2_SCAN_TARGET_TV0,
GX2_SCAN_TARGET_DRC = GX2_SCAN_TARGET_DRC0,
GX2_SCAN_TARGET_TV0 = 1 << 0,
GX2_SCAN_TARGET_TV1 = 1 << 1,
GX2_SCAN_TARGET_DRC0 = 1 << 2,
GX2_SCAN_TARGET_DRC1 = 1 << 3,
GX2_SCAN_TARGET_TV = GX2_SCAN_TARGET_TV0,
GX2_SCAN_TARGET_DRC = GX2_SCAN_TARGET_DRC0,
} GX2ScanTarget;
WUT_ENUM_BITMASK_TYPE(GX2ScanTarget)
typedef enum GX2ShaderMode
{
GX2_SHADER_MODE_UNIFORM_REGISTER = 0,
GX2_SHADER_MODE_UNIFORM_BLOCK = 1,
GX2_SHADER_MODE_GEOMETRY_SHADER = 2,
GX2_SHADER_MODE_COMPUTE_SHADER = 3,
GX2_SHADER_MODE_UNIFORM_REGISTER = 0,
GX2_SHADER_MODE_UNIFORM_BLOCK = 1,
GX2_SHADER_MODE_GEOMETRY_SHADER = 2,
GX2_SHADER_MODE_COMPUTE_SHADER = 3,
} GX2ShaderMode;
typedef enum GX2ShaderVarType
{
GX2_SHADER_VAR_TYPE_VOID = 0,
GX2_SHADER_VAR_TYPE_BOOL = 1,
GX2_SHADER_VAR_TYPE_INT = 2,
GX2_SHADER_VAR_TYPE_UINT = 3,
GX2_SHADER_VAR_TYPE_FLOAT = 4,
GX2_SHADER_VAR_TYPE_DOUBLE = 5,
GX2_SHADER_VAR_TYPE_DOUBLE2 = 6,
GX2_SHADER_VAR_TYPE_DOUBLE3 = 7,
GX2_SHADER_VAR_TYPE_DOUBLE4 = 8,
GX2_SHADER_VAR_TYPE_FLOAT2 = 9,
GX2_SHADER_VAR_TYPE_FLOAT3 = 10,
GX2_SHADER_VAR_TYPE_FLOAT4 = 11,
GX2_SHADER_VAR_TYPE_BOOL2 = 12,
GX2_SHADER_VAR_TYPE_BOOL3 = 13,
GX2_SHADER_VAR_TYPE_BOOL4 = 14,
GX2_SHADER_VAR_TYPE_INT2 = 15,
GX2_SHADER_VAR_TYPE_INT3 = 16,
GX2_SHADER_VAR_TYPE_INT4 = 17,
GX2_SHADER_VAR_TYPE_UINT2 = 18,
GX2_SHADER_VAR_TYPE_UINT3 = 19,
GX2_SHADER_VAR_TYPE_UINT4 = 20,
GX2_SHADER_VAR_TYPE_FLOAT2X2 = 21,
GX2_SHADER_VAR_TYPE_FLOAT2X3 = 22,
GX2_SHADER_VAR_TYPE_FLOAT2X4 = 23,
GX2_SHADER_VAR_TYPE_FLOAT3X2 = 24,
GX2_SHADER_VAR_TYPE_FLOAT3X3 = 25,
GX2_SHADER_VAR_TYPE_FLOAT3X4 = 26,
GX2_SHADER_VAR_TYPE_FLOAT4X2 = 27,
GX2_SHADER_VAR_TYPE_FLOAT4X3 = 28,
GX2_SHADER_VAR_TYPE_FLOAT4X4 = 29,
GX2_SHADER_VAR_TYPE_DOUBLE2X2 = 30,
GX2_SHADER_VAR_TYPE_DOUBLE2X3 = 31,
GX2_SHADER_VAR_TYPE_DOUBLE2X4 = 32,
GX2_SHADER_VAR_TYPE_DOUBLE3X2 = 33,
GX2_SHADER_VAR_TYPE_DOUBLE3X3 = 34,
GX2_SHADER_VAR_TYPE_DOUBLE3X4 = 35,
GX2_SHADER_VAR_TYPE_DOUBLE4X2 = 36,
GX2_SHADER_VAR_TYPE_DOUBLE4X3 = 37,
GX2_SHADER_VAR_TYPE_DOUBLE4X4 = 38,
GX2_SHADER_VAR_TYPE_VOID = 0,
GX2_SHADER_VAR_TYPE_BOOL = 1,
GX2_SHADER_VAR_TYPE_INT = 2,
GX2_SHADER_VAR_TYPE_UINT = 3,
GX2_SHADER_VAR_TYPE_FLOAT = 4,
GX2_SHADER_VAR_TYPE_DOUBLE = 5,
GX2_SHADER_VAR_TYPE_DOUBLE2 = 6,
GX2_SHADER_VAR_TYPE_DOUBLE3 = 7,
GX2_SHADER_VAR_TYPE_DOUBLE4 = 8,
GX2_SHADER_VAR_TYPE_FLOAT2 = 9,
GX2_SHADER_VAR_TYPE_FLOAT3 = 10,
GX2_SHADER_VAR_TYPE_FLOAT4 = 11,
GX2_SHADER_VAR_TYPE_BOOL2 = 12,
GX2_SHADER_VAR_TYPE_BOOL3 = 13,
GX2_SHADER_VAR_TYPE_BOOL4 = 14,
GX2_SHADER_VAR_TYPE_INT2 = 15,
GX2_SHADER_VAR_TYPE_INT3 = 16,
GX2_SHADER_VAR_TYPE_INT4 = 17,
GX2_SHADER_VAR_TYPE_UINT2 = 18,
GX2_SHADER_VAR_TYPE_UINT3 = 19,
GX2_SHADER_VAR_TYPE_UINT4 = 20,
GX2_SHADER_VAR_TYPE_FLOAT2X2 = 21,
GX2_SHADER_VAR_TYPE_FLOAT2X3 = 22,
GX2_SHADER_VAR_TYPE_FLOAT2X4 = 23,
GX2_SHADER_VAR_TYPE_FLOAT3X2 = 24,
GX2_SHADER_VAR_TYPE_FLOAT3X3 = 25,
GX2_SHADER_VAR_TYPE_FLOAT3X4 = 26,
GX2_SHADER_VAR_TYPE_FLOAT4X2 = 27,
GX2_SHADER_VAR_TYPE_FLOAT4X3 = 28,
GX2_SHADER_VAR_TYPE_FLOAT4X4 = 29,
GX2_SHADER_VAR_TYPE_DOUBLE2X2 = 30,
GX2_SHADER_VAR_TYPE_DOUBLE2X3 = 31,
GX2_SHADER_VAR_TYPE_DOUBLE2X4 = 32,
GX2_SHADER_VAR_TYPE_DOUBLE3X2 = 33,
GX2_SHADER_VAR_TYPE_DOUBLE3X3 = 34,
GX2_SHADER_VAR_TYPE_DOUBLE3X4 = 35,
GX2_SHADER_VAR_TYPE_DOUBLE4X2 = 36,
GX2_SHADER_VAR_TYPE_DOUBLE4X3 = 37,
GX2_SHADER_VAR_TYPE_DOUBLE4X4 = 38,
} GX2ShaderVarType;
typedef enum GX2StencilFunction
{
GX2_STENCIL_FUNCTION_KEEP = 0,
GX2_STENCIL_FUNCTION_ZERO = 1,
GX2_STENCIL_FUNCTION_REPLACE = 2,
GX2_STENCIL_FUNCTION_INCR_CLAMP = 3,
GX2_STENCIL_FUNCTION_DECR_CLAMP = 4,
GX2_STENCIL_FUNCTION_INV = 5,
GX2_STENCIL_FUNCTION_INCR_WRAP = 6,
GX2_STENCIL_FUNCTION_DECR_WRAP = 7,
GX2_STENCIL_FUNCTION_KEEP = 0,
GX2_STENCIL_FUNCTION_ZERO = 1,
GX2_STENCIL_FUNCTION_REPLACE = 2,
GX2_STENCIL_FUNCTION_INCR_CLAMP = 3,
GX2_STENCIL_FUNCTION_DECR_CLAMP = 4,
GX2_STENCIL_FUNCTION_INV = 5,
GX2_STENCIL_FUNCTION_INCR_WRAP = 6,
GX2_STENCIL_FUNCTION_DECR_WRAP = 7,
} GX2StencilFunction;
typedef enum GX2SurfaceDim
{
GX2_SURFACE_DIM_TEXTURE_1D = 0,
GX2_SURFACE_DIM_TEXTURE_2D = 1,
GX2_SURFACE_DIM_TEXTURE_3D = 2,
GX2_SURFACE_DIM_TEXTURE_CUBE = 3,
GX2_SURFACE_DIM_TEXTURE_1D_ARRAY = 4,
GX2_SURFACE_DIM_TEXTURE_2D_ARRAY = 5,
GX2_SURFACE_DIM_TEXTURE_2D_MSAA = 6,
GX2_SURFACE_DIM_TEXTURE_2D_MSAA_ARRAY = 7,
GX2_SURFACE_DIM_TEXTURE_1D = 0,
GX2_SURFACE_DIM_TEXTURE_2D = 1,
GX2_SURFACE_DIM_TEXTURE_3D = 2,
GX2_SURFACE_DIM_TEXTURE_CUBE = 3,
GX2_SURFACE_DIM_TEXTURE_1D_ARRAY = 4,
GX2_SURFACE_DIM_TEXTURE_2D_ARRAY = 5,
GX2_SURFACE_DIM_TEXTURE_2D_MSAA = 6,
GX2_SURFACE_DIM_TEXTURE_2D_MSAA_ARRAY = 7,
} GX2SurfaceDim;
typedef enum GX2SurfaceFormat
{
GX2_SURFACE_FORMAT_INVALID = 0x00,
GX2_SURFACE_FORMAT_UNORM_R4_G4 = 0x02,
GX2_SURFACE_FORMAT_UNORM_R4_G4_B4_A4 = 0x0b,
GX2_SURFACE_FORMAT_UNORM_R8 = 0x01,
GX2_SURFACE_FORMAT_UNORM_R8_G8 = 0x07,
GX2_SURFACE_FORMAT_UNORM_R8_G8_B8_A8 = 0x01a,
GX2_SURFACE_FORMAT_UNORM_R16 = 0x05,
GX2_SURFACE_FORMAT_UNORM_R16_G16 = 0x0f,
GX2_SURFACE_FORMAT_UNORM_R16_G16_B16_A16 = 0x01f,
GX2_SURFACE_FORMAT_UNORM_R5_G6_B5 = 0x08,
GX2_SURFACE_FORMAT_UNORM_R5_G5_B5_A1 = 0x0a,
GX2_SURFACE_FORMAT_UNORM_A1_B5_G5_R5 = 0x0c,
GX2_SURFACE_FORMAT_UNORM_R24_X8 = 0x011,
GX2_SURFACE_FORMAT_UNORM_A2_B10_G10_R10 = 0x01b,
GX2_SURFACE_FORMAT_UNORM_R10_G10_B10_A2 = 0x019,
GX2_SURFACE_FORMAT_UNORM_BC1 = 0x031,
GX2_SURFACE_FORMAT_UNORM_BC2 = 0x032,
GX2_SURFACE_FORMAT_UNORM_BC3 = 0x033,
GX2_SURFACE_FORMAT_UNORM_BC4 = 0x034,
GX2_SURFACE_FORMAT_UNORM_BC5 = 0x035,
GX2_SURFACE_FORMAT_UNORM_NV12 = 0x081,
GX2_SURFACE_FORMAT_INVALID = 0x00,
GX2_SURFACE_FORMAT_UNORM_R4_G4 = 0x02,
GX2_SURFACE_FORMAT_UNORM_R4_G4_B4_A4 = 0x0b,
GX2_SURFACE_FORMAT_UNORM_R8 = 0x01,
GX2_SURFACE_FORMAT_UNORM_R8_G8 = 0x07,
GX2_SURFACE_FORMAT_UNORM_R8_G8_B8_A8 = 0x01a,
GX2_SURFACE_FORMAT_UNORM_R16 = 0x05,
GX2_SURFACE_FORMAT_UNORM_R16_G16 = 0x0f,
GX2_SURFACE_FORMAT_UNORM_R16_G16_B16_A16 = 0x01f,
GX2_SURFACE_FORMAT_UNORM_R5_G6_B5 = 0x08,
GX2_SURFACE_FORMAT_UNORM_R5_G5_B5_A1 = 0x0a,
GX2_SURFACE_FORMAT_UNORM_A1_B5_G5_R5 = 0x0c,
GX2_SURFACE_FORMAT_UNORM_R24_X8 = 0x011,
GX2_SURFACE_FORMAT_UNORM_A2_B10_G10_R10 = 0x01b,
GX2_SURFACE_FORMAT_UNORM_R10_G10_B10_A2 = 0x019,
GX2_SURFACE_FORMAT_UNORM_BC1 = 0x031,
GX2_SURFACE_FORMAT_UNORM_BC2 = 0x032,
GX2_SURFACE_FORMAT_UNORM_BC3 = 0x033,
GX2_SURFACE_FORMAT_UNORM_BC4 = 0x034,
GX2_SURFACE_FORMAT_UNORM_BC5 = 0x035,
GX2_SURFACE_FORMAT_UNORM_NV12 = 0x081,
GX2_SURFACE_FORMAT_UINT_R8 = 0x101,
GX2_SURFACE_FORMAT_UINT_R8_G8 = 0x107,
GX2_SURFACE_FORMAT_UINT_R8_G8_B8_A8 = 0x11a,
GX2_SURFACE_FORMAT_UINT_R16 = 0x105,
GX2_SURFACE_FORMAT_UINT_R16_G16 = 0x10f,
GX2_SURFACE_FORMAT_UINT_R16_G16_B16_A16 = 0x11f,
GX2_SURFACE_FORMAT_UINT_R32 = 0x10d,
GX2_SURFACE_FORMAT_UINT_R32_G32 = 0x11d,
GX2_SURFACE_FORMAT_UINT_R32_G32_B32_A32 = 0x122,
GX2_SURFACE_FORMAT_UINT_A2_B10_G10_R10 = 0x11b,
GX2_SURFACE_FORMAT_UINT_R10_G10_B10_A2 = 0x119,
GX2_SURFACE_FORMAT_UINT_X24_G8 = 0x111,
GX2_SURFACE_FORMAT_UINT_G8_X24 = 0x11c,
GX2_SURFACE_FORMAT_UINT_R8 = 0x101,
GX2_SURFACE_FORMAT_UINT_R8_G8 = 0x107,
GX2_SURFACE_FORMAT_UINT_R8_G8_B8_A8 = 0x11a,
GX2_SURFACE_FORMAT_UINT_R16 = 0x105,
GX2_SURFACE_FORMAT_UINT_R16_G16 = 0x10f,
GX2_SURFACE_FORMAT_UINT_R16_G16_B16_A16 = 0x11f,
GX2_SURFACE_FORMAT_UINT_R32 = 0x10d,
GX2_SURFACE_FORMAT_UINT_R32_G32 = 0x11d,
GX2_SURFACE_FORMAT_UINT_R32_G32_B32_A32 = 0x122,
GX2_SURFACE_FORMAT_UINT_A2_B10_G10_R10 = 0x11b,
GX2_SURFACE_FORMAT_UINT_R10_G10_B10_A2 = 0x119,
GX2_SURFACE_FORMAT_UINT_X24_G8 = 0x111,
GX2_SURFACE_FORMAT_UINT_G8_X24 = 0x11c,
GX2_SURFACE_FORMAT_SNORM_R8 = 0x201,
GX2_SURFACE_FORMAT_SNORM_R8_G8 = 0x207,
GX2_SURFACE_FORMAT_SNORM_R8_G8_B8_A8 = 0x21a,
GX2_SURFACE_FORMAT_SNORM_R16 = 0x205,
GX2_SURFACE_FORMAT_SNORM_R16_G16 = 0x20f,
GX2_SURFACE_FORMAT_SNORM_R16_G16_B16_A16 = 0x21f,
GX2_SURFACE_FORMAT_SNORM_R10_G10_B10_A2 = 0x219,
GX2_SURFACE_FORMAT_SNORM_BC4 = 0x234,
GX2_SURFACE_FORMAT_SNORM_BC5 = 0x235,
GX2_SURFACE_FORMAT_SNORM_R8 = 0x201,
GX2_SURFACE_FORMAT_SNORM_R8_G8 = 0x207,
GX2_SURFACE_FORMAT_SNORM_R8_G8_B8_A8 = 0x21a,
GX2_SURFACE_FORMAT_SNORM_R16 = 0x205,
GX2_SURFACE_FORMAT_SNORM_R16_G16 = 0x20f,
GX2_SURFACE_FORMAT_SNORM_R16_G16_B16_A16 = 0x21f,
GX2_SURFACE_FORMAT_SNORM_R10_G10_B10_A2 = 0x219,
GX2_SURFACE_FORMAT_SNORM_BC4 = 0x234,
GX2_SURFACE_FORMAT_SNORM_BC5 = 0x235,
GX2_SURFACE_FORMAT_SINT_R8 = 0x301,
GX2_SURFACE_FORMAT_SINT_R8_G8 = 0x307,
GX2_SURFACE_FORMAT_SINT_R8_G8_B8_A8 = 0x31a,
GX2_SURFACE_FORMAT_SINT_R16 = 0x305,
GX2_SURFACE_FORMAT_SINT_R16_G16 = 0x30f,
GX2_SURFACE_FORMAT_SINT_R16_G16_B16_A16 = 0x31f,
GX2_SURFACE_FORMAT_SINT_R32 = 0x30d,
GX2_SURFACE_FORMAT_SINT_R32_G32 = 0x31d,
GX2_SURFACE_FORMAT_SINT_R32_G32_B32_A32 = 0x322,
GX2_SURFACE_FORMAT_SINT_R10_G10_B10_A2 = 0x319,
GX2_SURFACE_FORMAT_SINT_R8 = 0x301,
GX2_SURFACE_FORMAT_SINT_R8_G8 = 0x307,
GX2_SURFACE_FORMAT_SINT_R8_G8_B8_A8 = 0x31a,
GX2_SURFACE_FORMAT_SINT_R16 = 0x305,
GX2_SURFACE_FORMAT_SINT_R16_G16 = 0x30f,
GX2_SURFACE_FORMAT_SINT_R16_G16_B16_A16 = 0x31f,
GX2_SURFACE_FORMAT_SINT_R32 = 0x30d,
GX2_SURFACE_FORMAT_SINT_R32_G32 = 0x31d,
GX2_SURFACE_FORMAT_SINT_R32_G32_B32_A32 = 0x322,
GX2_SURFACE_FORMAT_SINT_R10_G10_B10_A2 = 0x319,
GX2_SURFACE_FORMAT_SRGB_R8_G8_B8_A8 = 0x41a,
GX2_SURFACE_FORMAT_SRGB_BC1 = 0x431,
GX2_SURFACE_FORMAT_SRGB_BC2 = 0x432,
GX2_SURFACE_FORMAT_SRGB_BC3 = 0x433,
GX2_SURFACE_FORMAT_SRGB_R8_G8_B8_A8 = 0x41a,
GX2_SURFACE_FORMAT_SRGB_BC1 = 0x431,
GX2_SURFACE_FORMAT_SRGB_BC2 = 0x432,
GX2_SURFACE_FORMAT_SRGB_BC3 = 0x433,
GX2_SURFACE_FORMAT_FLOAT_R32 = 0x80e,
GX2_SURFACE_FORMAT_FLOAT_R32_G32 = 0x81e,
GX2_SURFACE_FORMAT_FLOAT_R32_G32_B32_A32 = 0x823,
GX2_SURFACE_FORMAT_FLOAT_R16 = 0x806,
GX2_SURFACE_FORMAT_FLOAT_R16_G16 = 0x810,
GX2_SURFACE_FORMAT_FLOAT_R16_G16_B16_A16 = 0x820,
GX2_SURFACE_FORMAT_FLOAT_R11_G11_B10 = 0x816,
GX2_SURFACE_FORMAT_FLOAT_D24_S8 = 0x811,
GX2_SURFACE_FORMAT_FLOAT_X8_X24 = 0x81c,
GX2_SURFACE_FORMAT_FLOAT_R32 = 0x80e,
GX2_SURFACE_FORMAT_FLOAT_R32_G32 = 0x81e,
GX2_SURFACE_FORMAT_FLOAT_R32_G32_B32_A32 = 0x823,
GX2_SURFACE_FORMAT_FLOAT_R16 = 0x806,
GX2_SURFACE_FORMAT_FLOAT_R16_G16 = 0x810,
GX2_SURFACE_FORMAT_FLOAT_R16_G16_B16_A16 = 0x820,
GX2_SURFACE_FORMAT_FLOAT_R11_G11_B10 = 0x816,
GX2_SURFACE_FORMAT_FLOAT_D24_S8 = 0x811,
GX2_SURFACE_FORMAT_FLOAT_X8_X24 = 0x81c,
} GX2SurfaceFormat;
typedef enum GX2SurfaceUse
{
GX2_SURFACE_USE_NONE = 0,
GX2_SURFACE_USE_TEXTURE = 1 << 0,
GX2_SURFACE_USE_COLOR_BUFFER = 1 << 1,
GX2_SURFACE_USE_DEPTH_BUFFER = 1 << 2,
GX2_SURFACE_USE_SCAN_BUFFER = 1 << 3,
GX2_SURFACE_USE_TV = 1 << 31,
GX2_SURFACE_USE_TEXTURE_COLOR_BUFFER_TV = (GX2_SURFACE_USE_TEXTURE | GX2_SURFACE_USE_COLOR_BUFFER | GX2_SURFACE_USE_TV)
GX2_SURFACE_USE_NONE = 0,
GX2_SURFACE_USE_TEXTURE = 1 << 0,
GX2_SURFACE_USE_COLOR_BUFFER = 1 << 1,
GX2_SURFACE_USE_DEPTH_BUFFER = 1 << 2,
GX2_SURFACE_USE_SCAN_BUFFER = 1 << 3,
GX2_SURFACE_USE_TV = 1 << 31,
GX2_SURFACE_USE_TEXTURE_COLOR_BUFFER_TV = (GX2_SURFACE_USE_TEXTURE | GX2_SURFACE_USE_COLOR_BUFFER | GX2_SURFACE_USE_TV)
} GX2SurfaceUse;
WUT_ENUM_BITMASK_TYPE(GX2SurfaceUse)
typedef enum GX2TessellationMode
{
GX2_TESSELLATION_MODE_DISCRETE = 0,
GX2_TESSELLATION_MODE_CONTINUOUS = 1,
GX2_TESSELLATION_MODE_ADAPTIVE = 2,
GX2_TESSELLATION_MODE_DISCRETE = 0,
GX2_TESSELLATION_MODE_CONTINUOUS = 1,
GX2_TESSELLATION_MODE_ADAPTIVE = 2,
} GX2TessellationMode;
typedef enum GX2TexBorderType
{
GX2_TEX_BORDER_TYPE_TRANSPARENT_BLACK = 0,
GX2_TEX_BORDER_TYPE_BLACK = 1,
GX2_TEX_BORDER_TYPE_WHITE = 2,
GX2_TEX_BORDER_TYPE_VARIABLE = 3,
GX2_TEX_BORDER_TYPE_TRANSPARENT_BLACK = 0,
GX2_TEX_BORDER_TYPE_BLACK = 1,
GX2_TEX_BORDER_TYPE_WHITE = 2,
GX2_TEX_BORDER_TYPE_VARIABLE = 3,
} GX2TexBorderType;
typedef enum GX2TexClampMode
{
GX2_TEX_CLAMP_MODE_WRAP = 0,
GX2_TEX_CLAMP_MODE_MIRROR = 1,
GX2_TEX_CLAMP_MODE_CLAMP = 2,
GX2_TEX_CLAMP_MODE_MIRROR_ONCE = 3,
GX2_TEX_CLAMP_MODE_CLAMP_HALF_BORDER = 4,
GX2_TEX_CLAMP_MODE_MIRROR_ONCE_HALF_BORDER = 5,
GX2_TEX_CLAMP_MODE_CLAMP_BORDER = 6,
GX2_TEX_CLAMP_MODE_MIRROR_ONCE_BORDER = 7,
GX2_TEX_CLAMP_MODE_WRAP = 0,
GX2_TEX_CLAMP_MODE_MIRROR = 1,
GX2_TEX_CLAMP_MODE_CLAMP = 2,
GX2_TEX_CLAMP_MODE_MIRROR_ONCE = 3,
GX2_TEX_CLAMP_MODE_CLAMP_HALF_BORDER = 4,
GX2_TEX_CLAMP_MODE_MIRROR_ONCE_HALF_BORDER = 5,
GX2_TEX_CLAMP_MODE_CLAMP_BORDER = 6,
GX2_TEX_CLAMP_MODE_MIRROR_ONCE_BORDER = 7,
} GX2TexClampMode;
typedef enum GX2TexMipFilterMode
{
GX2_TEX_MIP_FILTER_MODE_NONE = 0,
GX2_TEX_MIP_FILTER_MODE_POINT = 1,
GX2_TEX_MIP_FILTER_MODE_LINEAR = 2,
GX2_TEX_MIP_FILTER_MODE_NONE = 0,
GX2_TEX_MIP_FILTER_MODE_POINT = 1,
GX2_TEX_MIP_FILTER_MODE_LINEAR = 2,
} GX2TexMipFilterMode;
typedef enum GX2TexMipPerfMode
{
GX2_TEX_MIP_PERF_MODE_DISABLE = 0,
GX2_TEX_MIP_PERF_MODE_DISABLE = 0,
} GX2TexMipPerfMode;
typedef enum GX2TexXYFilterMode
{
GX2_TEX_XY_FILTER_MODE_POINT = 0,
GX2_TEX_XY_FILTER_MODE_LINEAR = 1,
GX2_TEX_XY_FILTER_MODE_BICUBIC = 2,
GX2_TEX_XY_FILTER_MODE_POINT = 0,
GX2_TEX_XY_FILTER_MODE_LINEAR = 1,
GX2_TEX_XY_FILTER_MODE_BICUBIC = 2,
} GX2TexXYFilterMode;
typedef enum GX2TexAnisoRatio
{
GX2_TEX_ANISO_RATIO_NONE = 0,
GX2_TEX_ANISO_RATIO_2_TO_1 = 1,
GX2_TEX_ANISO_RATIO_4_TO_1 = 2,
GX2_TEX_ANISO_RATIO_8_TO_1 = 3,
GX2_TEX_ANISO_RATIO_16_TO_1 = 4,
GX2_TEX_ANISO_RATIO_NONE = 0,
GX2_TEX_ANISO_RATIO_2_TO_1 = 1,
GX2_TEX_ANISO_RATIO_4_TO_1 = 2,
GX2_TEX_ANISO_RATIO_8_TO_1 = 3,
GX2_TEX_ANISO_RATIO_16_TO_1 = 4,
} GX2TexAnisoRatio;
typedef enum GX2TexZFilterMode
{
GX2_TEX_Z_FILTER_MODE_NONE = 0,
GX2_TEX_Z_FILTER_MODE_POINT = 1,
GX2_TEX_Z_FILTER_MODE_LINEAR = 2,
GX2_TEX_Z_FILTER_MODE_NONE = 0,
GX2_TEX_Z_FILTER_MODE_POINT = 1,
GX2_TEX_Z_FILTER_MODE_LINEAR = 2,
} GX2TexZFilterMode;
typedef enum GX2TexZPerfMode
{
GX2_TEX_Z_PERF_MODE_DISABLED = 0,
GX2_TEX_Z_PERF_MODE_DISABLED = 0,
} GX2TexZPerfMode;
typedef enum GX2TileMode
{
GX2_TILE_MODE_DEFAULT = 0,
GX2_TILE_MODE_LINEAR_ALIGNED = 1,
GX2_TILE_MODE_TILED_1D_THIN1 = 2,
GX2_TILE_MODE_TILED_1D_THICK = 3,
GX2_TILE_MODE_TILED_2D_THIN1 = 4,
GX2_TILE_MODE_TILED_2D_THIN2 = 5,
GX2_TILE_MODE_TILED_2D_THIN4 = 6,
GX2_TILE_MODE_TILED_2D_THICK = 7,
GX2_TILE_MODE_TILED_2B_THIN1 = 8,
GX2_TILE_MODE_TILED_2B_THIN2 = 9,
GX2_TILE_MODE_TILED_2B_THIN4 = 10,
GX2_TILE_MODE_TILED_2B_THICK = 11,
GX2_TILE_MODE_TILED_3D_THIN1 = 12,
GX2_TILE_MODE_TILED_3D_THICK = 13,
GX2_TILE_MODE_TILED_3B_THIN1 = 14,
GX2_TILE_MODE_TILED_3B_THICK = 15,
GX2_TILE_MODE_LINEAR_SPECIAL = 16,
GX2_TILE_MODE_DEFAULT = 0,
GX2_TILE_MODE_LINEAR_ALIGNED = 1,
GX2_TILE_MODE_TILED_1D_THIN1 = 2,
GX2_TILE_MODE_TILED_1D_THICK = 3,
GX2_TILE_MODE_TILED_2D_THIN1 = 4,
GX2_TILE_MODE_TILED_2D_THIN2 = 5,
GX2_TILE_MODE_TILED_2D_THIN4 = 6,
GX2_TILE_MODE_TILED_2D_THICK = 7,
GX2_TILE_MODE_TILED_2B_THIN1 = 8,
GX2_TILE_MODE_TILED_2B_THIN2 = 9,
GX2_TILE_MODE_TILED_2B_THIN4 = 10,
GX2_TILE_MODE_TILED_2B_THICK = 11,
GX2_TILE_MODE_TILED_3D_THIN1 = 12,
GX2_TILE_MODE_TILED_3D_THICK = 13,
GX2_TILE_MODE_TILED_3B_THIN1 = 14,
GX2_TILE_MODE_TILED_3B_THICK = 15,
GX2_TILE_MODE_LINEAR_SPECIAL = 16,
} GX2TileMode;
typedef enum GX2TVRenderMode
{
GX2_TV_RENDER_MODE_DISABLED = 0,
GX2_TV_RENDER_MODE_STANDARD_480P = 1,
GX2_TV_RENDER_MODE_WIDE_480P = 2,
GX2_TV_RENDER_MODE_WIDE_720P = 3,
GX2_TV_RENDER_MODE_WIDE_1080P = 5,
GX2_TV_RENDER_MODE_DISABLED = 0,
GX2_TV_RENDER_MODE_STANDARD_480P = 1,
GX2_TV_RENDER_MODE_WIDE_480P = 2,
GX2_TV_RENDER_MODE_WIDE_720P = 3,
GX2_TV_RENDER_MODE_WIDE_1080P = 5,
} GX2TVRenderMode;
typedef enum GX2TVScanMode
{
GX2_TV_SCAN_MODE_NONE = 0,
GX2_TV_SCAN_MODE_576I = 1,
GX2_TV_SCAN_MODE_480I = 2,
GX2_TV_SCAN_MODE_480P = 3,
GX2_TV_SCAN_MODE_720P = 4,
GX2_TV_SCAN_MODE_1080I = 6,
GX2_TV_SCAN_MODE_1080P = 7,
GX2_TV_SCAN_MODE_NONE = 0,
GX2_TV_SCAN_MODE_576I = 1,
GX2_TV_SCAN_MODE_480I = 2,
GX2_TV_SCAN_MODE_480P = 3,
GX2_TV_SCAN_MODE_720P = 4,
GX2_TV_SCAN_MODE_1080I = 6,
GX2_TV_SCAN_MODE_1080P = 7,
} GX2TVScanMode;
#ifdef __cplusplus

View File

@ -1,9 +1,9 @@
#pragma once
#include <string.h>
#include <wut.h>
#include <string.h>
#include "enum.h"
#include "sampler.h"
#include "gx2r/buffer.h"
#include "sampler.h"
/**
* \defgroup gx2_shader Shaders
@ -427,9 +427,12 @@ GX2SetGeometryUniformBlock(uint32_t location,
void
GX2SetShaderModeEx(GX2ShaderMode mode,
uint32_t numVsGpr, uint32_t numVsStackEntries,
uint32_t numGsGpr, uint32_t numGsStackEntries,
uint32_t numPsGpr, uint32_t numPsStackEntries);
uint32_t numVsGpr,
uint32_t numVsStackEntries,
uint32_t numGsGpr,
uint32_t numGsStackEntries,
uint32_t numPsGpr,
uint32_t numPsStackEntries);
void
GX2SetStreamOutEnable(BOOL enable);

View File

@ -1,6 +1,6 @@
#pragma once
#include <gx2r/resource.h>
#include <wut.h>
#include <gx2r/resource.h>
#include "enum.h"
/**
@ -28,7 +28,8 @@ struct GX2Surface
uint32_t mipLevels;
GX2SurfaceFormat format;
GX2AAMode aa;
union {
union
{
GX2SurfaceUse use;
GX2RResourceFlags resourceFlags;
};
@ -185,8 +186,8 @@ GX2CopySurfaceEx(const GX2Surface *src,
GX2Point *dstPoints);
void
GX2ResolveAAColorBuffer(const GX2ColorBuffer * srcColorBuffer,
GX2Surface * dstSurface,
GX2ResolveAAColorBuffer(const GX2ColorBuffer *srcColorBuffer,
GX2Surface *dstSurface,
uint32_t dstMip,
uint32_t dstSlice);

View File

@ -13,19 +13,19 @@ extern "C" {
typedef enum GX2_SQ_SEL
{
GX2_SQ_SEL_X = 0,
GX2_SQ_SEL_Y = 1,
GX2_SQ_SEL_Z = 2,
GX2_SQ_SEL_W = 3,
GX2_SQ_SEL_X = 0,
GX2_SQ_SEL_Y = 1,
GX2_SQ_SEL_Z = 2,
GX2_SQ_SEL_W = 3,
GX2_SQ_SEL_R = 0,
GX2_SQ_SEL_G = 1,
GX2_SQ_SEL_B = 2,
GX2_SQ_SEL_A = 3,
GX2_SQ_SEL_R = 0,
GX2_SQ_SEL_G = 1,
GX2_SQ_SEL_B = 2,
GX2_SQ_SEL_A = 3,
GX2_SQ_SEL_0 = 4,
GX2_SQ_SEL_1 = 5,
GX2_SQ_SEL_MASK = 7,
GX2_SQ_SEL_0 = 4,
GX2_SQ_SEL_1 = 5,
GX2_SQ_SEL_MASK = 7,
} GX2_SQ_SEL;
#define GX2_SEL_MASK(x, y, z, w) (((x) << 24) | ((y) << 16) | ((z) << 8) | (w))

View File

@ -12,7 +12,7 @@
extern "C" {
#endif
typedef void * (*GX2RAllocFunction)(GX2RResourceFlags, uint32_t, uint32_t);
typedef void *(*GX2RAllocFunction)(GX2RResourceFlags, uint32_t, uint32_t);
typedef void (*GX2RFreeFunction)(GX2RResourceFlags, void *);
void

View File

@ -14,79 +14,79 @@ extern "C" {
typedef enum GX2RResourceFlags
{
//! No resource flags specified
GX2R_RESOURCE_BIND_NONE = 0,
GX2R_RESOURCE_BIND_NONE = 0,
//! This resource is to be used as a texture
GX2R_RESOURCE_BIND_TEXTURE = 1 << 0,
GX2R_RESOURCE_BIND_TEXTURE = 1 << 0,
//! This resource is to be used as a colour buffer
GX2R_RESOURCE_BIND_COLOR_BUFFER = 1 << 1,
GX2R_RESOURCE_BIND_COLOR_BUFFER = 1 << 1,
//! This resource is to be used as a depth buffer
GX2R_RESOURCE_BIND_DEPTH_BUFFER = 1 << 2,
GX2R_RESOURCE_BIND_DEPTH_BUFFER = 1 << 2,
//! This resource is to be used as a scan buffer
GX2R_RESOURCE_BIND_SCAN_BUFFER = 1 << 3,
GX2R_RESOURCE_BIND_SCAN_BUFFER = 1 << 3,
//! This resource is to be used as a vertex buffer
GX2R_RESOURCE_BIND_VERTEX_BUFFER = 1 << 4,
GX2R_RESOURCE_BIND_VERTEX_BUFFER = 1 << 4,
//! This resource is to be used as a index buffer
GX2R_RESOURCE_BIND_INDEX_BUFFER = 1 << 5,
GX2R_RESOURCE_BIND_INDEX_BUFFER = 1 << 5,
//! This resource is to be used as a uniform block
GX2R_RESOURCE_BIND_UNIFORM_BLOCK = 1 << 6,
GX2R_RESOURCE_BIND_UNIFORM_BLOCK = 1 << 6,
//! This resource is to be used as a shader program
GX2R_RESOURCE_BIND_SHADER_PROGRAM = 1 << 7,
GX2R_RESOURCE_BIND_SHADER_PROGRAM = 1 << 7,
//! This resource is to be used as a stream output
GX2R_RESOURCE_BIND_STREAM_OUTPUT = 1 << 8,
GX2R_RESOURCE_BIND_STREAM_OUTPUT = 1 << 8,
//! This resource is to be used as a display list
GX2R_RESOURCE_BIND_DISPLAY_LIST = 1 << 9,
GX2R_RESOURCE_BIND_DISPLAY_LIST = 1 << 9,
//! This resource is to be used as a geometry shader ring buffer
GX2R_RESOURCE_BIND_GS_RING_BUFFER = 1 << 10,
GX2R_RESOURCE_BIND_GS_RING_BUFFER = 1 << 10,
//! Invalidate resource for a CPU read
GX2R_RESOURCE_USAGE_CPU_READ = 1 << 11,
GX2R_RESOURCE_USAGE_CPU_READ = 1 << 11,
//! Invalidate resource for a CPU write
GX2R_RESOURCE_USAGE_CPU_WRITE = 1 << 12,
GX2R_RESOURCE_USAGE_CPU_WRITE = 1 << 12,
//! Invalidate resource for a GPU read
GX2R_RESOURCE_USAGE_GPU_READ = 1 << 13,
GX2R_RESOURCE_USAGE_GPU_READ = 1 << 13,
//! Invalidate resource for a GPU write
GX2R_RESOURCE_USAGE_GPU_WRITE = 1 << 14,
GX2R_RESOURCE_USAGE_GPU_WRITE = 1 << 14,
//! Invalidate resource for a DMA read
GX2R_RESOURCE_USAGE_DMA_READ = 1 << 15,
GX2R_RESOURCE_USAGE_DMA_READ = 1 << 15,
//! Invalidate resource for a DMA write
GX2R_RESOURCE_USAGE_DMA_WRITE = 1 << 16,
GX2R_RESOURCE_USAGE_DMA_WRITE = 1 << 16,
//! Force resource allocation to be in MEM1
GX2R_RESOURCE_USAGE_FORCE_MEM1 = 1 << 17,
GX2R_RESOURCE_USAGE_FORCE_MEM1 = 1 << 17,
//! Force resource allocation to be in MEM2
GX2R_RESOURCE_USAGE_FORCE_MEM2 = 1 << 18,
GX2R_RESOURCE_USAGE_FORCE_MEM2 = 1 << 18,
//! Disable CPU invalidation
GX2R_RESOURCE_DISABLE_CPU_INVALIDATE = 1 << 20,
GX2R_RESOURCE_DISABLE_CPU_INVALIDATE = 1 << 20,
//! Disable GPU invalidation
GX2R_RESOURCE_DISABLE_GPU_INVALIDATE = 1 << 21,
GX2R_RESOURCE_DISABLE_GPU_INVALIDATE = 1 << 21,
//! Resource is locked for read-only access
GX2R_RESOURCE_LOCKED_READ_ONLY = 1 << 22,
GX2R_RESOURCE_LOCKED_READ_ONLY = 1 << 22,
//! Resource was allocated by GX2R.
GX2R_RESOURCE_GX2R_ALLOCATED = 1 << 29,
GX2R_RESOURCE_GX2R_ALLOCATED = 1 << 29,
//! Resource is locked for all access
GX2R_RESOURCE_LOCKED = 1 << 30,
GX2R_RESOURCE_LOCKED = 1 << 30,
} GX2RResourceFlags;
WUT_ENUM_BITMASK_TYPE(GX2RResourceFlags)

View File

@ -20,30 +20,30 @@ typedef void (*H264DECFptrOutputFn)(H264DecodeOutput *output);
typedef enum H264Error
{
//! No errors.
H264_ERROR_OK = 0,
H264_ERROR_OK = 0,
//! Invalid picture parameter set.
H264_ERROR_INVALID_PPS = 24,
H264_ERROR_INVALID_PPS = 24,
//! Invalid sequence parameter set.
H264_ERROR_INVALID_SPS = 26,
H264_ERROR_INVALID_SPS = 26,
//! Invalid slice header.
H264_ERROR_INVALID_SLICEHEADER = 61,
H264_ERROR_INVALID_SLICEHEADER = 61,
//! Generic h264 error.
H264_ERROR_GENERIC = 0x1000000,
H264_ERROR_GENERIC = 0x1000000,
//! Invalid parameters passed.
H264_ERROR_INVALID_PARAMETER = 0x1010000,
H264_ERROR_INVALID_PARAMETER = 0x1010000,
//! The amount of memory provided to the h264 library
//! is insufficient.
H264_ERROR_OUT_OF_MEMORY = 0x1020000,
H264_ERROR_OUT_OF_MEMORY = 0x1020000,
//! Invalid h264 stream profile. Only the baseline (66),
//! main (77) and high (100) profiles are allowed.
H264_ERROR_INVALID_PROFILE = 0x1080000,
H264_ERROR_INVALID_PROFILE = 0x1080000,
} H264Error;
struct WUT_PACKED H264DecodedVuiParameters
@ -167,10 +167,10 @@ struct WUT_PACKED H264DecodeOutput
{
//! Number of frames output
int32_t frameCount;
//! Frames
H264DecodeResult **decodeResults;
//! User memory pointer passed into SetParam
void *userMemory;
};

View File

@ -18,12 +18,12 @@ typedef struct MICStatus MICStatus;
typedef enum MICError
{
MIC_ERROR_OK = 0,
MIC_ERROR_NOT_OPENED = -1,
MIC_ERROR_INVALID_HANDLE = -2,
MIC_ERROR_INIT = -5,
MIC_ERROR_ALREADY_CLOSED = -7,
MIC_ERROR_INVALID_INSTANCE = -8,
MIC_ERROR_OK = 0,
MIC_ERROR_NOT_OPENED = -1,
MIC_ERROR_INVALID_HANDLE = -2,
MIC_ERROR_INIT = -5,
MIC_ERROR_ALREADY_CLOSED = -7,
MIC_ERROR_INVALID_INSTANCE = -8,
} MICError;
typedef enum MICInstance
@ -46,7 +46,7 @@ WUT_CHECK_SIZE(MICWorkMemory, 0x08);
struct MICStatus
{
int state; // 1 << 1 = Open
int state; // 1 << 1 = Open
int availableData;
int bufferPos;
};
@ -59,23 +59,31 @@ WUT_CHECK_SIZE(MICStatus, 0x0C);
* The second parameter to MICInit is unused, any value is valid.
*/
MICHandle
MICInit(MICInstance instance, int unused, MICWorkMemory *workMemory,
MICInit(MICInstance instance,
int unused,
MICWorkMemory *workMemory,
MICError *outError);
MICError
MICOpen(MICHandle handle);
MICError
MICGetState(MICHandle handle, int state, uint32_t *outStateVal);
MICGetState(MICHandle handle,
int state,
uint32_t *outStateVal);
MICError
MICSetState(MICHandle handle, int state, uint32_t stateVal);
MICSetState(MICHandle handle,
int state,
uint32_t stateVal);
MICError
MICGetStatus(MICHandle handle, MICStatus *outStatus);
MICGetStatus(MICHandle handle,
MICStatus *outStatus);
MICError
MICSetDataConsumed(MICHandle handle, int dataAmountConsumed);
MICSetDataConsumed(MICHandle handle,
int dataAmountConsumed);
MICError
MICClose(MICHandle handle);

View File

@ -6,30 +6,30 @@ extern int h_errno;
struct hostent
{
char *h_name;
char *h_name;
char **h_aliases;
int h_addrtype;
int h_length;
int h_addrtype;
int h_length;
char **h_addr_list;
#define h_addr h_addr_list[0]
#define h_addr h_addr_list[0]
};
struct servent
{
char *s_name;
char *s_name;
char **s_aliases;
int s_port;
char *s_proto;
int s_port;
char *s_proto;
};
struct addrinfo
{
int ai_flags;
int ai_family;
int ai_socktype;
int ai_protocol;
socklen_t ai_addrlen;
char *ai_canonname;
int ai_flags;
int ai_family;
int ai_socktype;
int ai_protocol;
socklen_t ai_addrlen;
char *ai_canonname;
struct sockaddr *ai_addr;
struct addrinfo *ai_next;
};
@ -86,7 +86,7 @@ gethostbyname(const char *name);
struct hostent *
gethostbyaddr(const void *addr,
socklen_t len,
socklen_t len,
int type);
struct hostent *

View File

@ -27,15 +27,15 @@ typedef uint32_t in_addr_t;
struct in_addr
{
in_addr_t s_addr;
in_addr_t s_addr;
};
struct sockaddr_in
{
sa_family_t sin_family;
in_port_t sin_port;
struct in_addr sin_addr;
unsigned char sin_zero[8];
sa_family_t sin_family;
in_port_t sin_port;
struct in_addr sin_addr;
unsigned char sin_zero[8];
};
struct ip_mreq

View File

@ -1,9 +1,9 @@
#pragma once
#define SOL_TCP 6
#define SOL_TCP 6
#define TCP_ACKDELAYTIME 0x2001
#define TCP_NOACKDELAY 0x2002
#define TCP_MAXSEG 0x2003
#define TCP_NODELAY 0x2004
#define TCP_UNKNOWN 0x2005 // amount of mss received before sending an ack
#define TCP_ACKDELAYTIME 0x2001
#define TCP_NOACKDELAY 0x2002
#define TCP_MAXSEG 0x2003
#define TCP_NODELAY 0x2004
#define TCP_UNKNOWN 0x2005 // amount of mss received before sending an ack

View File

@ -25,29 +25,29 @@ typedef struct NFCReadT2TResult NFCReadT2TResult;
typedef enum NFCMode
{
NFC_MODE_INVALID = -1,
NFC_MODE_INVALID = -1,
//! NFC is idle
NFC_MODE_IDLE = 0,
NFC_MODE_IDLE = 0,
//! NFC is discovering / has an active tag
NFC_MODE_ACTIVE = 1,
NFC_MODE_ACTIVE = 1,
} NFCMode;
typedef enum NFCProtocolEnum
{
NFC_PROTOCOL_UNKNOWN = 0x00,
NFC_PROTOCOL_T1T = 0x01,
NFC_PROTOCOL_T2T = 0x02,
NFC_PROTOCOL_T3T = 0x03,
NFC_PROTOCOL_ISO_DEP = 0x04,
NFC_PROTOCOL_15693 = 0x83,
NFC_PROTOCOL_UNKNOWN = 0x00,
NFC_PROTOCOL_T1T = 0x01,
NFC_PROTOCOL_T2T = 0x02,
NFC_PROTOCOL_T3T = 0x03,
NFC_PROTOCOL_ISO_DEP = 0x04,
NFC_PROTOCOL_15693 = 0x83,
} NFCProtocolEnum;
typedef enum NFCTechnologyEnum
{
NFC_TECHNOLOGY_A = 0x00,
NFC_TECHNOLOGY_B = 0x01,
NFC_TECHNOLOGY_F = 0x02,
NFC_TECHNOLOGY_ISO15693 = 0x06,
NFC_TECHNOLOGY_A = 0x00,
NFC_TECHNOLOGY_B = 0x01,
NFC_TECHNOLOGY_F = 0x02,
NFC_TECHNOLOGY_ISO15693 = 0x06,
} NFCTechnologyEnum;
typedef enum NFCTechnologyMaskEnum
@ -161,10 +161,9 @@ WUT_CHECK_SIZE(NFCReadT2TResult, 0x3A9);
* \param userContext
* User provided value.
*/
typedef void
(*NFCCallbackFn)(VPADChan chan,
NFCError error,
void *userContext);
typedef void (*NFCCallbackFn)(VPADChan chan,
NFCError error,
void *userContext);
/**
* Callback function for \link NFCSetTagDetectCallback \endlink.
@ -178,10 +177,9 @@ typedef void
* \param userContext
* User provided value.
*/
typedef void
(*NFCTagDetectCallbackFn)(VPADChan chan,
BOOL hasTag,
void *userContext);
typedef void (*NFCTagDetectCallbackFn)(VPADChan chan,
BOOL hasTag,
void *userContext);
/**
* Callback function for \link NFCDetect \endlink.
@ -207,14 +205,13 @@ typedef void
* \param userContext
* User provided value.
*/
typedef void
(*NFCDetectCallbackFn)(VPADChan chan,
NFCError error,
NFCUid *uid,
BOOL readOnly,
BOOL hasLockedData,
NFCNDEFFlags flags,
void *userContext);
typedef void (*NFCDetectCallbackFn)(VPADChan chan,
NFCError error,
NFCUid *uid,
BOOL readOnly,
BOOL hasLockedData,
NFCNDEFFlags flags,
void *userContext);
/**
* Callback function for \link NFCSendRawData \endlink and variations.
@ -234,12 +231,11 @@ typedef void
* \param userContext
* User provided value.
*/
typedef void
(*NFCRawDataCallbackFn)(VPADChan chan,
NFCError error,
uint32_t responseSize,
void *responseData,
void *userContext);
typedef void (*NFCRawDataCallbackFn)(VPADChan chan,
NFCError error,
uint32_t responseSize,
void *responseData,
void *userContext);
/**
* Callback function for \link NFCSendRawDataTwice \endlink and variations.
@ -262,15 +258,14 @@ typedef void
* \param userContext
* User provided value.
*/
typedef void
(*NFCRawDataTwiceCallbackFn)(VPADChan chan,
NFCError error,
uint8_t numCompleted,
uint32_t response0Size,
void *response0Data,
uint32_t response1Size,
void *response1Data,
void *userContext);
typedef void (*NFCRawDataTwiceCallbackFn)(VPADChan chan,
NFCError error,
uint8_t numCompleted,
uint32_t response0Size,
void *response0Data,
uint32_t response1Size,
void *response1Data,
void *userContext);
/**
* Callback function for \link NFCRead \endlink.
@ -302,16 +297,15 @@ typedef void
* \param userContext
* User provided value.
*/
typedef void
(*NFCReadCallbackFn)(VPADChan chan,
NFCError error,
NFCUid *uid,
BOOL readOnly,
uint32_t dataSize,
void *data,
uint32_t lockedDataSize,
void *lockedData,
void *userContext);
typedef void (*NFCReadCallbackFn)(VPADChan chan,
NFCError error,
NFCUid *uid,
BOOL readOnly,
uint32_t dataSize,
void *data,
uint32_t lockedDataSize,
void *lockedData,
void *userContext);
/**
* Callback function for \link NFCReadT2T \endlink.
@ -346,17 +340,16 @@ typedef void
* \param userContext
* User provided value.
*/
typedef void
(*NFCReadT2TCallbackFn)(VPADChan chan,
NFCError error,
uint8_t rfDiscId,
NFCProtocol protocol,
NFCTechnology technology,
uint8_t uidSize,
uint8_t *uid,
NFCNTAGVersion *version,
NFCReadT2TResult *result,
void *userContext);
typedef void (*NFCReadT2TCallbackFn)(VPADChan chan,
NFCError error,
uint8_t rfDiscId,
NFCProtocol protocol,
NFCTechnology technology,
uint8_t uidSize,
uint8_t *uid,
NFCNTAGVersion *version,
NFCReadT2TResult *result,
void *userContext);
/**
* Callback function for \link NFCGetTagInfo \endlink.
@ -373,11 +366,10 @@ typedef void
* \param userContext
* User provided value.
*/
typedef void
(*NFCGetTagInfoCallbackFn)(VPADChan chan,
NFCError error,
NFCTagInfo *tagInfo,
void *userContext);
typedef void (*NFCGetTagInfoCallbackFn)(VPADChan chan,
NFCError error,
NFCTagInfo *tagInfo,
void *userContext);
/**
* Callback function for \link NFCGetTagInfoMulti \endlink.
@ -397,14 +389,13 @@ typedef void
* \param userContext
* User provided value.
*/
typedef void
(*NFCGetTagInfoMultiCallbackFn)(VPADChan chan,
NFCError error,
uint8_t numTagInfos,
NFCTagInfo *tagInfo0,
NFCTagInfo *tagInfo1,
NFCTagInfo *tagInfo2,
void *userContext);
typedef void (*NFCGetTagInfoMultiCallbackFn)(VPADChan chan,
NFCError error,
uint8_t numTagInfos,
NFCTagInfo *tagInfo0,
NFCTagInfo *tagInfo1,
NFCTagInfo *tagInfo2,
void *userContext);
/**
* Initializes the NFC library.
@ -1155,6 +1146,7 @@ NFCSetReadOnly(VPADChan chan,
* \return
* 0 on success.
*/
// clang-format off
NFCError
NFCReadT2T(VPADChan chan,
uint32_t discoveryTimeout,
@ -1170,6 +1162,7 @@ NFCReadT2T(VPADChan chan,
uint8_t authenticate,
NFCReadT2TCallbackFn callback,
void *userContext);
// clang-format on
/**
* Write data to a Type 2 NTAG.
@ -1231,6 +1224,7 @@ NFCReadT2T(VPADChan chan,
* \return
* 0 on success.
*/
// clang-format off
NFCError
NFCWriteT2T(VPADChan chan,
uint16_t discoveryTimeout,
@ -1247,6 +1241,7 @@ NFCWriteT2T(VPADChan chan,
uint8_t authenticate, uint8_t activate,
NFCCallbackFn callback,
void *userContext);
// clang-format on
/**
* Get the UID and other parameters from activation event data.

View File

@ -31,14 +31,15 @@ using ConfigIdNum = uint32_t;
* The configuration for a given network profile (from 1 to 6).
* \sa NetConfCfg
*/
using Config = NetConfCfg;
using Config = NetConfCfg;
using ErrorCode = uint32_t;
using ErrorCode = uint32_t;
enum Status {
enum Status
{
STATUS_FAILED = -1,
STATUS_OK = 0,
STATUS_PROCESSING = 1,
STATUS_OK = 0,
STATUS_PROCESSING = 1,
};

View File

@ -7,8 +7,8 @@
#include <nn/acp/client.h>
#include <nn/acp/device.h>
#include <nn/acp/drcled_c.h>
#include <nn/acp/drcled_cpp.h>
#include <nn/acp/result.h>
#include <nn/acp/save.h>
#include <nn/acp/title.h>
#include <nn/acp/drcled_c.h>
#include <nn/acp/drcled_cpp.h>

View File

@ -12,17 +12,18 @@
extern "C" {
#endif
typedef enum ACPDeviceType {
ACP_DEVICE_TYPE_AUTO = 1,
ACP_DEVICE_TYPE_ODD = 2,
ACP_DEVICE_TYPE_HFIODISC = 2, /* when ApplicationDevice is emulated */
ACP_DEVICE_TYPE_MLC = 3,
ACP_DEVICE_TYPE_HFIOMLC = 3, /* when ApplicationDevice is emulated */
ACP_DEVICE_TYPE_USB = 4,
typedef enum ACPDeviceType
{
ACP_DEVICE_TYPE_AUTO = 1,
ACP_DEVICE_TYPE_ODD = 2,
ACP_DEVICE_TYPE_HFIODISC = 2, /* when ApplicationDevice is emulated */
ACP_DEVICE_TYPE_MLC = 3,
ACP_DEVICE_TYPE_HFIOMLC = 3, /* when ApplicationDevice is emulated */
ACP_DEVICE_TYPE_USB = 4,
} ACPDeviceType;
ACPResult
ACPCheckApplicationDeviceEmulation(BOOL* emulation);
ACPCheckApplicationDeviceEmulation(BOOL *emulation);
#ifdef __cplusplus
}

View File

@ -1,8 +1,8 @@
#pragma once
#include <wut.h>
#include <nn/acp/result.h>
#include <nn/acp/device.h>
#include <nn/acp/result.h>
#ifdef __cplusplus
extern "C" {

View File

@ -1,14 +1,16 @@
#pragma once
#include <wut.h>
#include <nn/acp/result.h>
#include <nn/acp/device.h>
#include <nn/acp/result.h>
#ifdef __cplusplus
namespace nn {
namespace nn
{
namespace acp {
namespace acp
{
typedef uint8_t DrcLedStatus;
typedef uint32_t DrcLedPattern;
@ -24,7 +26,7 @@ SetDrcLedDummyPowerStat(uint8_t unk1)
void
SetDrcLedTimerLength(uint64_t unk1,
uint64_t unk2)
uint64_t unk2)
asm("SetDrcLedTimerLength__Q2_2nn3acpFULT1");
void
@ -41,13 +43,13 @@ TurnOffDrcLedTest(uint8_t unk1)
void
TurnOnDrcLed(uint32_t unk1,
DrcLedPattern pattern)
DrcLedPattern pattern)
asm("TurnOnDrcLed__Q2_2nn3acpFUiQ3_2nn3acp13DrcLedPattern");
void
TurnOnDrcLedTest(uint8_t unk1,
uint32_t unk2,
DrcLedPattern pattern)
uint32_t unk2,
DrcLedPattern pattern)
asm("TurnOnDrcLedTest__Q2_2nn3acpFUcUiQ3_2nn3acp13DrcLedPattern");
} //namespace acp

View File

@ -8,89 +8,90 @@
* @{
*/
typedef enum ACPResult {
ACP_RESULT_SUCCESS = 0,
typedef enum ACPResult
{
ACP_RESULT_SUCCESS = 0,
ACP_RESULT_INVALID = -200,
ACP_RESULT_INVALID_PARAMETER = -201,
ACP_RESULT_INVALID_FILE = -202,
ACP_RESULT_INVALID_XML_FILE = -203,
ACP_RESULT_FILE_ACCESS_MODE = -204,
ACP_RESULT_INVALID_NETWORK_TIME = -205,
ACP_RESULT_INVALID = -200,
ACP_RESULT_INVALID_PARAMETER = -201,
ACP_RESULT_INVALID_FILE = -202,
ACP_RESULT_INVALID_XML_FILE = -203,
ACP_RESULT_FILE_ACCESS_MODE = -204,
ACP_RESULT_INVALID_NETWORK_TIME = -205,
ACP_RESULT_NOT_FOUND = -500,
ACP_RESULT_FILE_NOT_FOUND = -501,
ACP_RESULT_DIR_NOT_FOUND = -502,
ACP_RESULT_DEVICE_NOT_FOUND = -503,
ACP_RESULT_TITLE_NOT_FOUND = -504,
ACP_RESULT_APPLICATION_NOT_FOUND = -505,
ACP_RESULT_SYSTEM_CONFIG_NOT_FOUND = -506,
ACP_RESULT_XML_ITEM_NOT_FOUND = -507,
ACP_RESULT_NOT_FOUND = -500,
ACP_RESULT_FILE_NOT_FOUND = -501,
ACP_RESULT_DIR_NOT_FOUND = -502,
ACP_RESULT_DEVICE_NOT_FOUND = -503,
ACP_RESULT_TITLE_NOT_FOUND = -504,
ACP_RESULT_APPLICATION_NOT_FOUND = -505,
ACP_RESULT_SYSTEM_CONFIG_NOT_FOUND = -506,
ACP_RESULT_XML_ITEM_NOT_FOUND = -507,
ACP_RESULT_ALREADY_EXISTS = -600,
ACP_RESULT_FILE_ALREADY_EXISTS = -601,
ACP_RESULT_DIR_ALREADY_EXISTS = -602,
ACP_RESULT_ALREADY_EXISTS = -600,
ACP_RESULT_FILE_ALREADY_EXISTS = -601,
ACP_RESULT_DIR_ALREADY_EXISTS = -602,
ACP_RESULT_ALREADY_DONE = -700,
ACP_RESULT_ALREADY_DONE = -700,
ACP_RESULT_AUTHENTICATION = -1000,
ACP_RESULT_INVALID_REGION = -1001,
ACP_RESULT_RESTRICTED_RATING = -1002,
ACP_RESULT_NOT_PRESENT_RATING = -1003,
ACP_RESULT_PENDING_RATING = -1004,
ACP_RESULT_NET_SETTING_REQUIRED = -1005,
ACP_RESULT_NET_ACCOUNT_REQUIRED = -1006,
ACP_RESULT_NET_ACCOUNT_ERROR = -1007,
ACP_RESULT_BROWSER_REQUIRED = -1008,
ACP_RESULT_OLV_REQUIRED = -1009,
ACP_RESULT_PINCODE_REQUIRED = -1010,
ACP_RESULT_INCORRECT_PINCODE = -1011,
ACP_RESULT_INVALID_LOGO = -1012,
ACP_RESULT_DEMO_EXPIRED_NUMBER = -1013,
ACP_RESULT_DRC_REQUIRED = -1014,
ACP_RESULT_AUTHENTICATION = -1000,
ACP_RESULT_INVALID_REGION = -1001,
ACP_RESULT_RESTRICTED_RATING = -1002,
ACP_RESULT_NOT_PRESENT_RATING = -1003,
ACP_RESULT_PENDING_RATING = -1004,
ACP_RESULT_NET_SETTING_REQUIRED = -1005,
ACP_RESULT_NET_ACCOUNT_REQUIRED = -1006,
ACP_RESULT_NET_ACCOUNT_ERROR = -1007,
ACP_RESULT_BROWSER_REQUIRED = -1008,
ACP_RESULT_OLV_REQUIRED = -1009,
ACP_RESULT_PINCODE_REQUIRED = -1010,
ACP_RESULT_INCORRECT_PINCODE = -1011,
ACP_RESULT_INVALID_LOGO = -1012,
ACP_RESULT_DEMO_EXPIRED_NUMBER = -1013,
ACP_RESULT_DRC_REQUIRED = -1014,
ACP_RESULT_NO_PERMISSION = -1100,
ACP_RESULT_NO_FILE_PERMISSION = -1101,
ACP_RESULT_NO_DIR_PERMISSION = -1102,
ACP_RESULT_NO_PERMISSION = -1100,
ACP_RESULT_NO_FILE_PERMISSION = -1101,
ACP_RESULT_NO_DIR_PERMISSION = -1102,
ACP_RESULT_BUSY = -1300,
ACP_RESULT_USB_STORAGE_NOT_READY = -1301,
ACP_RESULT_BUSY = -1300,
ACP_RESULT_USB_STORAGE_NOT_READY = -1301,
ACP_RESULT_CANCELLED = -1400,
ACP_RESULT_CANCELLED = -1400,
ACP_RESULT_RESOURCE = -1500,
ACP_RESULT_DEVICE_FULL = -1501,
ACP_RESULT_JOURNAL_FULL = -1502,
ACP_RESULT_SYSTEM_MEMORY = -1503,
ACP_RESULT_FS_RESOURCE = -1504,
ACP_RESULT_IPC_RESOURCE = -1505,
ACP_RESULT_RESOURCE = -1500,
ACP_RESULT_DEVICE_FULL = -1501,
ACP_RESULT_JOURNAL_FULL = -1502,
ACP_RESULT_SYSTEM_MEMORY = -1503,
ACP_RESULT_FS_RESOURCE = -1504,
ACP_RESULT_IPC_RESOURCE = -1505,
ACP_RESULT_NOT_INITIALISED = -1600,
ACP_RESULT_NOT_INITIALISED = -1600,
ACP_RESULT_ACCOUNT_ERROR = -1700,
ACP_RESULT_ACCOUNT_ERROR = -1700,
ACP_RESULT_UNSUPPORTED = -1800,
ACP_RESULT_UNSUPPORTED = -1800,
ACP_RESULT_DATA_CORRUPTED = -2000,
ACP_RESULT_DEVICE = -2001,
ACP_RESULT_SLC_DATA_CORRUPTED = -2002,
ACP_RESULT_MLC_DATA_CORRUPTED = -2003,
ACP_RESULT_USB_DATA_CORRUPTED = -2004,
ACP_RESULT_DATA_CORRUPTED = -2000,
ACP_RESULT_DEVICE = -2001,
ACP_RESULT_SLC_DATA_CORRUPTED = -2002,
ACP_RESULT_MLC_DATA_CORRUPTED = -2003,
ACP_RESULT_USB_DATA_CORRUPTED = -2004,
ACP_RESULT_MEDIA = -2100,
ACP_RESULT_MEDIA_NOT_READY = -2101,
ACP_RESULT_MEDIA_BROKEN = -2102,
ACP_RESULT_ODD_MEDIA_NOT_READY = -2103,
ACP_RESULT_ODD_MEDIA_BROKEN = -2104,
ACP_RESULT_USB_MEDIA_NOT_READY = -2105,
ACP_RESULT_USB_MEDIA_BROKEN = -2106,
ACP_RESULT_MEDIA_WRITE_PROTECTED = -2107,
ACP_RESULT_USB_WRITE_PROTECTED = -2108,
ACP_RESULT_MEDIA = -2100,
ACP_RESULT_MEDIA_NOT_READY = -2101,
ACP_RESULT_MEDIA_BROKEN = -2102,
ACP_RESULT_ODD_MEDIA_NOT_READY = -2103,
ACP_RESULT_ODD_MEDIA_BROKEN = -2104,
ACP_RESULT_USB_MEDIA_NOT_READY = -2105,
ACP_RESULT_USB_MEDIA_BROKEN = -2106,
ACP_RESULT_MEDIA_WRITE_PROTECTED = -2107,
ACP_RESULT_USB_WRITE_PROTECTED = -2108,
ACP_RESULT_MII = -2200,
ACP_RESULT_ENCRYPTION_ERROR = -2201,
ACP_RESULT_MII = -2200,
ACP_RESULT_ENCRYPTION_ERROR = -2201,
ACP_RESULT_GENERIC_ERROR = -4096,
ACP_RESULT_GENERIC_ERROR = -4096,
} ACPResult;
WUT_CHECK_SIZE(ACPResult, 0x4);

View File

@ -1,7 +1,7 @@
#pragma once
#include <wut.h>
#include <nn/acp/result.h>
#include <nn/acp/device.h>
#include <nn/acp/result.h>
/**
* \defgroup nn_acp_save Save
@ -18,16 +18,17 @@ extern "C" {
typedef uint64_t ACPTitleId;
typedef struct ACPSaveDirInfo ACPSaveDirInfo;
struct WUT_PACKED ACPSaveDirInfo {
WUT_UNKNOWN_BYTES(0x8);
uint32_t persistentId;
WUT_UNKNOWN_BYTES(0x14);
char path[0x40];
WUT_PADDING_BYTES(0x80 - 0x60);
struct WUT_PACKED ACPSaveDirInfo
{
WUT_UNKNOWN_BYTES(0x8);
uint32_t persistentId;
WUT_UNKNOWN_BYTES(0x14);
char path[0x40];
WUT_PADDING_BYTES(0x80 - 0x60);
};
WUT_CHECK_OFFSET(ACPSaveDirInfo, 0x08, persistentId);
WUT_CHECK_OFFSET(ACPSaveDirInfo, 0x20, path);
WUT_CHECK_SIZE(ACPSaveDirInfo,0x80);
WUT_CHECK_SIZE(ACPSaveDirInfo, 0x80);
ACPResult
ACPCreateSaveDir(uint32_t persistentId,

View File

@ -1,9 +1,9 @@
#pragma once
#include <wut.h>
#include <nn/acp/result.h>
#include <nn/acp/device.h>
#include <coreinit/mcp.h>
#include <nn/acp/device.h>
#include <nn/acp/result.h>
/**
* \defgroup nn_acp_title Title
@ -20,114 +20,115 @@ extern "C" {
typedef uint64_t ACPTitleId;
typedef struct ACPMetaXml ACPMetaXml;
struct WUT_PACKED ACPMetaXml {
uint64_t title_id;
uint64_t boss_id;
uint64_t os_version;
uint64_t app_size;
uint64_t common_save_size;
uint64_t account_save_size;
uint64_t common_boss_size;
uint64_t account_boss_size;
uint64_t join_game_mode_mask;
uint32_t version;
char product_code[32];
char content_platform[32];
char company_code[8];
char mastering_date[32];
uint32_t logo_type;
uint32_t app_launch_type;
uint32_t invisible_flag;
uint32_t no_managed_flag;
uint32_t no_event_log;
uint32_t no_icon_database;
uint32_t launching_flag;
uint32_t install_flag;
uint32_t closing_msg;
uint32_t title_version;
uint32_t group_id;
uint32_t save_no_rollback;
uint32_t bg_daemon_enable;
uint32_t join_game_id;
uint32_t olv_accesskey;
uint32_t wood_tin;
uint32_t e_manual;
uint32_t e_manual_version;
uint32_t region;
uint32_t pc_cero;
uint32_t pc_esrb;
uint32_t pc_bbfc;
uint32_t pc_usk;
uint32_t pc_pegi_gen;
uint32_t pc_pegi_fin;
uint32_t pc_pegi_prt;
uint32_t pc_pegi_bbfc;
uint32_t pc_cob;
uint32_t pc_grb;
uint32_t pc_cgsrr;
uint32_t pc_oflc;
uint32_t pc_reserved0;
uint32_t pc_reserved1;
uint32_t pc_reserved2;
uint32_t pc_reserved3;
uint32_t ext_dev_nunchaku;
uint32_t ext_dev_classic;
uint32_t ext_dev_urcc;
uint32_t ext_dev_board;
uint32_t ext_dev_usb_keyboard;
uint32_t ext_dev_etc;
char ext_dev_etc_name[512];
uint32_t eula_version;
uint32_t drc_use;
uint32_t network_use;
uint32_t online_account_use;
uint32_t direct_boot;
uint32_t reserved_flag0;
uint32_t reserved_flag1;
uint32_t reserved_flag2;
uint32_t reserved_flag3;
uint32_t reserved_flag4;
uint32_t reserved_flag5;
uint32_t reserved_flag6;
uint32_t reserved_flag7;
char longname_ja[512];
char longname_en[512];
char longname_fr[512];
char longname_de[512];
char longname_it[512];
char longname_es[512];
char longname_zhs[512];
char longname_ko[512];
char longname_nl[512];
char longname_pt[512];
char longname_ru[512];
char longname_zht[512];
char shortname_ja[256];
char shortname_en[256];
char shortname_fr[256];
char shortname_de[256];
char shortname_it[256];
char shortname_es[256];
char shortname_zhs[256];
char shortname_ko[256];
char shortname_nl[256];
char shortname_pt[256];
char shortname_ru[256];
char shortname_zht[256];
char publisher_ja[256];
char publisher_en[256];
char publisher_fr[256];
char publisher_de[256];
char publisher_it[256];
char publisher_es[256];
char publisher_zhs[256];
char publisher_ko[256];
char publisher_nl[256];
char publisher_pt[256];
char publisher_ru[256];
char publisher_zht[256];
uint32_t add_on_unique_id[32];
WUT_UNKNOWN_BYTES(52);
struct WUT_PACKED ACPMetaXml
{
uint64_t title_id;
uint64_t boss_id;
uint64_t os_version;
uint64_t app_size;
uint64_t common_save_size;
uint64_t account_save_size;
uint64_t common_boss_size;
uint64_t account_boss_size;
uint64_t join_game_mode_mask;
uint32_t version;
char product_code[32];
char content_platform[32];
char company_code[8];
char mastering_date[32];
uint32_t logo_type;
uint32_t app_launch_type;
uint32_t invisible_flag;
uint32_t no_managed_flag;
uint32_t no_event_log;
uint32_t no_icon_database;
uint32_t launching_flag;
uint32_t install_flag;
uint32_t closing_msg;
uint32_t title_version;
uint32_t group_id;
uint32_t save_no_rollback;
uint32_t bg_daemon_enable;
uint32_t join_game_id;
uint32_t olv_accesskey;
uint32_t wood_tin;
uint32_t e_manual;
uint32_t e_manual_version;
uint32_t region;
uint32_t pc_cero;
uint32_t pc_esrb;
uint32_t pc_bbfc;
uint32_t pc_usk;
uint32_t pc_pegi_gen;
uint32_t pc_pegi_fin;
uint32_t pc_pegi_prt;
uint32_t pc_pegi_bbfc;
uint32_t pc_cob;
uint32_t pc_grb;
uint32_t pc_cgsrr;
uint32_t pc_oflc;
uint32_t pc_reserved0;
uint32_t pc_reserved1;
uint32_t pc_reserved2;
uint32_t pc_reserved3;
uint32_t ext_dev_nunchaku;
uint32_t ext_dev_classic;
uint32_t ext_dev_urcc;
uint32_t ext_dev_board;
uint32_t ext_dev_usb_keyboard;
uint32_t ext_dev_etc;
char ext_dev_etc_name[512];
uint32_t eula_version;
uint32_t drc_use;
uint32_t network_use;
uint32_t online_account_use;
uint32_t direct_boot;
uint32_t reserved_flag0;
uint32_t reserved_flag1;
uint32_t reserved_flag2;
uint32_t reserved_flag3;
uint32_t reserved_flag4;
uint32_t reserved_flag5;
uint32_t reserved_flag6;
uint32_t reserved_flag7;
char longname_ja[512];
char longname_en[512];
char longname_fr[512];
char longname_de[512];
char longname_it[512];
char longname_es[512];
char longname_zhs[512];
char longname_ko[512];
char longname_nl[512];
char longname_pt[512];
char longname_ru[512];
char longname_zht[512];
char shortname_ja[256];
char shortname_en[256];
char shortname_fr[256];
char shortname_de[256];
char shortname_it[256];
char shortname_es[256];
char shortname_zhs[256];
char shortname_ko[256];
char shortname_nl[256];
char shortname_pt[256];
char shortname_ru[256];
char shortname_zht[256];
char publisher_ja[256];
char publisher_en[256];
char publisher_fr[256];
char publisher_de[256];
char publisher_it[256];
char publisher_es[256];
char publisher_zhs[256];
char publisher_ko[256];
char publisher_nl[256];
char publisher_pt[256];
char publisher_ru[256];
char publisher_zht[256];
uint32_t add_on_unique_id[32];
WUT_UNKNOWN_BYTES(52);
};
WUT_CHECK_OFFSET(ACPMetaXml, 0x00, title_id);
WUT_CHECK_OFFSET(ACPMetaXml, 0x08, boss_id);
@ -235,13 +236,13 @@ WUT_CHECK_OFFSET(ACPMetaXml, 0x308C, publisher_pt);
WUT_CHECK_OFFSET(ACPMetaXml, 0x318C, publisher_ru);
WUT_CHECK_OFFSET(ACPMetaXml, 0x328C, publisher_zht);
WUT_CHECK_OFFSET(ACPMetaXml, 0x338C, add_on_unique_id);
WUT_CHECK_SIZE(ACPMetaXml,0x3440);
WUT_CHECK_SIZE(ACPMetaXml, 0x3440);
ACPResult
ACPAssignTitlePatch(MCPTitleListType* titleInfo);
ACPAssignTitlePatch(MCPTitleListType *titleInfo);
ACPResult
ACPGetTitleIdOfMainApplication(ACPTitleId* titleId);
ACPGetTitleIdOfMainApplication(ACPTitleId *titleId);
/**
* Gets the MetaXML for a given title id
@ -264,8 +265,9 @@ RPLWRAP(ACPGetTitleMetaXml)(ACPTitleId titleId,
*/
static inline ACPResult
ACPGetTitleMetaXml(ACPTitleId titleId,
ACPMetaXml *metaXml) {
if ((uintptr_t) metaXml & 0x3F) {
ACPMetaXml *metaXml)
{
if ((uintptr_t)metaXml & 0x3F) {
return ACP_RESULT_INVALID_PARAMETER;
}
return RPLWRAP(ACPGetTitleMetaXml)(titleId, metaXml);
@ -289,8 +291,9 @@ RPLWRAP(ACPGetTitleSaveMetaXml)(uint64_t titleId,
static inline ACPResult
ACPGetTitleSaveMetaXml(ACPTitleId titleId,
ACPMetaXml *metaXml,
ACPDeviceType deviceType) {
if ((uintptr_t) metaXml & 0x3F) {
ACPDeviceType deviceType)
{
if ((uintptr_t)metaXml & 0x3F) {
return ACP_RESULT_INVALID_PARAMETER;
}
return RPLWRAP(ACPGetTitleSaveMetaXml)(titleId, metaXml, deviceType);
@ -303,13 +306,13 @@ ACPGetTitleMetaDir(ACPTitleId titleId,
ACPResult
ACPGetTitleMetaDirByDevice(ACPTitleId titleId,
char* directory,
char *directory,
size_t directoryLen,
ACPDeviceType deviceType);
ACPResult
ACPGetTitleMetaDirByTitleListType(MCPTitleListType titleListType,
char* directory,
char *directory,
size_t directoryLen);
#ifdef __cplusplus

View File

@ -1,7 +1,7 @@
#pragma once
#include <wut.h>
#include <nn/result.h>
#include <nn/ffl/miidata.h>
#include <nn/result.h>
/**
* \defgroup nn_act_client Accounts Client API
@ -12,25 +12,27 @@
#ifdef __cplusplus
namespace nn {
namespace nn
{
namespace act {
namespace act
{
//https://github.com/decaf-emu/decaf-emu/blob/master/src/libdecaf/src/nn/act/nn_act_types.h
using ACTLoadOption = uint32_t;
using SlotNo = uint8_t;
using LocalFriendCode = uint64_t;
using PersistentId = uint32_t;
using PrincipalId = uint32_t;
using SimpleAddressId = uint32_t;
using TransferrableId = uint64_t;
using ACTLoadOption = uint32_t;
using SlotNo = uint8_t;
using LocalFriendCode = uint64_t;
using PersistentId = uint32_t;
using PrincipalId = uint32_t;
using SimpleAddressId = uint32_t;
using TransferrableId = uint64_t;
static constexpr size_t AccountIdSize = 17;
static constexpr size_t DeviceHashSize = 8;
static constexpr size_t AccountIdSize = 17;
static constexpr size_t DeviceHashSize = 8;
static constexpr size_t NfsPasswordSize = 17;
static constexpr size_t MiiNameSize = 11;
static constexpr size_t UuidSize = 16;
static constexpr size_t MiiNameSize = 11;
static constexpr size_t UuidSize = 16;
//https://github.com/decaf-emu/decaf-emu/blob/master/src/libdecaf/src/cafe/libraries/nn_act/nn_act_client.cpp
@ -53,11 +55,11 @@ GetAccountIdEx(char outAccountId[AccountIdSize], SlotNo slot)
asm("GetAccountIdEx__Q2_2nn3actFPcUc");
nn::Result
GetBirthday(uint16_t* outYear, uint8_t* outMonth, uint8_t* outDay)
GetBirthday(uint16_t *outYear, uint8_t *outMonth, uint8_t *outDay)
asm("GetBirthday__Q2_2nn3actFPUsPUcT2");
nn::Result
GetBirthdayEx(uint16_t* outYear, uint8_t* outMonth, uint8_t* outDay, SlotNo slot)
GetBirthdayEx(uint16_t *outYear, uint8_t *outMonth, uint8_t *outDay, SlotNo slot)
asm("GetBirthdayEx__Q2_2nn3actFPUsPUcT2Uc");
SlotNo
@ -69,19 +71,19 @@ GetDeviceHash(char outHash[DeviceHashSize])
asm("GetDeviceHash__Q2_2nn3actFPUL");
nn::Result
LoadConsoleAccount(SlotNo slot, ACTLoadOption unk1, char const * unk2, bool unk3)
LoadConsoleAccount(SlotNo slot, ACTLoadOption unk1, char const *unk2, bool unk3)
asm("LoadConsoleAccount__Q2_2nn3actFUc13ACTLoadOptionPCcb");
nn::Result
GetMii(FFLStoreData* mii)
GetMii(FFLStoreData *mii)
asm("GetMii__Q2_2nn3actFP12FFLStoreData");
nn::Result
GetMiiEx(FFLStoreData* mii, SlotNo slot)
GetMiiEx(FFLStoreData *mii, SlotNo slot)
asm("GetMiiEx__Q2_2nn3actFP12FFLStoreDataUc");
nn::Result
GetMiiImageEx(size_t* outImageSize, void* buffer, size_t bufferSize, int unk, SlotNo slot)
GetMiiImageEx(size_t *outImageSize, void *buffer, size_t bufferSize, int unk, SlotNo slot)
asm("GetMiiImageEx__Q2_2nn3actFPUiPvUi15ACTMiiImageTypeUc");
nn::Result
@ -125,7 +127,7 @@ GetPrincipalId(void)
asm("GetPrincipalId__Q2_2nn3actFv");
nn::Result
GetPrincipalIdEx(PrincipalId* outId, SlotNo slot)
GetPrincipalIdEx(PrincipalId *outId, SlotNo slot)
asm("GetPrincipalIdEx__Q2_2nn3actFPUiUc");
SimpleAddressId
@ -133,7 +135,7 @@ GetSimpleAddressId(void)
asm("GetSimpleAddressId__Q2_2nn3actFv");
nn::Result
GetSimpleAddressId(SimpleAddressId* outId, SlotNo slot)
GetSimpleAddressId(SimpleAddressId *outId, SlotNo slot)
asm("GetSimpleAddressIdEx__Q2_2nn3actFPUiUc");
SlotNo
@ -145,7 +147,7 @@ GetTransferableId(uint32_t unk1)
asm("GetTransferableId__Q2_2nn3actFUi");
nn::Result
GetTransferableIdEx(TransferrableId* outId, uint32_t unk1, SlotNo slot)
GetTransferableIdEx(TransferrableId *outId, uint32_t unk1, SlotNo slot)
asm("GetTransferableIdEx__Q2_2nn3actFPULUiUc");
nn::Result

View File

@ -18,27 +18,27 @@ typedef struct CCRSysUpdateState CCRSysUpdateState;
typedef enum CCRSysPairingState
{
//! Pairing is complete / hasn't started yet
CCR_SYS_PAIRING_FINISHED = 0,
CCR_SYS_PAIRING_FINISHED = 0,
//! Pairing is in progress
CCR_SYS_PAIRING_IN_PROGRESS = 1,
CCR_SYS_PAIRING_IN_PROGRESS = 1,
//! Pairing timed out
CCR_SYS_PAIRING_TIMED_OUT = 2,
CCR_SYS_PAIRING_TIMED_OUT = 2,
} CCRSysPairingState;
typedef enum CCRSysInitBootFlag
{
CCR_SYS_BOOT_FLAG_NONE = 0,
//! Shows "Turn on the TV and Wii U Console.." text on next DRC boot
CCR_SYS_BOOT_FLAG_FIRST_BOOT = 1,
CCR_SYS_BOOT_FLAG_NONE = 0,
//! Shows "Turn on the TV and Wii U Console.." text on next DRC boot
CCR_SYS_BOOT_FLAG_FIRST_BOOT = 1,
} CCRSysInitBootFlag;
typedef enum CCRSysLCDMode
{
CCR_SYS_LCD_MODE_BRIGHTNESS_1 = 1,
CCR_SYS_LCD_MODE_BRIGHTNESS_2 = 2,
CCR_SYS_LCD_MODE_BRIGHTNESS_3 = 3,
CCR_SYS_LCD_MODE_BRIGHTNESS_4 = 4,
CCR_SYS_LCD_MODE_BRIGHTNESS_5 = 5,
CCR_SYS_LCD_MODE_BRIGHTNESS_1 = 1,
CCR_SYS_LCD_MODE_BRIGHTNESS_2 = 2,
CCR_SYS_LCD_MODE_BRIGHTNESS_3 = 3,
CCR_SYS_LCD_MODE_BRIGHTNESS_4 = 4,
CCR_SYS_LCD_MODE_BRIGHTNESS_5 = 5,
} CCRSysLCDMode;
struct CCRSysUpdateState

View File

@ -16,16 +16,16 @@ typedef struct CCRAppLaunchParam CCRAppLaunchParam;
struct WUT_PACKED CCRAppLaunchParam
{
uint64_t launchInfoDatabaseEntryId; // id used in the \link nn::sl::LaunchInfoDatabase
char uuid[16]; // account uuid
WUT_UNKNOWN_BYTES(0xE7);
uint64_t launchInfoDatabaseEntryId; // id used in the \link nn::sl::LaunchInfoDatabase
char uuid[16]; // account uuid
WUT_UNKNOWN_BYTES(0xE7);
};
WUT_CHECK_OFFSET(CCRAppLaunchParam, 0x00, launchInfoDatabaseEntryId);
WUT_CHECK_OFFSET(CCRAppLaunchParam, 0x08, uuid);
WUT_CHECK_SIZE(CCRAppLaunchParam, 0xFF);
void
CCRSysCaffeineGetAppLaunchParam(CCRAppLaunchParam * data);
CCRSysCaffeineGetAppLaunchParam(CCRAppLaunchParam *data);
uint32_t
CCRSysCaffeineBootCheck();

View File

@ -4,14 +4,18 @@
#ifdef __cplusplus
namespace nn {
namespace nn
{
namespace cfg {
namespace cfg
{
namespace CTR {
namespace CTR
{
//! Represents a console username, used in UDS and DLP
struct UserName {
struct UserName
{
char16_t name[12];
};
WUT_CHECK_SIZE(UserName, 0x18);

View File

@ -12,10 +12,11 @@
extern "C" {
#endif
typedef enum CmptScreenType {
CMPT_SCREEN_TYPE_TV = 1,
CMPT_SCREEN_TYPE_DRC,
CMPT_SCREEN_TYPE_BOTH,
typedef enum CmptScreenType
{
CMPT_SCREEN_TYPE_TV = 1,
CMPT_SCREEN_TYPE_DRC,
CMPT_SCREEN_TYPE_BOTH,
} CmptScreenType;
/**
@ -26,7 +27,7 @@ typedef enum CmptScreenType {
* 0 on success.
*/
int32_t
CMPTGetDataSize(uint32_t* outSize);
CMPTGetDataSize(uint32_t *outSize);
/**
* Launches the specified vWii title.
@ -35,7 +36,7 @@ CMPTGetDataSize(uint32_t* outSize);
* 0 on success.
*/
int32_t
CMPTLaunchTitle(void* dataBuffer, uint32_t bufferSize, uint64_t titleId);
CMPTLaunchTitle(void *dataBuffer, uint32_t bufferSize, uint64_t titleId);
/**
* Launches vWii System Menu.
@ -44,7 +45,7 @@ CMPTLaunchTitle(void* dataBuffer, uint32_t bufferSize, uint64_t titleId);
* 0 on success.
*/
int32_t
CMPTLaunchMenu(void* dataBuffer, uint32_t bufferSize);
CMPTLaunchMenu(void *dataBuffer, uint32_t bufferSize);
/**
* Launches vWii Data Management.
@ -53,7 +54,7 @@ CMPTLaunchMenu(void* dataBuffer, uint32_t bufferSize);
* 0 on success.
*/
int32_t
CMPTLaunchDataManager(void* dataBuffer, uint32_t bufferSize);
CMPTLaunchDataManager(void *dataBuffer, uint32_t bufferSize);
/**
* Sets the screen type.

View File

@ -1,8 +1,8 @@
#pragma once
#include <wut.h>
#include <nn/result.h>
#include <nn/cfg/CTR.h>
#include <nn/result.h>
#include <nn/uds/NodeInformation.h>
/**
@ -14,314 +14,340 @@
#ifdef __cplusplus
namespace nn {
namespace nn
{
namespace dlp {
namespace dlp
{
namespace Cafe {
enum PollStateChangeFlags : uint8_t {
//! Prevents \c PollStateChange from blocking if no new data is available
DLP_POLL_NONBLOCK = 1 << 0,
};
WUT_CHECK_SIZE(PollStateChangeFlags, 0x1);
namespace Cafe
{
enum PollStateChangeFlags : uint8_t
{
//! Prevents \c PollStateChange from blocking if no new data is available
DLP_POLL_NONBLOCK = 1 << 0,
};
WUT_CHECK_SIZE(PollStateChangeFlags, 0x1);
//! Represents the client state
enum class ClientState : uint32_t {
//! The client is accepted for the DLP child distribution
Accepted = 5,
//! The client is receiving the distributed DLP child
Receiving = 6,
//! The client has received the distribution and is ready to boot the DLP child
Ready = 7,
//! The client is connected to the session and pending to be accepted
Connecting = 64
};
WUT_CHECK_SIZE(ClientState, 0x4);
//! Represents the client state
enum class ClientState : uint32_t
{
//! The client is accepted for the DLP child distribution
Accepted = 5,
//! The client is receiving the distributed DLP child
Receiving = 6,
//! The client has received the distribution and is ready to boot the DLP child
Ready = 7,
//! The client is connected to the session and pending to be accepted
Connecting = 64
};
WUT_CHECK_SIZE(ClientState, 0x4);
//! Represents the server state. All values between 3 and 7 are considered internal state
enum class ServerState : uint32_t {
//! The server is not initialized
Uninitialized = 0,
//! The server is initialized but there is no active network
Idle = 1,
//! The server is open to new connections
Open = 2,
//! The server is distributing the DLP child to the clients
DistributingInternal = 7,
//! The server has distributed the DLP child
Distributed = 8,
//! The server has finished distribution and clients are booted into the DLP child
Finished = 9,
//! The server failed to distribute the DLP child to the clients
Failed = 10,
//! Public value for internal states
Distributing = 11
};
WUT_CHECK_SIZE(ServerState, 0x4);
//! Represents the server state. All values between 3 and 7 are considered internal state
enum class ServerState : uint32_t
{
//! The server is not initialized
Uninitialized = 0,
//! The server is initialized but there is no active network
Idle = 1,
//! The server is open to new connections
Open = 2,
//! The server is distributing the DLP child to the clients
DistributingInternal = 7,
//! The server has distributed the DLP child
Distributed = 8,
//! The server has finished distribution and clients are booted into the DLP child
Finished = 9,
//! The server failed to distribute the DLP child to the clients
Failed = 10,
//! Public value for internal states
Distributing = 11
};
WUT_CHECK_SIZE(ServerState, 0x4);
class Server {
public:
/**
* Accepts a client into the DLP child distribution.
*
* \param nodeId
* The node ID of the client.
*/
static nn::Result
AcceptClient(uint16_t nodeId) asm("AcceptClient__Q4_2nn3dlp4Cafe6ServerSFUs");
class Server
{
public:
/**
* Accepts a client into the DLP child distribution.
*
* \param nodeId
* The node ID of the client.
*/
static nn::Result
AcceptClient(uint16_t nodeId)
asm("AcceptClient__Q4_2nn3dlp4Cafe6ServerSFUs");
/**
* Closes the DLP session.
*/
static nn::Result
CloseSessions() asm("CloseSessions__Q4_2nn3dlp4Cafe6ServerSFv");
/**
* Closes the DLP session.
*/
static nn::Result
CloseSessions()
asm("CloseSessions__Q4_2nn3dlp4Cafe6ServerSFv");
/**
* Disconnects a client from the DLP session. This cannot be done after starting distribution.
*
* \param nodeId
* The node ID of the client.
*/
static nn::Result
DisconnectClient(uint16_t nodeId) asm("DisconnectClient__Q4_2nn3dlp4Cafe6ServerSFUs");
/**
* Disconnects a client from the DLP session. This cannot be done after starting distribution.
*
* \param nodeId
* The node ID of the client.
*/
static nn::Result
DisconnectClient(uint16_t nodeId)
asm("DisconnectClient__Q4_2nn3dlp4Cafe6ServerSFUs");
/**
* Finalizes DLP.
*/
static nn::Result
Finalize() asm("Finalize__Q4_2nn3dlp4Cafe6ServerSFv");
/**
* Finalizes DLP.
*/
static nn::Result
Finalize()
asm("Finalize__Q4_2nn3dlp4Cafe6ServerSFv");
/**
* Gets information about a client.
*
* \param clientInfo
* Pointer where the client information is written.
*
* \param nodeId
* Node ID of the client.
*/
static nn::Result
GetClientInfo(nn::uds::Cafe::NodeInformation *clientInfo, uint16_t nodeId) asm("GetClientInfo__Q4_2nn3dlp4Cafe6ServerSFPQ4_2nn3uds4Cafe15NodeInformationUs");
/**
* Gets information about a client.
*
* \param clientInfo
* Pointer where the client information is written.
*
* \param nodeId
* Node ID of the client.
*/
static nn::Result
GetClientInfo(nn::uds::Cafe::NodeInformation *clientInfo, uint16_t nodeId)
asm("GetClientInfo__Q4_2nn3dlp4Cafe6ServerSFPQ4_2nn3uds4Cafe15NodeInformationUs");
/**
* Gets a client state.
*
* \param state
* Pointer where the client state is filled in.
*
* \param nodeId
* Node ID of the client.
*/
static nn::Result
GetClientState(ClientState *state, uint16_t nodeId) asm("GetClientState__Q4_2nn3dlp4Cafe6ServerSFPQ4_2nn3dlp4Cafe11ClientStateUs");
/**
* Gets a client state.
*
* \param state
* Pointer where the client state is filled in.
*
* \param nodeId
* Node ID of the client.
*/
static nn::Result
GetClientState(ClientState *state, uint16_t nodeId)
asm("GetClientState__Q4_2nn3dlp4Cafe6ServerSFPQ4_2nn3dlp4Cafe11ClientStateUs");
/**
* Gets a client state.
*
* \param state
* Pointer where the client state is filled in.
*
* \param unitsTotal
* Pointer filled with the total number of units being distributed.
* Only filled when starting distribution and the DLP child isn't cached.
*
* \param unitsReceived
* Pointer filled with the number of units that the client has received.
* Only filled when starting distribution and the DLP child isn't cached.
*
* \param nodeId
* Node ID of the client.
*/
static nn::Result
GetClientState(ClientState *state,
uint32_t *unitsTotal,
uint32_t *unitsReceived,
uint16_t nodeId) asm("GetClientState__Q4_2nn3dlp4Cafe6ServerSFPQ4_2nn3dlp4Cafe11ClientStatePUiT2Us");
/**
* Gets a client state.
*
* \param state
* Pointer where the client state is filled in.
*
* \param unitsTotal
* Pointer filled with the total number of units being distributed.
* Only filled when starting distribution and the DLP child isn't cached.
*
* \param unitsReceived
* Pointer filled with the number of units that the client has received.
* Only filled when starting distribution and the DLP child isn't cached.
*
* \param nodeId
* Node ID of the client.
*/
static nn::Result
GetClientState(ClientState *state,
uint32_t *unitsTotal,
uint32_t *unitsReceived,
uint16_t nodeId)
asm("GetClientState__Q4_2nn3dlp4Cafe6ServerSFPQ4_2nn3dlp4Cafe11ClientStatePUiT2Us");
/**
* Gets the clients that are connected to the DLP session.
*
* \param receivedLength
* Pointer where the number of clients written to the array is stored.
*
* \param connectingClients
* Array where the node IDs of the clients are written.
*
* \param length
* Number of nodes that the \c connectingClients array can hold.
*/
static nn::Result
GetConnectingClients(uint16_t *receivedLength,
uint16_t *connectingClients,
uint16_t length) asm("GetConnectingClients__Q4_2nn3dlp4Cafe6ServerSFPUsT1Us");
/**
* Gets the clients that are connected to the DLP session.
*
* \param receivedLength
* Pointer where the number of clients written to the array is stored.
*
* \param connectingClients
* Array where the node IDs of the clients are written.
*
* \param length
* Number of nodes that the \c connectingClients array can hold.
*/
static nn::Result
GetConnectingClients(uint16_t *receivedLength,
uint16_t *connectingClients,
uint16_t length)
asm("GetConnectingClients__Q4_2nn3dlp4Cafe6ServerSFPUsT1Us");
/**
* Gets the server state. Internal states are filtered as \link Distributing \endlink .
*
* \param state
* Pointer where the server state is written.
*/
static nn::Result
GetState(ServerState *state) asm("GetState__Q4_2nn3dlp4Cafe6ServerSFPQ4_2nn3dlp4Cafe11ServerState");
/**
* Gets the server state. Internal states are filtered as \link Distributing \endlink .
*
* \param state
* Pointer where the server state is written.
*/
static nn::Result
GetState(ServerState *state)
asm("GetState__Q4_2nn3dlp4Cafe6ServerSFPQ4_2nn3dlp4Cafe11ServerState");
/**
* Initializes DLP.
*
* \param maxClientNum
* Maximum number of clients allowed for distribution. Must be between 1 and 8 inclusively.
*
* \param uniqueId
* Unique ID of the DLP child to be distributed.
*
* \param childIndex
* Index of the DLP child to be distributed.
*
* \param userName
* Username that will be displayed to the clients. If \c NULL, the Mii name will be used.
*/
static nn::Result
Initialize(uint8_t maxClientNum,
uint32_t uniqueId,
uint8_t childIndex,
nn::cfg::CTR::UserName *userName) asm("Initialize__Q4_2nn3dlp4Cafe6ServerSFUcUiT1PQ4_2nn3cfg3CTR8UserName");
/**
* Initializes DLP.
*
* \param maxClientNum
* Maximum number of clients allowed for distribution. Must be between 1 and 8 inclusively.
*
* \param uniqueId
* Unique ID of the DLP child to be distributed.
*
* \param childIndex
* Index of the DLP child to be distributed.
*
* \param userName
* Username that will be displayed to the clients. If \c NULL, the Mii name will be used.
*/
static nn::Result
Initialize(uint8_t maxClientNum,
uint32_t uniqueId,
uint8_t childIndex,
nn::cfg::CTR::UserName *userName)
asm("Initialize__Q4_2nn3dlp4Cafe6ServerSFUcUiT1PQ4_2nn3cfg3CTR8UserName");
/**
* Initializes DLP.
*
* \param dupNoticeNeed
* Unknown output bool, always false on the Wii U.
*
* \param maxClientNum
* Maximum number of clients allowed for distribution. Must be between 1 and 8 inclusively.
*
* \param uniqueId
* Unique ID of the DLP child to be distributed.
*
* \param childIndex
* Index of the DLP child to be distributed.
*
* \param userName
* Username that will be displayed to the clients. If \c NULL, the Mii name will be used.
*/
static nn::Result
Initialize(bool *dupNoticeNeed,
uint8_t maxClientNum,
uint32_t uniqueId,
uint8_t childIndex,
nn::cfg::CTR::UserName *userName) asm("Initialize__Q4_2nn3dlp4Cafe6ServerSFPbUcUiT2PQ4_2nn3cfg3CTR8UserName");
/**
* Initializes DLP.
*
* \param dupNoticeNeed
* Unknown output bool, always false on the Wii U.
*
* \param maxClientNum
* Maximum number of clients allowed for distribution. Must be between 1 and 8 inclusively.
*
* \param uniqueId
* Unique ID of the DLP child to be distributed.
*
* \param childIndex
* Index of the DLP child to be distributed.
*
* \param userName
* Username that will be displayed to the clients. If \c NULL, the Mii name will be used.
*/
static nn::Result
Initialize(bool *dupNoticeNeed,
uint8_t maxClientNum,
uint32_t uniqueId,
uint8_t childIndex,
nn::cfg::CTR::UserName *userName)
asm("Initialize__Q4_2nn3dlp4Cafe6ServerSFPbUcUiT2PQ4_2nn3cfg3CTR8UserName");
/**
* Opens the DLP session.
*
* \param isManualAccept
* If set, all clients must be accepted to allow them to join the session.
*
* \param channel
* The channel to be used for hosting the session. Use 0 to choose a channel automatically.
* Must be either 0, 1, 6 or 11.
*/
static nn::Result
OpenSessions(bool isManualAccept, uint8_t channel) asm("OpenSessions__Q4_2nn3dlp4Cafe6ServerSFbUc");
/**
* Opens the DLP session.
*
* \param isManualAccept
* If set, all clients must be accepted to allow them to join the session.
*
* \param channel
* The channel to be used for hosting the session. Use 0 to choose a channel automatically.
* Must be either 0, 1, 6 or 11.
*/
static nn::Result
OpenSessions(bool isManualAccept, uint8_t channel)
asm("OpenSessions__Q4_2nn3dlp4Cafe6ServerSFbUc");
/**
* Checks if the server state chas changed, and waits until it changes if specified.
*
* \param flags
* Flags, see \link PollStateChangeFlags \endlink for all flags.
*/
static nn::Result
PollStateChange(uint8_t flags) asm("PollStateChange__Q4_2nn3dlp4Cafe6ServerSFUc");
/**
* Checks if the server state chas changed, and waits until it changes if specified.
*
* \param flags
* Flags, see \link PollStateChangeFlags \endlink for all flags.
*/
static nn::Result
PollStateChange(uint8_t flags)
asm("PollStateChange__Q4_2nn3dlp4Cafe6ServerSFUc");
/**
* Reboots all clients into the Download Play child.
*
* \param passPhrase
* Passphrase to be used by the client when connecting to the main UDS network.
* If \c NULL, it will be set to an empty string.
*/
static nn::Result
RebootAllClients(const char *passPhrase) asm("RebootAllClients__Q4_2nn3dlp4Cafe6ServerSFPCc");
/**
* Reboots all clients into the Download Play child.
*
* \param passPhrase
* Passphrase to be used by the client when connecting to the main UDS network.
* If \c NULL, it will be set to an empty string.
*/
static nn::Result
RebootAllClients(const char *passPhrase)
asm("RebootAllClients__Q4_2nn3dlp4Cafe6ServerSFPCc");
/**
* Starts distribution of the Download Play child.
*/
static nn::Result
StartDistribution() asm("StartDistribute__Q4_2nn3dlp4Cafe6ServerSFv");
};
/**
* Starts distribution of the Download Play child.
*/
static nn::Result
StartDistribution()
asm("StartDistribute__Q4_2nn3dlp4Cafe6ServerSFv");
};
class ServerPrivate {
public:
/**
* Gets the server state. Internal states are not filtered.
*
* \param state
* Pointer where the server state is written.
*/
static nn::Result
GetInternalState(ServerState *state) asm("GetInternalState__Q4_2nn3dlp4Cafe13ServerPrivateSFPQ4_2nn3dlp4Cafe11ServerState");
class ServerPrivate
{
public:
/**
* Gets the server state. Internal states are not filtered.
*
* \param state
* Pointer where the server state is written.
*/
static nn::Result
GetInternalState(ServerState *state)
asm("GetInternalState__Q4_2nn3dlp4Cafe13ServerPrivateSFPQ4_2nn3dlp4Cafe11ServerState");
/**
* Initializes DLP.
*
* \param maxClientNum
* Maximum number of clients allowed for distribution. Must be between 1 and 8 inclusively.
*
* \param uniqueId
* Unique ID of the DLP child to be distributed.
*
* \param childIndex
* Index of the DLP child to be distributed.
*
* \param blockBufferSize
* Unknown parameter (default: 0xC000). Must be bigger than 0x4000 and smaller than 0x80000 inclusively.
*
* \param blockBufferNum
* Unknown parameter (default: 2). Must be a number between 2 and 4 inclusively.
*
* \param userName
* Username that will be displayed to the clients. If \c NULL, the Mii name will be used.
*/
static nn::Result
Initialize(uint8_t maxClientNum,
uint32_t uniqueId,
uint8_t childIndex,
uint32_t blockBufferSize,
uint32_t blockBufferNum,
nn::cfg::CTR::UserName *userName) asm("Initialize__Q4_2nn3dlp4Cafe13ServerPrivateSFUcUiT1N22PQ4_2nn3cfg3CTR8UserName");
/**
* Initializes DLP.
*
* \param maxClientNum
* Maximum number of clients allowed for distribution. Must be between 1 and 8 inclusively.
*
* \param uniqueId
* Unique ID of the DLP child to be distributed.
*
* \param childIndex
* Index of the DLP child to be distributed.
*
* \param blockBufferSize
* Unknown parameter (default: 0xC000). Must be bigger than 0x4000 and smaller than 0x80000 inclusively.
*
* \param blockBufferNum
* Unknown parameter (default: 2). Must be a number between 2 and 4 inclusively.
*
* \param userName
* Username that will be displayed to the clients. If \c NULL, the Mii name will be used.
*/
static nn::Result
Initialize(uint8_t maxClientNum,
uint32_t uniqueId,
uint8_t childIndex,
uint32_t blockBufferSize,
uint32_t blockBufferNum,
nn::cfg::CTR::UserName *userName)
asm("Initialize__Q4_2nn3dlp4Cafe13ServerPrivateSFUcUiT1N22PQ4_2nn3cfg3CTR8UserName");
/**
* Initializes DLP.
*
* \param dupNoticeNeed
* Unknown output bool, always false on the Wii U.
*
* \param maxClientNum
* Maximum number of clients allowed for distribution. Must be between 1 and 8 inclusively.
*
* \param uniqueId
* Unique ID of the DLP child to be distributed.
*
* \param childIndex
* Index of the DLP child to be distributed.
*
* \param blockBufferSize
* Unknown parameter (default: 0xC000). Must be bigger than 0x4000 and smaller than 0x80000 inclusively.
*
* \param blockBufferNum
* Unknown parameter (default: 2). Must be a number between 2 and 4 inclusively.
*
* \param userName
* Username that will be displayed to the clients. If \c NULL, the Mii name will be used.
*/
static nn::Result
Initialize(bool *dupNoticeNeed,
uint8_t maxClientNum,
uint32_t uniqueId,
uint8_t childIndex,
uint32_t blockBufferSize,
uint32_t blockBufferNum,
nn::cfg::CTR::UserName *userName) asm("Initialize__Q4_2nn3dlp4Cafe13ServerPrivateSFPbUcUiT2N23PQ4_2nn3cfg3CTR8UserName");
};
/**
* Initializes DLP.
*
* \param dupNoticeNeed
* Unknown output bool, always false on the Wii U.
*
* \param maxClientNum
* Maximum number of clients allowed for distribution. Must be between 1 and 8 inclusively.
*
* \param uniqueId
* Unique ID of the DLP child to be distributed.
*
* \param childIndex
* Index of the DLP child to be distributed.
*
* \param blockBufferSize
* Unknown parameter (default: 0xC000). Must be bigger than 0x4000 and smaller than 0x80000 inclusively.
*
* \param blockBufferNum
* Unknown parameter (default: 2). Must be a number between 2 and 4 inclusively.
*
* \param userName
* Username that will be displayed to the clients. If \c NULL, the Mii name will be used.
*/
static nn::Result
Initialize(bool *dupNoticeNeed,
uint8_t maxClientNum,
uint32_t uniqueId,
uint8_t childIndex,
uint32_t blockBufferSize,
uint32_t blockBufferNum,
nn::cfg::CTR::UserName *userName)
asm("Initialize__Q4_2nn3dlp4Cafe13ServerPrivateSFPbUcUiT2N23PQ4_2nn3cfg3CTR8UserName");
};
} // namespace Cafe
} // namespace dlp

View File

@ -3,8 +3,8 @@
#include <coreinit/filesystem.h>
#include <nn/result.h>
#include <padscore/kpad.h>
#include <vpad/input.h>
#include <string.h>
#include <vpad/input.h>
/**
* \defgroup nn_erreula_erreula Error Viewer
@ -24,19 +24,19 @@ namespace erreula
enum class ControllerType
{
WiiRemote0 = 0,
WiiRemote1 = 1,
WiiRemote2 = 2,
WiiRemote3 = 3,
DrcGamepad = 4,
WiiRemote0 = 0,
WiiRemote1 = 1,
WiiRemote2 = 2,
WiiRemote3 = 3,
DrcGamepad = 4,
};
enum class ErrorType
{
Code = 0,
Message = 1,
Message1Button = 2,
Message2Button = 3,
Code = 0,
Message = 1,
Message1Button = 2,
Message2Button = 3,
};
enum class LangType
@ -58,20 +58,20 @@ enum class LangType
enum class RegionType
{
Japan = 0,
USA = 1,
Europe = 2,
China = 3,
Korea = 4,
Taiwan = 5,
Japan = 0,
USA = 1,
Europe = 2,
China = 3,
Korea = 4,
Taiwan = 5,
};
enum class ResultType
{
None = 0,
None = 0,
//! The user exited the error viewer
Exited = 1,
Exited = 1,
// TODO: More result types
};
@ -79,28 +79,28 @@ enum class ResultType
enum class RenderTarget
{
//! Render only to TV
Tv = 0,
Tv = 0,
//! Render only to DRC gamepad
Drc = 1,
Drc = 1,
//! Render to both TV and Gamepad
Both = 2,
Both = 2,
};
enum class State
{
//! The error viewer is completely hidden.
Hidden = 0,
Hidden = 0,
//! The error viewer is drawing the fade-in animation.
FadeIn = 1,
FadeIn = 1,
//! The error viewer is done drawing the fade in animation and completely visible.
Visible = 2,
Visible = 2,
//! The error viewer is drawing the fade-out animation.
FadeOut = 3,
FadeOut = 3,
};
struct ErrorArg

View File

@ -14,13 +14,15 @@ extern "C" {
// https://github.com/decaf-emu/decaf-emu/blob/master/src/libdecaf/src/nn/ffl/nn_ffl_miidata.h
typedef enum FFLCreateIDFlags {
FFL_CREATE_ID_FLAG_WII_U = 0x1 | 0x4,
typedef enum FFLCreateIDFlags
{
FFL_CREATE_ID_FLAG_WII_U = 0x1 | 0x4,
FFL_CREATE_ID_FLAG_TEMPORARY = 0x2,
FFL_CREATE_ID_FLAG_NORMAL = 0x8,
FFL_CREATE_ID_FLAG_NORMAL = 0x8,
} FFLCreateIDFlags;
typedef struct WUT_PACKED FFLCreateID {
typedef struct WUT_PACKED FFLCreateID
{
FFLCreateIDFlags flags : 4;
uint32_t timestamp : 28;
@ -31,7 +33,8 @@ WUT_CHECK_OFFSET(FFLCreateID, 4, deviceHash);
WUT_CHECK_SIZE(FFLCreateID, 10);
//Note: the endian may be wrong here
typedef struct WUT_PACKED FFLiMiiDataCore {
typedef struct WUT_PACKED FFLiMiiDataCore
{
// 0x00
uint8_t birth_platform : 4;
uint8_t unk_0x00_b4 : 4;
@ -150,14 +153,16 @@ WUT_CHECK_OFFSET(FFLiMiiDataCore, 0x2F, fatness);
WUT_CHECK_OFFSET(FFLiMiiDataCore, 0x33, hair_type);
WUT_CHECK_SIZE(FFLiMiiDataCore, 0x48);
typedef struct WUT_PACKED FFLiMiiDataOfficial {
typedef struct WUT_PACKED FFLiMiiDataOfficial
{
FFLiMiiDataCore core;
uint16_t creator_name[10];
} FFLiMiiDataOfficial;
WUT_CHECK_OFFSET(FFLiMiiDataOfficial, 0x48, creator_name);
WUT_CHECK_SIZE(FFLiMiiDataOfficial, 0x5C);
typedef struct WUT_PACKED FFLStoreData {
typedef struct WUT_PACKED FFLStoreData
{
FFLiMiiDataOfficial data;
uint16_t unk_0x5C;
uint16_t checksum;

View File

@ -1,8 +1,8 @@
#pragma once
#include <wut.h>
#include <nn/result.h>
#include <nn/ffl/miidata.h>
#include <nn/act.h>
#include <nn/ffl/miidata.h>
#include <nn/result.h>
/**
* \defgroup nn_fp_fp Friends Presence
@ -22,36 +22,36 @@ namespace fp
enum NotificationType
{
NOTIFICATION_ONLINE = 1,
NOTIFICATION_OFFLINE = 2,
NOTIFICATION_PREFERENCE = 3,
NOTIFICATION_FRIEND_ONLINE = 4,
NOTIFICATION_FRIEND_OFFLINE = 5,
NOTIFICATION_FRIEND_PRESENCE = 6,
NOTIFICATION_FRIEND_MII = 7,
NOTIFICATION_FRIEND_PROFILE = 8,
NOTIFICATION_FRIEND_ADDED = 9,
NOTIFICATION_FRIEND_REMOVED = 10,
NOTIFICATION_MY_REQUEST_ADDED = 11,
NOTIFICATION_MY_REQUEST_REMOVED = 12,
NOTIFICATION_MY_REQUEST_UPDATED = 13,
NOTIFICATION_BLACKLIST_ADDED = 14,
NOTIFICATION_BLACKLIST_REMOVED = 15,
NOTIFICATION_BLACKLIST_UPDATED = 16,
NOTIFICATION_REQUEST_ADDED = 17,
NOTIFICATION_REQUEST_REMOVED = 18,
NOTIFICATION_ONLINE = 1,
NOTIFICATION_OFFLINE = 2,
NOTIFICATION_PREFERENCE = 3,
NOTIFICATION_FRIEND_ONLINE = 4,
NOTIFICATION_FRIEND_OFFLINE = 5,
NOTIFICATION_FRIEND_PRESENCE = 6,
NOTIFICATION_FRIEND_MII = 7,
NOTIFICATION_FRIEND_PROFILE = 8,
NOTIFICATION_FRIEND_ADDED = 9,
NOTIFICATION_FRIEND_REMOVED = 10,
NOTIFICATION_MY_REQUEST_ADDED = 11,
NOTIFICATION_MY_REQUEST_REMOVED = 12,
NOTIFICATION_MY_REQUEST_UPDATED = 13,
NOTIFICATION_BLACKLIST_ADDED = 14,
NOTIFICATION_BLACKLIST_REMOVED = 15,
NOTIFICATION_BLACKLIST_UPDATED = 16,
NOTIFICATION_REQUEST_ADDED = 17,
NOTIFICATION_REQUEST_REMOVED = 18,
//! TODO: find all notification types
//! TODO: find all notification types
};
struct DateTime
{
uint16_t year;
uint8_t month;
uint8_t day;
uint8_t hour; // hour-1
uint8_t minutes;
uint8_t seconds; // unsure
uint8_t milliseconds; // unsure
uint16_t year;
uint8_t month;
uint8_t day;
uint8_t hour; // hour-1
uint8_t minutes;
uint8_t seconds; // unsure
uint8_t milliseconds; // unsure
};
WUT_CHECK_OFFSET(DateTime, 0x00, year);
WUT_CHECK_OFFSET(DateTime, 0x02, month);
@ -64,19 +64,19 @@ WUT_CHECK_SIZE(DateTime, 0x08);
struct GameKey
{
uint64_t titleId;
uint16_t unk_0x8;
uint32_t unk_0xC;
uint64_t titleId;
uint16_t unk_0x8;
uint32_t unk_0xC;
};
WUT_CHECK_OFFSET(GameKey, 0x00, titleId);
WUT_CHECK_SIZE(GameKey, 0x10);
struct RecentPlayRecord
{
nn::act::PrincipalId principalId;
uint16_t unk_0x04;
char16_t inGameName[nn::act::AccountIdSize];
char16_t myMiiName[nn::act::AccountIdSize];
nn::act::PrincipalId principalId;
uint16_t unk_0x04;
char16_t inGameName[nn::act::AccountIdSize];
char16_t myMiiName[nn::act::AccountIdSize];
};
WUT_CHECK_OFFSET(RecentPlayRecord, 0x00, principalId);
WUT_CHECK_OFFSET(RecentPlayRecord, 0x04, unk_0x04);
@ -86,9 +86,9 @@ WUT_CHECK_SIZE(RecentPlayRecord, 0x4C);
struct RecentPlayRecordEx
{
RecentPlayRecord playRecord;
GameKey game;
DateTime date;
RecentPlayRecord playRecord;
GameKey game;
DateTime date;
};
WUT_CHECK_OFFSET(RecentPlayRecordEx, 0x00, playRecord);
WUT_CHECK_OFFSET(RecentPlayRecordEx, 0x50, game);
@ -97,23 +97,23 @@ WUT_CHECK_SIZE(RecentPlayRecordEx, 0x68);
struct Preference
{
bool unk_0x00;
bool unk_0x01;
bool unk_0x02;
WUT_PADDING_BYTES(1);
bool unk_0x00;
bool unk_0x01;
bool unk_0x02;
WUT_PADDING_BYTES(1);
};
WUT_CHECK_SIZE(Preference, 0x04);
struct GameMode
{
BOOL joinAvailabilityFlag;
uint32_t matchmakeSystemType; // 2 ??
uint32_t joinGameId;
uint32_t joinGameMode;
//! only set when joinAvailabilityFlag is TRUE
nn::act::PrincipalId ownerPrincipalId;
uint32_t joinGroupId;
uint8_t applicationArg[0x14];
BOOL joinAvailabilityFlag;
uint32_t matchmakeSystemType; // 2 ??
uint32_t joinGameId;
uint32_t joinGameMode;
//! only set when joinAvailabilityFlag is TRUE
nn::act::PrincipalId ownerPrincipalId;
uint32_t joinGroupId;
uint8_t applicationArg[0x14];
};
WUT_CHECK_OFFSET(GameMode, 0x00, joinAvailabilityFlag);
WUT_CHECK_OFFSET(GameMode, 0x04, matchmakeSystemType);
@ -126,10 +126,10 @@ WUT_CHECK_SIZE(GameMode, 0x2C);
struct Presence
{
GameMode gameMode;
uint8_t region;
uint8_t language;
uint8_t platform;
GameMode gameMode;
uint8_t region;
uint8_t language;
uint8_t platform;
};
WUT_CHECK_OFFSET(Presence, 0x00, gameMode);
WUT_CHECK_OFFSET(Presence, 0x2C, region);
@ -139,8 +139,8 @@ WUT_CHECK_SIZE(Presence, 0x30);
struct FriendPresence : Presence
{
bool isOnline;
bool isValid;
bool isOnline;
bool isValid;
};
WUT_CHECK_OFFSET(FriendPresence, 0x30, isOnline);
WUT_CHECK_OFFSET(FriendPresence, 0x31, isValid);
@ -148,7 +148,7 @@ WUT_CHECK_SIZE(FriendPresence, 0x34);
struct MyPresence : Presence
{
char16_t presenceText[64];
char16_t presenceText[64];
};
WUT_CHECK_OFFSET(MyPresence, 0x30, presenceText);
WUT_CHECK_SIZE(MyPresence, 0xB0);
@ -156,29 +156,29 @@ WUT_CHECK_SIZE(MyPresence, 0xB0);
//! TODO: find member types and names
struct BasicInfo
{
WUT_UNKNOWN_BYTES(0x68);
WUT_UNKNOWN_BYTES(0x68);
};
WUT_CHECK_SIZE(BasicInfo, 0x68);
//! TODO: find member types and names
struct BlackListedPrincipal
{
WUT_UNKNOWN_BYTES(0xB0);
WUT_UNKNOWN_BYTES(0xB0);
};
WUT_CHECK_SIZE(BlackListedPrincipal, 0xB0);
//! TODO: find member types and names
struct Profile
{
WUT_UNKNOWN_BYTES(4);
WUT_UNKNOWN_BYTES(4);
};
WUT_CHECK_SIZE(Profile, 0x04);
struct Comment
{
uint8_t unk_0x00; // probably bool isVisible
uint8_t unk_0x01; // probably bool
char16_t comment[17];
uint8_t unk_0x00; // probably bool isVisible
uint8_t unk_0x01; // probably bool
char16_t comment[17];
};
WUT_CHECK_OFFSET(Comment, 0x00, unk_0x00);
WUT_CHECK_OFFSET(Comment, 0x01, unk_0x01);
@ -187,487 +187,487 @@ WUT_CHECK_SIZE(Comment, 0x24);
struct FriendData
{
/*! TODO: find types and names */
WUT_UNKNOWN_BYTES(0x228);
/*! TODO: find types and names */
WUT_UNKNOWN_BYTES(0x228);
};
WUT_CHECK_SIZE(FriendData, 0x228);
struct GameModeDescription
{
/*! TODO: find size and member types/names */
/*! TODO: find size and member types/names */
};
struct FriendRequest
{
/* Notes:
/* Notes:
* MaxCharsOnKBD = char16_t[63]
* Real Buffer prolly = char16_t[64]
**/
WUT_UNKNOWN_BYTES(0x164);
WUT_UNKNOWN_BYTES(0x164);
};
WUT_CHECK_SIZE(FriendRequest, 0x164);
typedef void(*FPAsyncCallback)(nn::Result, void *);
typedef void(*NotificationHandlerFn)(nn::fp::NotificationType, nn::act::PrincipalId, void *);
typedef void (*FPAsyncCallback)(nn::Result, void *);
typedef void (*NotificationHandlerFn)(nn::fp::NotificationType, nn::act::PrincipalId, void *);
nn::Result
AcceptFriendRequestAsync(nn::act::LocalFriendCode/*unsure*/, FPAsyncCallback, void *)
asm("AcceptFriendRequestAsync__Q2_2nn2fpFULPFQ2_2nn6ResultPv_vPv");
AcceptFriendRequestAsync(nn::act::LocalFriendCode /*unsure*/, FPAsyncCallback, void *)
asm("AcceptFriendRequestAsync__Q2_2nn2fpFULPFQ2_2nn6ResultPv_vPv");
nn::Result
AddBlackListAsync(nn::act::PrincipalId, nn::fp::GameKey *, FPAsyncCallback, void *)
asm("AddBlackListAsync__Q2_2nn2fpFUiPCQ3_2nn2fp7GameKeyPFQ2_2nn6ResultPv_vPv");
asm("AddBlackListAsync__Q2_2nn2fpFUiPCQ3_2nn2fp7GameKeyPFQ2_2nn6ResultPv_vPv");
nn::Result
AddBlackListAsync(nn::act::PrincipalId, FPAsyncCallback, void *)
asm("AddBlackListAsync__Q2_2nn2fpFUiPFQ2_2nn6ResultPv_vPv");
asm("AddBlackListAsync__Q2_2nn2fpFUiPFQ2_2nn6ResultPv_vPv");
nn::Result
AddFriendAsync(char nnid[nn::act::AccountIdSize]/*unsure*/, FPAsyncCallback, void *)
asm("AddFriendAsync__Q2_2nn2fpFPCcPFQ2_2nn6ResultPv_vPv");
AddFriendAsync(char nnid[nn::act::AccountIdSize] /*unsure*/, FPAsyncCallback, void *)
asm("AddFriendAsync__Q2_2nn2fpFPCcPFQ2_2nn6ResultPv_vPv");
nn::Result
AddFriendAsync(nn::act::PrincipalId /*unsure*/, FPAsyncCallback, void *)
asm("AddFriendAsync__Q2_2nn2fpFUiPFQ2_2nn6ResultPv_vPv");
asm("AddFriendAsync__Q2_2nn2fpFUiPFQ2_2nn6ResultPv_vPv");
nn::Result
AddFriendRequestAsync(const nn::fp::RecentPlayRecordEx *, const char16_t *, FPAsyncCallback, void *)
asm("AddFriendRequestAsync__Q2_2nn2fpFPCQ3_2nn2fp18RecentPlayRecordExPCwPFQ2_2nn6ResultPv_vPv");
asm("AddFriendRequestAsync__Q2_2nn2fpFPCQ3_2nn2fp18RecentPlayRecordExPCwPFQ2_2nn6ResultPv_vPv");
nn::Result
AddFriendRequestAsync(unsigned int, unsigned char, const char16_t *, unsigned char, const char16_t *, FPAsyncCallback, void *)
asm("AddFriendRequestAsync__Q2_2nn2fpFUiUcPCwT2T3PFQ2_2nn6ResultPv_vPv");
asm("AddFriendRequestAsync__Q2_2nn2fpFUiUcPCwT2T3PFQ2_2nn6ResultPv_vPv");
nn::Result
AddFriendRequestNoTitleAsync(unsigned int, unsigned char, const char16_t *, unsigned char, const char16_t *, FPAsyncCallback, void *)
asm("AddFriendRequestNoTitleAsync__Q2_2nn2fpFUiUcPCwT2T3PFQ2_2nn6ResultPv_vPv");
asm("AddFriendRequestNoTitleAsync__Q2_2nn2fpFUiUcPCwT2T3PFQ2_2nn6ResultPv_vPv");
nn::Result
AddRecentPlayRecordEx(const nn::fp::RecentPlayRecordEx *, unsigned int)
asm("AddRecentPlayRecordEx__Q2_2nn2fpFPCQ3_2nn2fp18RecentPlayRecordExUi");
asm("AddRecentPlayRecordEx__Q2_2nn2fpFPCQ3_2nn2fp18RecentPlayRecordExUi");
nn::Result
AddRecentPlayRecord(const nn::fp::RecentPlayRecord *, unsigned int)
asm("AddRecentPlayRecord__Q2_2nn2fpFPCQ3_2nn2fp16RecentPlayRecordUi");
asm("AddRecentPlayRecord__Q2_2nn2fpFPCQ3_2nn2fp16RecentPlayRecordUi");
nn::Result
CancelFriendRequestAsync(nn::act::LocalFriendCode/*unsure*/, FPAsyncCallback, void *)
asm("CancelFriendRequestAsync__Q2_2nn2fpFULPFQ2_2nn6ResultPv_vPv");
CancelFriendRequestAsync(nn::act::LocalFriendCode /*unsure*/, FPAsyncCallback, void *)
asm("CancelFriendRequestAsync__Q2_2nn2fpFULPFQ2_2nn6ResultPv_vPv");
nn::Result
CheckSettingStatusAsync(unsigned char *, FPAsyncCallback, void *)
asm("CheckSettingStatusAsync__Q2_2nn2fpFPUcPFQ2_2nn6ResultPv_vPv");
asm("CheckSettingStatusAsync__Q2_2nn2fpFPUcPFQ2_2nn6ResultPv_vPv");
nn::Result
ClearLedEvent(void)
asm("ClearLedEvent__Q2_2nn2fpFv");
asm("ClearLedEvent__Q2_2nn2fpFv");
nn::Result
DeleteFriendFlagsAsync(const unsigned int *, unsigned int, unsigned int, FPAsyncCallback, void *)
asm("DeleteFriendFlagsAsync__Q2_2nn2fpFPCUiUiT2PFQ2_2nn6ResultPv_vPv");
asm("DeleteFriendFlagsAsync__Q2_2nn2fpFPCUiUiT2PFQ2_2nn6ResultPv_vPv");
nn::Result
DeleteFriendRequestAsync(nn::act::LocalFriendCode/*unsure*/, FPAsyncCallback, void *)
asm("DeleteFriendRequestAsync__Q2_2nn2fpFULPFQ2_2nn6ResultPv_vPv");
DeleteFriendRequestAsync(nn::act::LocalFriendCode /*unsure*/, FPAsyncCallback, void *)
asm("DeleteFriendRequestAsync__Q2_2nn2fpFULPFQ2_2nn6ResultPv_vPv");
nn::Result
DeleteRecentPlayRecordAll(void)
asm("DeleteRecentPlayRecordAll__Q2_2nn2fpFv");
asm("DeleteRecentPlayRecordAll__Q2_2nn2fpFv");
nn::Result
DeleteSaveDirectory(unsigned int)
asm("DeleteSaveDirectory__Q2_2nn2fpFUi");
asm("DeleteSaveDirectory__Q2_2nn2fpFUi");
nn::Result
DenyFriendRequestAsync(nn::act::LocalFriendCode/*unsure*/, FPAsyncCallback, void *)
asm("DenyFriendRequestAsync__Q2_2nn2fpFULPFQ2_2nn6ResultPv_vPv");
DenyFriendRequestAsync(nn::act::LocalFriendCode /*unsure*/, FPAsyncCallback, void *)
asm("DenyFriendRequestAsync__Q2_2nn2fpFULPFQ2_2nn6ResultPv_vPv");
nn::Result
DetectNatPropertiesAsync(unsigned char *, unsigned char *, unsigned int *, FPAsyncCallback, void *)
asm("DetectNatPropertiesAsync__Q2_2nn2fpFPUcT1PUiPFQ2_2nn6ResultPv_vPv");
asm("DetectNatPropertiesAsync__Q2_2nn2fpFPUcT1PUiPFQ2_2nn6ResultPv_vPv");
nn::Result
FinalizeAdmin(void)
asm("FinalizeAdmin__Q2_2nn2fpFv");
asm("FinalizeAdmin__Q2_2nn2fpFv");
nn::Result
Finalize(void)
asm("Finalize__Q2_2nn2fpFv");
asm("Finalize__Q2_2nn2fpFv");
nn::Result
GetBasicInfoAsync(nn::fp::BasicInfo *, unsigned int *, unsigned int, FPAsyncCallback, void *)
asm("GetBasicInfoAsync__Q2_2nn2fpFPQ3_2nn2fp9BasicInfoPCUiUiPFQ2_2nn6ResultPv_vPv");
asm("GetBasicInfoAsync__Q2_2nn2fpFPQ3_2nn2fp9BasicInfoPCUiUiPFQ2_2nn6ResultPv_vPv");
nn::Result
GetBlackListAccountId(char *outAccountIds, unsigned int *, unsigned int)
asm("GetBlackListAccountId__Q2_2nn2fpFPA17_cPCUiUi");
asm("GetBlackListAccountId__Q2_2nn2fpFPA17_cPCUiUi");
nn::Result
GetBlackListAdditionalTime(nn::fp::DateTime *, unsigned int *, unsigned int)
asm("GetBlackListAdditionalTime__Q2_2nn2fpFPQ3_2nn2fp8DateTimePCUiUi");
asm("GetBlackListAdditionalTime__Q2_2nn2fpFPQ3_2nn2fp8DateTimePCUiUi");
nn::Result
GetBlackListEx(nn::fp::BlackListedPrincipal *outBlackList, unsigned int *, unsigned int)
asm("GetBlackListEx__Q2_2nn2fpFPQ3_2nn2fp20BlackListedPrincipalPCUiUi");
asm("GetBlackListEx__Q2_2nn2fpFPQ3_2nn2fp20BlackListedPrincipalPCUiUi");
nn::Result
GetBlackList(nn::act::PrincipalId *outBlackListPrincipalBuffer, unsigned int *outBlackListPrincipalBufferSize, unsigned int/*unk*/, unsigned int maxReadCount)
asm("GetBlackList__Q2_2nn2fpFPUiT1UiT3");
GetBlackList(nn::act::PrincipalId *outBlackListPrincipalBuffer, unsigned int *outBlackListPrincipalBufferSize, unsigned int /*unk*/, unsigned int maxReadCount)
asm("GetBlackList__Q2_2nn2fpFPUiT1UiT3");
nn::Result
GetFriendAccountId(char *outAccountIdBuffer, nn::act::PrincipalId *principalBuffer, unsigned int accountIdBufferSize)
asm("GetFriendAccountId__Q2_2nn2fpFPA17_cPCUiUi");
asm("GetFriendAccountId__Q2_2nn2fpFPA17_cPCUiUi");
nn::Result
GetFriendApprovalTime(nn::fp::DateTime *outDateTime, unsigned int *, unsigned int)
asm("GetFriendApprovalTime__Q2_2nn2fpFPQ3_2nn2fp8DateTimePCUiUi");
asm("GetFriendApprovalTime__Q2_2nn2fpFPQ3_2nn2fp8DateTimePCUiUi");
nn::Result
GetFriendComment(nn::fp::Comment *outComment, unsigned int *, unsigned int)
asm("GetFriendComment__Q2_2nn2fpFPQ3_2nn2fp7CommentPCUiUi");
asm("GetFriendComment__Q2_2nn2fpFPQ3_2nn2fp7CommentPCUiUi");
nn::Result
GetFriendListAll(unsigned int *, unsigned int *, unsigned int, unsigned int)
asm("GetFriendListAll__Q2_2nn2fpFPUiT1UiT3");
asm("GetFriendListAll__Q2_2nn2fpFPUiT1UiT3");
nn::Result
GetFriendListEx(nn::fp::FriendData *outFriendData, nn::act::PrincipalId *principalBuffer, unsigned int count)
asm("GetFriendListEx__Q2_2nn2fpFPQ3_2nn2fp10FriendDataPCUiUi");
asm("GetFriendListEx__Q2_2nn2fpFPQ3_2nn2fp10FriendDataPCUiUi");
nn::Result
GetFriendList(nn::act::PrincipalId *outPrincipalBuffer, unsigned int *outPrincipalBufferReadCount, unsigned int unkn/*slotId maybe*/, unsigned int principalBufferSize)
asm("GetFriendList__Q2_2nn2fpFPUiT1UiT3");
GetFriendList(nn::act::PrincipalId *outPrincipalBuffer, unsigned int *outPrincipalBufferReadCount, unsigned int unkn /*slotId maybe*/, unsigned int principalBufferSize)
asm("GetFriendList__Q2_2nn2fpFPUiT1UiT3");
nn::Result
GetFriendMii(FFLStoreData *outMiiData, nn::act::PrincipalId *principalBuffer, unsigned int count)
asm("GetFriendMii__Q2_2nn2fpFP12FFLStoreDataPCUiUi");
asm("GetFriendMii__Q2_2nn2fpFP12FFLStoreDataPCUiUi");
nn::Result
GetFriendPlayingGame(nn::fp::GameKey *outGameKey, nn::fp::GameModeDescription *outGameModeDescription, nn::act::PrincipalId *principalBuffer, unsigned int maxReadCount)
asm("GetFriendPlayingGame__Q2_2nn2fpFPQ3_2nn2fp7GameKeyPQ3_2nn2fp19GameModeDescriptionPCUiUi");
asm("GetFriendPlayingGame__Q2_2nn2fpFPQ3_2nn2fp7GameKeyPQ3_2nn2fp19GameModeDescriptionPCUiUi");
nn::Result
GetFriendPresenceEx(nn::fp::FriendPresence *, nn::act::PrincipalId *principalBuffer, unsigned int maxReadCount)
asm("GetFriendPresenceEx__Q2_2nn2fpFPQ3_2nn2fp14FriendPresencePCUiUi");
asm("GetFriendPresenceEx__Q2_2nn2fpFPQ3_2nn2fp14FriendPresencePCUiUi");
nn::Result
GetFriendPresence(nn::fp::FriendPresence *, nn::act::PrincipalId *principalBuffer, unsigned int count)
asm("GetFriendPresence__Q2_2nn2fpFPQ3_2nn2fp14FriendPresencePCUiUi");
asm("GetFriendPresence__Q2_2nn2fpFPQ3_2nn2fp14FriendPresencePCUiUi");
nn::Result
GetFriendProfile(nn::fp::Profile *, nn::act::PrincipalId *principalBuffer, unsigned int readCount)
asm("GetFriendProfile__Q2_2nn2fpFPQ3_2nn2fp7ProfilePCUiUi");
asm("GetFriendProfile__Q2_2nn2fpFPQ3_2nn2fp7ProfilePCUiUi");
nn::Result
GetFriendRelationship(uint8_t *outRelationshipNum, nn::act::PrincipalId *principalBuffer, unsigned int count)
asm("GetFriendRelationship__Q2_2nn2fpFPUcPCUiUi");
asm("GetFriendRelationship__Q2_2nn2fpFPUcPCUiUi");
nn::Result
GetFriendRequestAccountId(char *outAccountIds, nn::act::PrincipalId *principalBuffer, unsigned int count)
asm("GetFriendRequestAccountId__Q2_2nn2fpFPA17_cPCUiUi");
asm("GetFriendRequestAccountId__Q2_2nn2fpFPA17_cPCUiUi");
nn::Result
GetFriendRequestListEx(nn::fp::FriendRequest *, nn::act::PrincipalId *principalBuffer, unsigned int count)
asm("GetFriendRequestListEx__Q2_2nn2fpFPQ3_2nn2fp13FriendRequestPCUiUi");
asm("GetFriendRequestListEx__Q2_2nn2fpFPQ3_2nn2fp13FriendRequestPCUiUi");
nn::Result
GetFriendRequestList(nn::act::PrincipalId *outBuffer, unsigned int *outReadCount, unsigned int/*unk*/, unsigned int count)
asm("GetFriendRequestList__Q2_2nn2fpFPUiT1UiT3");
GetFriendRequestList(nn::act::PrincipalId *outBuffer, unsigned int *outReadCount, unsigned int /*unk*/, unsigned int count)
asm("GetFriendRequestList__Q2_2nn2fpFPUiT1UiT3");
nn::Result
GetFriendRequestMessageId(unsigned long long *outMessageIds, unsigned int *, unsigned int)
asm("GetFriendRequestMessageId__Q2_2nn2fpFPULPCUiUi");
asm("GetFriendRequestMessageId__Q2_2nn2fpFPULPCUiUi");
nn::Result
GetFriendScreenName(char16_t outScreenName[nn::act::MiiNameSize], unsigned int *, unsigned int, bool, unsigned char *)
asm("GetFriendScreenName__Q2_2nn2fpFPA11_wPCUiUibPUc");
asm("GetFriendScreenName__Q2_2nn2fpFPA11_wPCUiUibPUc");
nn::Result
GetFriendSortTime(nn::fp::DateTime *, nn::act::PrincipalId *principalBuffer, unsigned int count)
asm("GetFriendSortTime__Q2_2nn2fpFPQ3_2nn2fp8DateTimePCUiUi");
asm("GetFriendSortTime__Q2_2nn2fpFPQ3_2nn2fp8DateTimePCUiUi");
nn::Result
GetLastLedEvent(unsigned int *, unsigned int *)
asm("GetLastLedEvent__Q2_2nn2fpFPUiT1");
asm("GetLastLedEvent__Q2_2nn2fpFPUiT1");
nn::Result
GetMyAccountId(char *outAccountId)
asm("GetMyAccountId__Q2_2nn2fpFPc");
asm("GetMyAccountId__Q2_2nn2fpFPc");
nn::Result
GetMyComment(nn::fp::Comment *outComment)
asm("GetMyComment__Q2_2nn2fpFPQ3_2nn2fp7Comment");
asm("GetMyComment__Q2_2nn2fpFPQ3_2nn2fp7Comment");
nn::Result
GetMyMii(FFLStoreData *outMiiData)
asm("GetMyMii__Q2_2nn2fpFP12FFLStoreData");
asm("GetMyMii__Q2_2nn2fpFP12FFLStoreData");
nn::Result
GetMyPlayingGame(nn::fp::GameKey *outPlayingGmae)
asm("GetMyPlayingGame__Q2_2nn2fpFPQ3_2nn2fp7GameKey");
asm("GetMyPlayingGame__Q2_2nn2fpFPQ3_2nn2fp7GameKey");
nn::Result
GetMyPreference(nn::fp::Preference *outPreference)
asm("GetMyPreference__Q2_2nn2fpFPQ3_2nn2fp10Preference");
asm("GetMyPreference__Q2_2nn2fpFPQ3_2nn2fp10Preference");
nn::Result
GetMyPresence(nn::fp::MyPresence *outMyPresence)
asm("GetMyPresence__Q2_2nn2fpFPQ3_2nn2fp10MyPresence");
asm("GetMyPresence__Q2_2nn2fpFPQ3_2nn2fp10MyPresence");
nn::act::PrincipalId
GetMyPrincipalId(void)
asm("GetMyPrincipalId__Q2_2nn2fpFv");
asm("GetMyPrincipalId__Q2_2nn2fpFv");
nn::Result
GetMyProfile(nn::fp::Profile *outProfile)
asm("GetMyProfile__Q2_2nn2fpFPQ3_2nn2fp7Profile");
asm("GetMyProfile__Q2_2nn2fpFPQ3_2nn2fp7Profile");
nn::Result
GetMyScreenName(char16_t *outScreenName)
asm("GetMyScreenName__Q2_2nn2fpFPw");
asm("GetMyScreenName__Q2_2nn2fpFPw");
nn::Result
GetRecentPlayRecord(nn::fp::RecentPlayRecordEx *outPlayRecordBuffer, unsigned int *outPlayRecordBufferSize, unsigned int, unsigned int maxReadCount)
asm("GetRecentPlayRecord__Q2_2nn2fpFPQ3_2nn2fp18RecentPlayRecordExPUiUiT3");
asm("GetRecentPlayRecord__Q2_2nn2fpFPQ3_2nn2fp18RecentPlayRecordExPUiUiT3");
nn::Result
GetRequestBlockSettingAsync(unsigned char *, unsigned int *, unsigned int, FPAsyncCallback, void *)
asm("GetRequestBlockSettingAsync__Q2_2nn2fpFPUcPCUiUiPFQ2_2nn6ResultPv_vPv");
asm("GetRequestBlockSettingAsync__Q2_2nn2fpFPUcPCUiUiPFQ2_2nn6ResultPv_vPv");
bool
HasLoggedIn(void)
asm("HasLoggedIn__Q2_2nn2fpFv");
asm("HasLoggedIn__Q2_2nn2fpFv");
nn::Result
InitializeAdmin(void)
asm("InitializeAdmin__Q2_2nn2fpFv");
asm("InitializeAdmin__Q2_2nn2fpFv");
nn::Result
Initialize(void)
asm("Initialize__Q2_2nn2fpFv");
asm("Initialize__Q2_2nn2fpFv");
bool
IsFriendRequestAllowed(void)
asm("IsFriendRequestAllowed__Q2_2nn2fpFv");
asm("IsFriendRequestAllowed__Q2_2nn2fpFv");
bool
IsInitializedAdmin(void)
asm("IsInitializedAdmin__Q2_2nn2fpFv");
asm("IsInitializedAdmin__Q2_2nn2fpFv");
bool
IsInitialized(void)
asm("IsInitialized__Q2_2nn2fpFv");
asm("IsInitialized__Q2_2nn2fpFv");
bool
IsInvitation(nn::fp::GameMode *, nn::act::PrincipalId myPrincipalId, unsigned int/*unk*/)
asm("IsInvitation__Q2_2nn2fpFPCQ3_2nn2fp8GameModeUiT2");
IsInvitation(nn::fp::GameMode *, nn::act::PrincipalId myPrincipalId, unsigned int /*unk*/)
asm("IsInvitation__Q2_2nn2fpFPCQ3_2nn2fp8GameModeUiT2");
bool
IsJoinableForFriendListViewer(nn::fp::FriendPresence *, unsigned int, unsigned long long)
asm("IsJoinableForFriendListViewer__Q2_2nn2fpFPCQ3_2nn2fp14FriendPresenceUiUL");
asm("IsJoinableForFriendListViewer__Q2_2nn2fpFPCQ3_2nn2fp14FriendPresenceUiUL");
bool
IsJoinableForFriendListViewer(nn::fp::Presence *, unsigned int, unsigned long long)
asm("IsJoinableForFriendListViewer__Q2_2nn2fpFPCQ3_2nn2fp8PresenceUiUL");
asm("IsJoinableForFriendListViewer__Q2_2nn2fpFPCQ3_2nn2fp8PresenceUiUL");
bool
IsJoinable(nn::fp::FriendPresence *, unsigned long long)
asm("IsJoinable__Q2_2nn2fpFPCQ3_2nn2fp14FriendPresenceUL");
asm("IsJoinable__Q2_2nn2fpFPCQ3_2nn2fp14FriendPresenceUL");
bool
IsOnline(void)
asm("IsOnline__Q2_2nn2fpFv");
asm("IsOnline__Q2_2nn2fpFv");
bool
IsPreferenceValid(void)
asm("IsPreferenceValid__Q2_2nn2fpFv");
asm("IsPreferenceValid__Q2_2nn2fpFv");
bool
IsRecentPlayRecordCorrupted(void)
asm("IsRecentPlayRecordCorrupted__Q2_2nn2fpFv");
asm("IsRecentPlayRecordCorrupted__Q2_2nn2fpFv");
bool
IsRequestBlockForced(void)
asm("IsRequestBlockForced__Q2_2nn2fpFv");
asm("IsRequestBlockForced__Q2_2nn2fpFv");
nn::Result
LoginAsync(FPAsyncCallback, void *)
asm("LoginAsync__Q2_2nn2fpFPFQ2_2nn6ResultPv_vPv");
asm("LoginAsync__Q2_2nn2fpFPFQ2_2nn6ResultPv_vPv");
nn::Result
Logout(void)
asm("Logout__Q2_2nn2fpFv");
asm("Logout__Q2_2nn2fpFv");
nn::Result
MarkFriendRequestsAsReceivedAsync(unsigned long long *, unsigned int, FPAsyncCallback, void *)
asm("MarkFriendRequestsAsReceivedAsync__Q2_2nn2fpFPCULUiPFQ2_2nn6ResultPv_vPv");
asm("MarkFriendRequestsAsReceivedAsync__Q2_2nn2fpFPCULUiPFQ2_2nn6ResultPv_vPv");
nn::Result
RegisterAccountAsync(FPAsyncCallback, void *)
asm("RegisterAccountAsync__Q2_2nn2fpFPFQ2_2nn6ResultPv_vPv");
asm("RegisterAccountAsync__Q2_2nn2fpFPFQ2_2nn6ResultPv_vPv");
nn::Result
RemoveBlackListAsync(unsigned int, FPAsyncCallback, void *)
asm("RemoveBlackListAsync__Q2_2nn2fpFUiPFQ2_2nn6ResultPv_vPv");
asm("RemoveBlackListAsync__Q2_2nn2fpFUiPFQ2_2nn6ResultPv_vPv");
nn::Result
RemoveFriendAsync(unsigned int, FPAsyncCallback, void *)
asm("RemoveFriendAsync__Q2_2nn2fpFUiPFQ2_2nn6ResultPv_vPv");
asm("RemoveFriendAsync__Q2_2nn2fpFUiPFQ2_2nn6ResultPv_vPv");
uint32_t
ResultToErrorCode(nn::Result)
asm("ResultToErrorCode__Q2_2nn2fpFQ2_2nn6Result");
ResultToErrorCode(nn::Result)
asm("ResultToErrorCode__Q2_2nn2fpFQ2_2nn6Result");
nn::Result
SetInvitationParameter(nn::fp::GameMode *, unsigned int *, unsigned int, bool)
asm("SetInvitationParameter__Q2_2nn2fpFPQ3_2nn2fp8GameModePCUiUib");
asm("SetInvitationParameter__Q2_2nn2fpFPQ3_2nn2fp8GameModePCUiUib");
nn::Result
SetLedEventMask(uint32_t)
asm("SetLedEventMask__Q2_2nn2fpFUi");
SetLedEventMask(uint32_t)
asm("SetLedEventMask__Q2_2nn2fpFUi");
nn::Result
SetNotificationHandler(uint32_t /*notificationFlags = 1 << NotificationType */, NotificationHandlerFn, void *)
asm("SetNotificationHandler__Q2_2nn2fpFUiPFQ3_2nn2fp16NotificationTypeUiPv_vPv");
asm("SetNotificationHandler__Q2_2nn2fpFUiPFQ3_2nn2fp16NotificationTypeUiPv_vPv");
nn::Result
UnlockParentalControlTemporarily(const char pinCode[5])
asm("UnlockParentalControlTemporarily__Q2_2nn2fpFPCc");
asm("UnlockParentalControlTemporarily__Q2_2nn2fpFPCc");
nn::Result
UpdateCommentAsync(const char16_t *, FPAsyncCallback, void *)
asm("UpdateCommentAsync__Q2_2nn2fpFPCwPFQ2_2nn6ResultPv_vPv");
asm("UpdateCommentAsync__Q2_2nn2fpFPCwPFQ2_2nn6ResultPv_vPv");
nn::Result
UpdateGameModeDescription(const char16_t *description)
asm("UpdateGameModeDescription__Q2_2nn2fpFPCw");
asm("UpdateGameModeDescription__Q2_2nn2fpFPCw");
nn::Result
UpdateGameModeEx(nn::fp::GameMode *, const char16_t *)
asm("UpdateGameModeEx__Q2_2nn2fpFPCQ3_2nn2fp8GameModePCw");
asm("UpdateGameModeEx__Q2_2nn2fpFPCQ3_2nn2fp8GameModePCw");
nn::Result
UpdateGameModeForOverlayApplication(nn::fp::GameMode *, const char16_t *)
asm("UpdateGameModeForOverlayApplication__Q2_2nn2fpFPCQ3_2nn2fp8GameModePCw");
asm("UpdateGameModeForOverlayApplication__Q2_2nn2fpFPCQ3_2nn2fp8GameModePCw");
nn::Result
UpdateGameMode(nn::fp::GameMode *, const char16_t *)
asm("UpdateGameMode__Q2_2nn2fpFPCQ3_2nn2fp8GameModePCw");
asm("UpdateGameMode__Q2_2nn2fpFPCQ3_2nn2fp8GameModePCw");
nn::Result
UpdateGameMode(nn::fp::GameMode *, const char16_t *, unsigned int)
asm("UpdateGameMode__Q2_2nn2fpFPCQ3_2nn2fp8GameModePCwUi");
asm("UpdateGameMode__Q2_2nn2fpFPCQ3_2nn2fp8GameModePCwUi");
nn::Result
UpdateMiiAsync(FFLStoreData *, char16_t *, FPAsyncCallback, void *)
asm("UpdateMiiAsync__Q2_2nn2fpFPC12FFLStoreDataPCwPFQ2_2nn6ResultPv_vPv");
asm("UpdateMiiAsync__Q2_2nn2fpFPC12FFLStoreDataPCwPFQ2_2nn6ResultPv_vPv");
nn::Result
UpdateMiiAsync(FFLStoreData *miiData, FPAsyncCallback, void *)
asm("UpdateMiiAsync__Q2_2nn2fpFPC12FFLStoreDataPFQ2_2nn6ResultPv_vPv");
asm("UpdateMiiAsync__Q2_2nn2fpFPC12FFLStoreDataPFQ2_2nn6ResultPv_vPv");
nn::Result
UpdatePlayingGame(nn::fp::GameKey *, unsigned int)
asm("UpdatePlayingGame__Q2_2nn2fpFPCQ3_2nn2fp7GameKeyUi");
asm("UpdatePlayingGame__Q2_2nn2fpFPCQ3_2nn2fp7GameKeyUi");
nn::Result
UpdatePlayingOverlayApplication(nn::fp::GameKey *, unsigned int)
asm("UpdatePlayingOverlayApplication__Q2_2nn2fpFPCQ3_2nn2fp7GameKeyUi");
asm("UpdatePlayingOverlayApplication__Q2_2nn2fpFPCQ3_2nn2fp7GameKeyUi");
nn::Result
UpdatePreferenceAsync(nn::fp::Preference *, FPAsyncCallback, void *)
asm("UpdatePreferenceAsync__Q2_2nn2fpFPCQ3_2nn2fp10PreferencePFQ2_2nn6ResultPv_vPv");
asm("UpdatePreferenceAsync__Q2_2nn2fpFPCQ3_2nn2fp10PreferencePFQ2_2nn6ResultPv_vPv");
} // namespace fp
} // namespace nn

View File

@ -13,17 +13,17 @@ extern "C" {
#endif
//! The minimum value of the stick axis
#define HPAD_STICK_AXIS_MIN -56
#define HPAD_STICK_AXIS_MIN -56
//! The maximum value of the stick axis
#define HPAD_STICK_AXIS_MAX 56
#define HPAD_STICK_AXIS_MAX 56
//! The minimum value of the substick axis
#define HPAD_SUBSTICK_AXIS_MIN -44
//! The maximum value of the substick axis
#define HPAD_SUBSTICK_AXIS_MAX 44
#define HPAD_SUBSTICK_AXIS_MAX 44
//! The minimum value of the trigger
#define HPAD_TRIGGER_MIN 0
#define HPAD_TRIGGER_MIN 0
//! The maximum value of the trigger
#define HPAD_TRIGGER_MAX 150
#define HPAD_TRIGGER_MAX 150
typedef struct HPADStatus HPADStatus;
typedef struct HPADGGGGStatus HPADGGGGStatus;
@ -50,18 +50,18 @@ typedef enum HPADGGGGChan
typedef enum HPADButtons
{
HPAD_BUTTON_A = 0x0001,
HPAD_BUTTON_B = 0x0002,
HPAD_BUTTON_X = 0x0004,
HPAD_BUTTON_Y = 0x0008,
HPAD_BUTTON_LEFT = 0x0010,
HPAD_BUTTON_RIGHT = 0x0020,
HPAD_BUTTON_DOWN = 0x0040,
HPAD_BUTTON_UP = 0x0080,
HPAD_BUTTON_START = 0x0100,
HPAD_TRIGGER_Z = 0x0200,
HPAD_TRIGGER_R = 0x0400,
HPAD_TRIGGER_L = 0x0800,
HPAD_BUTTON_A = 0x0001,
HPAD_BUTTON_B = 0x0002,
HPAD_BUTTON_X = 0x0004,
HPAD_BUTTON_Y = 0x0008,
HPAD_BUTTON_LEFT = 0x0010,
HPAD_BUTTON_RIGHT = 0x0020,
HPAD_BUTTON_DOWN = 0x0040,
HPAD_BUTTON_UP = 0x0080,
HPAD_BUTTON_START = 0x0100,
HPAD_TRIGGER_Z = 0x0200,
HPAD_TRIGGER_R = 0x0400,
HPAD_TRIGGER_L = 0x0800,
HPAD_STICK_EMULATION_LEFT = 0x00001000,
HPAD_STICK_EMULATION_RIGHT = 0x00002000,

View File

@ -4,5 +4,5 @@
* \defgroup nn_idb nn_idb
*/
#include <nn/idb/idb_cpp.h>
#include <nn/idb/IDBReader.h>
#include <nn/idb/idb_cpp.h>

View File

@ -5,5 +5,5 @@
* Nintendo Figurine (amiibo) Platform library.
*/
#include <nn/nfp/nfp_cpp.h>
#include <nn/nfp/amiibo_settings_cpp.h>
#include <nn/nfp/nfp_cpp.h>

View File

@ -12,18 +12,20 @@
#ifdef __cplusplus
namespace nn {
namespace nn
{
namespace nfp {
namespace nfp
{
enum class AmiiboSettingsMode : uint32_t
{
//! Open the Mii and Name register menu
Register = 0,
Register = 0,
//! Open the "Delete Game Data" menu
DeleteGameData = 1,
DeleteGameData = 1,
//! Open the "Restore" menu
Restore = 2,
Restore = 2,
};
WUT_CHECK_SIZE(AmiiboSettingsMode, 0x4);

View File

@ -1,9 +1,9 @@
#pragma once
#include <wut.h>
#include <nn/result.h>
#include <nn/ffl/miidata.h>
#include <coreinit/event.h>
#include <nfc/nfc.h>
#include <nn/ffl/miidata.h>
#include <nn/result.h>
/**
* \defgroup nn_nfp
@ -14,61 +14,63 @@
#ifdef __cplusplus
namespace nn {
namespace nn
{
namespace nfp {
namespace nfp
{
//! NN_NFP result descriptions for \link nn::Result::GetDescription \endlink.
enum ResultDescription
enum ResultDescription
{
// Usage results
RESULT_OUT_OF_RANGE = 0x03700,
RESULT_INVALID_PARAM = 0x03780,
RESULT_INVALID_ALIGNMENT = 0x03800,
RESULT_OUT_OF_RANGE = 0x03700,
RESULT_INVALID_PARAM = 0x03780,
RESULT_INVALID_ALIGNMENT = 0x03800,
// Status results
RESULT_INVALID_STATE = 0x06400,
RESULT_INVALID_TAG = 0x0c800,
RESULT_INVALID_TAG_INFO = 0x0ca80,
RESULT_NO_BACKUPENTRY = 0x0e580,
RESULT_NO_REGISTER_INFO = 0x10900,
RESULT_APP_AREA_MISSING = 0x10400,
RESULT_APP_AREA_TAGID_MISMATCH = 0x11d00,
RESULT_APP_AREA_ALREADY_EXISTS = 0x10e00,
RESULT_APP_AREA_ACCESS_ID_MISMATCH = 0x11300,
RESULT_NO_BACKUP_SAVEDATA = 0x38880,
RESULT_SYSTEM_ERROR = 0x3e880,
RESULT_INVALID_STATE = 0x06400,
RESULT_INVALID_TAG = 0x0c800,
RESULT_INVALID_TAG_INFO = 0x0ca80,
RESULT_NO_BACKUPENTRY = 0x0e580,
RESULT_NO_REGISTER_INFO = 0x10900,
RESULT_APP_AREA_MISSING = 0x10400,
RESULT_APP_AREA_TAGID_MISMATCH = 0x11d00,
RESULT_APP_AREA_ALREADY_EXISTS = 0x10e00,
RESULT_APP_AREA_ACCESS_ID_MISMATCH = 0x11300,
RESULT_NO_BACKUP_SAVEDATA = 0x38880,
RESULT_SYSTEM_ERROR = 0x3e880,
// Fatal results
RESULT_FATAL = 0x5db00,
RESULT_FATAL = 0x5db00,
};
enum class NfpState : uint32_t
{
//! nn_nfp is uninitialized
Uninitialized = 0,
Uninitialized = 0,
//! nn_nfp has been initialized
Initialized = 1,
Initialized = 1,
//! Searching for a tag
Searching = 2,
Searching = 2,
//! A tag has been found
Found = 3,
Found = 3,
//! Tag was removed
Removed = 4,
Removed = 4,
//! The tag is mounted
Mounted = 5,
Unknown6 = 6,
Mounted = 5,
Unknown6 = 6,
//! The tag was mounted in ROM mode
MountedROM = 7,
MountedROM = 7,
};
WUT_CHECK_SIZE(NfpState, 0x4);
enum class AdminFlags : uint8_t
{
//! The tag was registered and contains register info
IsRegistered = 1 << 0,
//! The tag was registered and contains register info
IsRegistered = 1 << 0,
//! The tag contains an application area
HasApplicationData = 1 << 1,
HasApplicationData = 1 << 1,
};
WUT_CHECK_SIZE(AdminFlags, 0x1);
@ -101,7 +103,7 @@ struct ApplicationAreaCreateInfo
//! The access ID with which the area should be created
uint32_t accessID;
//! The initial data to write to the area
void* data;
void *data;
//! The size of the data
uint32_t size;
//! reserved bytes, must be set to 0

View File

@ -10,19 +10,21 @@
#ifdef __cplusplus
namespace nn {
namespace nn
{
namespace pdm {
namespace pdm
{
//! Flags for PlayDiary
typedef enum PlayDiaryFlags : uint16_t
{
PLAYDIARY_FLAG_DEFAULT = 0x0000,
PLAYDIARY_FLAG_DEFAULT = 0x0000,
//! Set when the user played in Wii Mode
//! Note: Title Id should be ffff ffff ffff ffff when set
PLAYDIARY_FLAG_PLAYED_IN_WII_MODE = 0x0100,
PLAYDIARY_FLAG_UNKNOWN_0A00 = 0x0a00
PLAYDIARY_FLAG_PLAYED_IN_WII_MODE = 0x0100,
PLAYDIARY_FLAG_UNKNOWN_0A00 = 0x0a00
} PlayDiaryFlags;
WUT_CHECK_SIZE(PlayDiaryFlags, 0x02);
@ -54,11 +56,11 @@ struct WUT_PACKED PlayStats
uint16_t times_played;
//! Date when the title was first played in days since 01/01/2000
uint16_t first_time_played;
//! Date when the title was last played in days since 01/01/2000
//! Date when the title was last played in days since 01/01/2000
uint16_t last_time_played;
//! Unknown seems to be always 0x0000
WUT_UNKNOWN_BYTES(2);
WUT_UNKNOWN_BYTES(2);
};
WUT_CHECK_OFFSET(PlayStats, 0x00, title_id);
WUT_CHECK_OFFSET(PlayStats, 0x08, playtime);
@ -89,21 +91,21 @@ WUT_CHECK_OFFSET(PlayLog, 0x00, title_id);
* \return
* 0 on success.
*/
uint32_t
uint32_t
Initialize()
asm("Initialize__Q2_2nn3pdmFv");
/**
* Finalize PDM.
*/
void
void
Finalize()
asm("Finalize__Q2_2nn3pdmFv");
/**
* Close all opened PDM Files.
*/
void
void
CloseAllFiles()
asm("CloseAllFiles__Q2_2nn3pdmFv");
@ -123,7 +125,7 @@ Convert(uint32_t userId)
* \return
* 0 on success.
*/
uint32_t
uint32_t
WaitForConvertDone()
asm("WaitForConvertDone__Q2_2nn3pdmFv");
@ -138,7 +140,7 @@ WaitForConvertDone()
* 0 on success.
*/
uint32_t
GetPlayDiaryMaxLength(uint32_t* outMaxLength)
GetPlayDiaryMaxLength(uint32_t *outMaxLength)
asm("GetPlayDiaryMaxLength__Q2_2nn3pdmFPi");
/**
@ -154,7 +156,7 @@ GetPlayDiaryMaxLength(uint32_t* outMaxLength)
* 0 on success.
*/
uint32_t
GetPlayDiaryLength(uint32_t* outLength, uint32_t userId)
GetPlayDiaryLength(uint32_t *outLength, uint32_t userId)
asm("GetPlayDiaryLength__Q2_2nn3pdmFPii");
/**
@ -170,7 +172,7 @@ GetPlayDiaryLength(uint32_t* outLength, uint32_t userId)
* 0 on success.
*/
uint32_t
GetPlayDiaryStart(uint32_t* outStart, uint32_t userId)
GetPlayDiaryStart(uint32_t *outStart, uint32_t userId)
asm("GetPlayDiaryStart__Q2_2nn3pdmFPii");
/**
@ -195,7 +197,7 @@ GetPlayDiaryStart(uint32_t* outStart, uint32_t userId)
* 0 on success.
*/
uint32_t
GetPlayDiary(uint32_t* outAmount, PlayDiary* outPlayDiaries, uint32_t userId, uint32_t amount)
GetPlayDiary(uint32_t *outAmount, PlayDiary *outPlayDiaries, uint32_t userId, uint32_t amount)
asm("GetPlayDiary__Q2_2nn3pdmFPiPQ3_2nn3pdm9PlayDiaryiT3");
/**
@ -217,7 +219,7 @@ GetPlayDiary(uint32_t* outAmount, PlayDiary* outPlayDiaries, uint32_t userId, ui
* May be smaller than the amount passed to the function.
*/
uint32_t
GetPlayDiary(PlayDiary* outPlayDiaries, uint32_t userId, uint32_t amount)
GetPlayDiary(PlayDiary *outPlayDiaries, uint32_t userId, uint32_t amount)
asm("GetPlayDiary__Q2_2nn3pdmFPQ3_2nn3pdm9PlayDiaryiT2");
/**
@ -231,7 +233,7 @@ GetPlayDiary(PlayDiary* outPlayDiaries, uint32_t userId, uint32_t amount)
* 0 on success.
*/
uint32_t
GetPlayEventMaxLength(uint32_t* outMaxLength)
GetPlayEventMaxLength(uint32_t *outMaxLength)
asm("GetPlayEventMaxLength__Q2_2nn3pdmFPi");
/**
@ -256,7 +258,7 @@ GetPlayEventMaxLength(uint32_t* outMaxLength)
* 0 on success.
*/
uint32_t
GetPlayEvent(uint32_t* outAmount, PlayEvent* outPlayEvents, uint32_t userId, uint32_t amount)
GetPlayEvent(uint32_t *outAmount, PlayEvent *outPlayEvents, uint32_t userId, uint32_t amount)
asm("GetPlayEvent__Q2_2nn3pdmFPiPQ3_2nn3pdm9PlayEventiT3");
/**
@ -270,7 +272,7 @@ GetPlayEvent(uint32_t* outAmount, PlayEvent* outPlayEvents, uint32_t userId, uin
* 0 on success.
*/
uint32_t
GetPlayLogMaxLength(uint32_t* outMaxLength)
GetPlayLogMaxLength(uint32_t *outMaxLength)
asm("GetPlayLogMaxLength__Q2_2nn3pdmFPi");
/**
@ -286,7 +288,7 @@ GetPlayLogMaxLength(uint32_t* outMaxLength)
* 0 on success.
*/
uint32_t
GetPlayLogLength(uint32_t* outLength, uint32_t userId)
GetPlayLogLength(uint32_t *outLength, uint32_t userId)
asm("GetPlayLogLength__Q2_2nn3pdmFPii");
/**
@ -302,7 +304,7 @@ GetPlayLogLength(uint32_t* outLength, uint32_t userId)
* 0 on success.
*/
uint32_t
GetPlayLogStart(uint32_t* outStart, uint32_t userId)
GetPlayLogStart(uint32_t *outStart, uint32_t userId)
asm("GetPlayLogStart__Q2_2nn3pdmFPii");
/**
@ -327,7 +329,7 @@ GetPlayLogStart(uint32_t* outStart, uint32_t userId)
* 0 on success.
*/
uint32_t
GetPlayLog(uint32_t* outAmount, PlayLog* outPlayLogs, uint32_t userId, uint32_t amount)
GetPlayLog(uint32_t *outAmount, PlayLog *outPlayLogs, uint32_t userId, uint32_t amount)
asm("GetPlayLog__Q2_2nn3pdmFPiPQ3_2nn3pdm7PlayLogiT3");
/**
@ -349,7 +351,7 @@ GetPlayLog(uint32_t* outAmount, PlayLog* outPlayLogs, uint32_t userId, uint32_t
* May be smaller than the amount passed to the function.
*/
uint32_t
GetPlayLog(PlayLog* outPlayLogs, uint32_t userId, uint32_t amount)
GetPlayLog(PlayLog *outPlayLogs, uint32_t userId, uint32_t amount)
asm("GetPlayLog__Q2_2nn3pdmFPQ3_2nn3pdm7PlayLogiT2");
/**
@ -363,7 +365,7 @@ GetPlayLog(PlayLog* outPlayLogs, uint32_t userId, uint32_t amount)
* 0 on success.
*/
uint32_t
GetPlayStatsMaxLength(uint32_t* outMaxLength)
GetPlayStatsMaxLength(uint32_t *outMaxLength)
asm("GetPlayStatsMaxLength__Q2_2nn3pdmFPi");
/**
@ -379,7 +381,7 @@ GetPlayStatsMaxLength(uint32_t* outMaxLength)
* 0 on success.
*/
uint32_t
GetPlayStatsLength(uint32_t* outLength, uint32_t userId)
GetPlayStatsLength(uint32_t *outLength, uint32_t userId)
asm("GetPlayStatsLength__Q2_2nn3pdmFPii");
/**
@ -399,7 +401,7 @@ GetPlayStatsLength(uint32_t* outLength, uint32_t userId)
* 0 on success
*/
uint32_t
GetPlayStatsOfTitleId(PlayStats* outPlayStats, uint32_t userId, uint64_t titleId)
GetPlayStatsOfTitleId(PlayStats *outPlayStats, uint32_t userId, uint64_t titleId)
asm("GetPlayStatsOfTitleId__Q2_2nn3pdmFPQ3_2nn3pdm9PlayStatsiUL");
/**
@ -424,7 +426,7 @@ GetPlayStatsOfTitleId(PlayStats* outPlayStats, uint32_t userId, uint64_t titleId
* 0 on success.
*/
uint32_t
GetPlayStats(uint32_t* outAmount, PlayStats* outPlayStats, uint32_t userId, uint32_t amount)
GetPlayStats(uint32_t *outAmount, PlayStats *outPlayStats, uint32_t userId, uint32_t amount)
asm("GetPlayStats__Q2_2nn3pdmFPiPQ3_2nn3pdm9PlayStatsiT3");
/**
@ -446,14 +448,14 @@ GetPlayStats(uint32_t* outAmount, PlayStats* outPlayStats, uint32_t userId, uint
* May be smaller than the amount passed to the function.
*/
uint32_t
GetPlayStats(PlayStats* outPlayStats, uint32_t userId, uint32_t amount)
GetPlayStats(PlayStats *outPlayStats, uint32_t userId, uint32_t amount)
asm("GetPlayStats__Q2_2nn3pdmFPQ3_2nn3pdm9PlayStatsiT2");
void
void
NotifySetTimeBeginEvent()
asm("NotifySetTimeBeginEvent__Q2_2nn3pdmFv");
void
void
NotifySetTimeEndEvent()
asm("NotifySetTimeEndEvent__Q2_2nn3pdmFv");

View File

@ -34,7 +34,8 @@ struct NNResult
* \sa
* - \link NNResult_IsFailure \endlink
*/
static inline int NNResult_IsSuccess(NNResult result)
static inline int
NNResult_IsSuccess(NNResult result)
{
return result.value >= 0;
}
@ -51,7 +52,8 @@ static inline int NNResult_IsSuccess(NNResult result)
* \sa
* - \link NNResult_IsSuccess \endlink
*/
static inline int NNResult_IsFailure(NNResult result)
static inline int
NNResult_IsFailure(NNResult result)
{
return result.value < 0;
}
@ -69,162 +71,162 @@ class Result
public:
enum Level
{
LEVEL_SUCCESS = 0,
LEVEL_FATAL = -1,
LEVEL_USAGE = -2,
LEVEL_STATUS = -3,
LEVEL_END = -7,
LEVEL_SUCCESS = 0,
LEVEL_FATAL = -1,
LEVEL_USAGE = -2,
LEVEL_STATUS = -3,
LEVEL_END = -7,
};
enum LegacyLevel
{
LEVEL_INFO = 1,
LEVEL_RESET = -4,
LEVEL_REINIT = -5,
LEVEL_PERMANENT = -6,
LEVEL_TEMPORARY = -7,
LEVEL_INFO = 1,
LEVEL_RESET = -4,
LEVEL_REINIT = -5,
LEVEL_PERMANENT = -6,
LEVEL_TEMPORARY = -7,
};
enum Module
{
RESULT_MODULE_COMMON = 0,
RESULT_MODULE_NN_IPC = 1,
RESULT_MODULE_NN_BOSS = 2,
RESULT_MODULE_NN_ACP = 3,
RESULT_MODULE_NN_IOS = 4,
RESULT_MODULE_NN_NIM = 5,
RESULT_MODULE_NN_PDM = 6,
RESULT_MODULE_NN_ACT = 7,
RESULT_MODULE_NN_NGC = 8,
RESULT_MODULE_NN_ECA = 9,
RESULT_MODULE_NN_NUP = 10,
RESULT_MODULE_NN_NDM = 11,
RESULT_MODULE_NN_FP = 12,
RESULT_MODULE_NN_AC = 13,
RESULT_MODULE_NN_CONNTEST = 14,
RESULT_MODULE_NN_DRMAPP = 15,
RESULT_MODULE_NN_TELNET = 16,
RESULT_MODULE_NN_OLV = 17,
RESULT_MODULE_NN_VCTL = 18,
RESULT_MODULE_NN_NEIA = 19,
RESULT_MODULE_NN_SPM = 20,
RESULT_MODULE_NN_EMD = 21,
RESULT_MODULE_NN_EC = 22,
RESULT_MODULE_NN_CIA = 23,
RESULT_MODULE_NN_SL = 24,
RESULT_MODULE_NN_ECO = 25,
RESULT_MODULE_NN_TRIAL = 26,
RESULT_MODULE_NN_NFP = 27,
RESULT_MODULE_NN_TEST = 125,
RESULT_MODULE_COMMON = 0,
RESULT_MODULE_NN_IPC = 1,
RESULT_MODULE_NN_BOSS = 2,
RESULT_MODULE_NN_ACP = 3,
RESULT_MODULE_NN_IOS = 4,
RESULT_MODULE_NN_NIM = 5,
RESULT_MODULE_NN_PDM = 6,
RESULT_MODULE_NN_ACT = 7,
RESULT_MODULE_NN_NGC = 8,
RESULT_MODULE_NN_ECA = 9,
RESULT_MODULE_NN_NUP = 10,
RESULT_MODULE_NN_NDM = 11,
RESULT_MODULE_NN_FP = 12,
RESULT_MODULE_NN_AC = 13,
RESULT_MODULE_NN_CONNTEST = 14,
RESULT_MODULE_NN_DRMAPP = 15,
RESULT_MODULE_NN_TELNET = 16,
RESULT_MODULE_NN_OLV = 17,
RESULT_MODULE_NN_VCTL = 18,
RESULT_MODULE_NN_NEIA = 19,
RESULT_MODULE_NN_SPM = 20,
RESULT_MODULE_NN_EMD = 21,
RESULT_MODULE_NN_EC = 22,
RESULT_MODULE_NN_CIA = 23,
RESULT_MODULE_NN_SL = 24,
RESULT_MODULE_NN_ECO = 25,
RESULT_MODULE_NN_TRIAL = 26,
RESULT_MODULE_NN_NFP = 27,
RESULT_MODULE_NN_TEST = 125,
};
enum LegacyModule
{
MODULE_COMMON = 0,
MODULE_NN_KERNEL = 1,
MODULE_NN_UTIL = 2,
MODULE_NN_FILE_SERVER = 3,
MODULE_NN_LOADER_SERVER = 4,
MODULE_NN_TCB = 5,
MODULE_NN_OS = 6,
MODULE_NN_DBG = 7,
MODULE_NN_DMNT = 8,
MODULE_NN_PDN = 9,
MODULE_NN_GX = 0xA,
MODULE_NN_I2C = 0xB,
MODULE_NN_GPIO = 0xC,
MODULE_NN_DD = 0xD,
MODULE_NN_CODEC = 0xE,
MODULE_NN_SPI = 0xF,
MODULE_NN_PXI = 0x10,
MODULE_NN_FS = 0x11,
MODULE_NN_DI = 0x12,
MODULE_NN_HID = 0x13,
MODULE_NN_CAMERA = 0x14,
MODULE_NN_PI = 0x15,
MODULE_NN_PM = 0x16,
MODULE_NN_PMLOW = 0x17,
MODULE_NN_FSI = 0x18,
MODULE_NN_SRV = 0x19,
MODULE_NN_NDM = 0x1A,
MODULE_NN_NWM = 0x1B,
MODULE_NN_SOCKET = 0x1C,
MODULE_NN_LDR = 0x1D,
MODULE_NN_ACC = 0x1E,
MODULE_NN_ROMFS = 0x1F,
MODULE_NN_AM = 0x20,
MODULE_NN_HIO = 0x21,
MODULE_NN_UPDATER = 0x22,
MODULE_NN_MIC = 0x23,
MODULE_NN_FND = 0x24,
MODULE_NN_MP = 0x25,
MODULE_NN_MPWL = 0x26,
MODULE_NN_AC = 0x27,
MODULE_NN_HTTP = 0x28,
MODULE_NN_DSP = 0x29,
MODULE_NN_SND = 0x2A,
MODULE_NN_DLP = 0x2B,
MODULE_NN_HIOLOW = 0x2C,
MODULE_NN_CSND = 0x2D,
MODULE_NN_SSL = 0x2E,
MODULE_NN_AMLOW = 0x2F,
MODULE_NN_NEX = 0x30,
MODULE_NN_FRIENDS = 0x31,
MODULE_NN_RDT = 0x32,
MODULE_NN_APPLET = 0x33,
MODULE_NN_NIM = 0x34,
MODULE_NN_PTM = 0x35,
MODULE_NN_MIDI = 0x36,
MODULE_NN_MC = 0x37,
MODULE_NN_SWC = 0x38,
MODULE_NN_FATFS = 0x39,
MODULE_NN_NGC = 0x3A,
MODULE_NN_CARD = 0x3B,
MODULE_NN_CARDNOR = 0x3C,
MODULE_NN_SDMC = 0x3D,
MODULE_NN_BOSS = 0x3E,
MODULE_NN_DBM = 0x3F,
MODULE_NN_CFG = 0x40,
MODULE_NN_PS = 0x41,
MODULE_NN_CEC = 0x42,
MODULE_NN_IR = 0x43,
MODULE_NN_UDS = 0x44,
MODULE_NN_PL = 0x45,
MODULE_NN_CUP = 0x46,
MODULE_NN_GYROSCOPE = 0x47,
MODULE_NN_MCU = 0x48,
MODULE_NN_NS = 0x49,
MODULE_NN_NEWS = 0x4A,
MODULE_NN_RO = 0x4B,
MODULE_NN_GD = 0x4C,
MODULE_NN_CARDSPI = 0x4D,
MODULE_NN_EC = 0x4E,
MODULE_NN_WEBBRS = 0x4F,
MODULE_NN_TEST = 0x50,
MODULE_NN_ENC = 0x51,
MODULE_NN_PIA = 0x52,
MODULE_APPLICATION = 0x1FE,
MODULE_COMMON = 0,
MODULE_NN_KERNEL = 1,
MODULE_NN_UTIL = 2,
MODULE_NN_FILE_SERVER = 3,
MODULE_NN_LOADER_SERVER = 4,
MODULE_NN_TCB = 5,
MODULE_NN_OS = 6,
MODULE_NN_DBG = 7,
MODULE_NN_DMNT = 8,
MODULE_NN_PDN = 9,
MODULE_NN_GX = 0xA,
MODULE_NN_I2C = 0xB,
MODULE_NN_GPIO = 0xC,
MODULE_NN_DD = 0xD,
MODULE_NN_CODEC = 0xE,
MODULE_NN_SPI = 0xF,
MODULE_NN_PXI = 0x10,
MODULE_NN_FS = 0x11,
MODULE_NN_DI = 0x12,
MODULE_NN_HID = 0x13,
MODULE_NN_CAMERA = 0x14,
MODULE_NN_PI = 0x15,
MODULE_NN_PM = 0x16,
MODULE_NN_PMLOW = 0x17,
MODULE_NN_FSI = 0x18,
MODULE_NN_SRV = 0x19,
MODULE_NN_NDM = 0x1A,
MODULE_NN_NWM = 0x1B,
MODULE_NN_SOCKET = 0x1C,
MODULE_NN_LDR = 0x1D,
MODULE_NN_ACC = 0x1E,
MODULE_NN_ROMFS = 0x1F,
MODULE_NN_AM = 0x20,
MODULE_NN_HIO = 0x21,
MODULE_NN_UPDATER = 0x22,
MODULE_NN_MIC = 0x23,
MODULE_NN_FND = 0x24,
MODULE_NN_MP = 0x25,
MODULE_NN_MPWL = 0x26,
MODULE_NN_AC = 0x27,
MODULE_NN_HTTP = 0x28,
MODULE_NN_DSP = 0x29,
MODULE_NN_SND = 0x2A,
MODULE_NN_DLP = 0x2B,
MODULE_NN_HIOLOW = 0x2C,
MODULE_NN_CSND = 0x2D,
MODULE_NN_SSL = 0x2E,
MODULE_NN_AMLOW = 0x2F,
MODULE_NN_NEX = 0x30,
MODULE_NN_FRIENDS = 0x31,
MODULE_NN_RDT = 0x32,
MODULE_NN_APPLET = 0x33,
MODULE_NN_NIM = 0x34,
MODULE_NN_PTM = 0x35,
MODULE_NN_MIDI = 0x36,
MODULE_NN_MC = 0x37,
MODULE_NN_SWC = 0x38,
MODULE_NN_FATFS = 0x39,
MODULE_NN_NGC = 0x3A,
MODULE_NN_CARD = 0x3B,
MODULE_NN_CARDNOR = 0x3C,
MODULE_NN_SDMC = 0x3D,
MODULE_NN_BOSS = 0x3E,
MODULE_NN_DBM = 0x3F,
MODULE_NN_CFG = 0x40,
MODULE_NN_PS = 0x41,
MODULE_NN_CEC = 0x42,
MODULE_NN_IR = 0x43,
MODULE_NN_UDS = 0x44,
MODULE_NN_PL = 0x45,
MODULE_NN_CUP = 0x46,
MODULE_NN_GYROSCOPE = 0x47,
MODULE_NN_MCU = 0x48,
MODULE_NN_NS = 0x49,
MODULE_NN_NEWS = 0x4A,
MODULE_NN_RO = 0x4B,
MODULE_NN_GD = 0x4C,
MODULE_NN_CARDSPI = 0x4D,
MODULE_NN_EC = 0x4E,
MODULE_NN_WEBBRS = 0x4F,
MODULE_NN_TEST = 0x50,
MODULE_NN_ENC = 0x51,
MODULE_NN_PIA = 0x52,
MODULE_APPLICATION = 0x1FE,
};
enum LegacySummary
{
SUMMARY_SUCCESS = 0,
SUMMARY_NOTHING_HAPPENED = 1,
SUMMARY_WOULD_BLOCK = 2,
SUMMARY_OUT_OF_RESOURCE = 3,
SUMMARY_NOT_FOUND = 4,
SUMMARY_INVALID_STATE = 5,
SUMMARY_NOT_SUPPORTED = 6,
SUMMARY_INVALID_ARGUMENT = 7,
SUMMARY_WRONG_ARGUMENT = 8,
SUMMARY_CANCELLED = 9,
SUMMARY_STATUS_CHANGED = 10,
SUMMARY_INTERNAL = 11,
SUMMARY_SUCCESS = 0,
SUMMARY_NOTHING_HAPPENED = 1,
SUMMARY_WOULD_BLOCK = 2,
SUMMARY_OUT_OF_RESOURCE = 3,
SUMMARY_NOT_FOUND = 4,
SUMMARY_INVALID_STATE = 5,
SUMMARY_NOT_SUPPORTED = 6,
SUMMARY_INVALID_ARGUMENT = 7,
SUMMARY_WRONG_ARGUMENT = 8,
SUMMARY_CANCELLED = 9,
SUMMARY_STATUS_CHANGED = 10,
SUMMARY_INTERNAL = 11,
};
enum LegacySignature
{
SIGNATURE_IS_LEGACY = 3,
SIGNATURE_IS_LEGACY = 3,
};
public:
@ -252,7 +254,8 @@ public:
* \sa
* - \link IsSuccess \endlink
*/
bool IsFailure() const
bool
IsFailure() const
{
return !IsSuccess();
}
@ -266,22 +269,26 @@ public:
* \sa
* - \link IsFailure \endlink
*/
bool IsSuccess() const
bool
IsSuccess() const
{
return mValue >= 0; // level >= 0
}
bool IsLegacy() const
bool
IsLegacy() const
{
return ((mValue >> 27) & 0x3) == SIGNATURE_IS_LEGACY;
}
unsigned GetDescription() const
unsigned
GetDescription() const
{
return mValue & (IsLegacy() ? 0x3FF : 0xFFFFF);
}
int GetLevel() const
int
GetLevel() const
{
if (IsLegacy()) {
return (mValue << 14) >> 28; // cause arithmetic shift
@ -290,12 +297,14 @@ public:
return mValue >> 29;
}
unsigned GetModule() const
unsigned
GetModule() const
{
return (mValue >> 20) & (IsLegacy() ? 0x7F : 0x1FF);
}
unsigned GetSummary() const
unsigned
GetSummary() const
{
if (IsLegacy()) {
return (mValue >> 10) & 0xF;
@ -316,12 +325,14 @@ public:
return result;
}
bool operator==(const Result &other) const
bool
operator==(const Result &other) const
{
return mValue == other.mValue;
}
bool operator!=(const Result &other) const
bool
operator!=(const Result &other) const
{
return mValue != other.mValue;
}

View File

@ -1,8 +1,8 @@
#pragma once
#include <wut.h>
#include <nn/acp/device.h>
#include <coreinit/filesystem.h>
#include <nn/acp/device.h>
#ifdef __cplusplus
extern "C" {
@ -10,9 +10,9 @@ extern "C" {
typedef enum SAVEStatus
{
SAVE_STATUS_OK = 0,
SAVE_STATUS_NOT_FOUND = -6,
SAVE_STATUS_STORAGE_FULL = -12,
SAVE_STATUS_OK = 0,
SAVE_STATUS_NOT_FOUND = -6,
SAVE_STATUS_STORAGE_FULL = -12,
} SAVEStatus;
SAVEStatus

View File

@ -1,95 +1,123 @@
#pragma once
#include <wut.h>
#include <nn/result.h>
#include <nn/sl/ISerializer.h>
#include <nn/sl/KillerNotification.h>
#include <nn/sl/sl_cpp.h>
#include <wut.h>
#ifdef __cplusplus
namespace nn::sl {
namespace details {
typedef struct WUT_PACKED CacheManagerInternal {
ISerializerInternal *quickStartTitleInfoSerializer;
ISerializerInternal *killerNotificationSerializer;
ISerializerInternal *jumpTitleInfoSerializer;
} CacheManagerInternal;
WUT_CHECK_SIZE(CacheManagerInternal, 0x0c);
WUT_CHECK_OFFSET(CacheManagerInternal, 0x00, quickStartTitleInfoSerializer);
WUT_CHECK_OFFSET(CacheManagerInternal, 0x04, killerNotificationSerializer);
WUT_CHECK_OFFSET(CacheManagerInternal, 0x08, jumpTitleInfoSerializer);
namespace nn::sl
{
namespace details
{
typedef struct WUT_PACKED CacheManagerInternal
{
ISerializerInternal *quickStartTitleInfoSerializer;
ISerializerInternal *killerNotificationSerializer;
ISerializerInternal *jumpTitleInfoSerializer;
} CacheManagerInternal;
WUT_CHECK_SIZE(CacheManagerInternal, 0x0c);
WUT_CHECK_OFFSET(CacheManagerInternal, 0x00, quickStartTitleInfoSerializer);
WUT_CHECK_OFFSET(CacheManagerInternal, 0x04, killerNotificationSerializer);
WUT_CHECK_OFFSET(CacheManagerInternal, 0x08, jumpTitleInfoSerializer);
extern "C" CacheManagerInternal *__ct__Q3_2nn2sl12CacheManagerFv(CacheManagerInternal *);
extern "C" void SetupInitialCache__Q3_2nn2sl12CacheManagerFv(CacheManagerInternal *);
extern "C" nn::Result GetKillerNotificationCache__Q3_2nn2sl12CacheManagerFPQ3_2nn2sl18KillerNotificationPQ3_2nn2sl9TitleInfo(CacheManagerInternal *, KillerNotification *, TitleInfo *);
extern "C" nn::Result GetQuickStartCache__Q3_2nn2sl12CacheManagerFPQ3_2nn2sl9TitleInfoi(CacheManagerInternal *, TitleInfo *, int);
extern "C" nn::Result Get__Q3_2nn2sl12CacheManagerFPQ3_2nn2sl9TitleInfoiPQ3_2nn2sl18KillerNotificationT1(CacheManagerInternal *, TitleInfo *, int, KillerNotification *, TitleInfo *);
extern "C" nn::Result Initialize__Q3_2nn2sl12CacheManagerFRQ3_2nn2sl39ISerializer__tm__20_Q3_2nn2sl9TitleInfoRQ3_2nn2sl49ISerializer__tm__30_Q3_2nn2sl18KillerNotificationT1(
CacheManagerInternal *,
ISerializerInternal *,
ISerializerInternal *,
ISerializerInternal *);
} // namespace details
extern "C" CacheManagerInternal *
__ct__Q3_2nn2sl12CacheManagerFv(CacheManagerInternal *);
extern "C" void
SetupInitialCache__Q3_2nn2sl12CacheManagerFv(CacheManagerInternal *);
extern "C" nn::Result
GetKillerNotificationCache__Q3_2nn2sl12CacheManagerFPQ3_2nn2sl18KillerNotificationPQ3_2nn2sl9TitleInfo(CacheManagerInternal *, KillerNotification *, TitleInfo *);
extern "C" nn::Result
GetQuickStartCache__Q3_2nn2sl12CacheManagerFPQ3_2nn2sl9TitleInfoi(CacheManagerInternal *, TitleInfo *, int);
extern "C" nn::Result
Get__Q3_2nn2sl12CacheManagerFPQ3_2nn2sl9TitleInfoiPQ3_2nn2sl18KillerNotificationT1(CacheManagerInternal *, TitleInfo *, int, KillerNotification *, TitleInfo *);
extern "C" nn::Result
Initialize__Q3_2nn2sl12CacheManagerFRQ3_2nn2sl39ISerializer__tm__20_Q3_2nn2sl9TitleInfoRQ3_2nn2sl49ISerializer__tm__30_Q3_2nn2sl18KillerNotificationT1(
CacheManagerInternal *,
ISerializerInternal *,
ISerializerInternal *,
ISerializerInternal *);
} // namespace details
class CacheManager {
public:
CacheManager() : mQuickStartTitleInfoSerializer(nullptr),
mKillerNotificationSerializer(nullptr),
mJumpTitleInfoSerializer(nullptr) {
if (__ct__Q3_2nn2sl12CacheManagerFv(&mInstance) != nullptr) {
mQuickStartTitleInfoSerializer = details::SerializerFromPtr<TitleInfo>(mInstance.quickStartTitleInfoSerializer);
mKillerNotificationSerializer = details::SerializerFromPtr<KillerNotification>(mInstance.killerNotificationSerializer);
mJumpTitleInfoSerializer = details::SerializerFromPtr<TitleInfo>(mInstance.jumpTitleInfoSerializer);
}
}
class CacheManager
{
public:
CacheManager() :
mQuickStartTitleInfoSerializer(nullptr),
mKillerNotificationSerializer(nullptr),
mJumpTitleInfoSerializer(nullptr)
{
if (__ct__Q3_2nn2sl12CacheManagerFv(&mInstance) != nullptr) {
mQuickStartTitleInfoSerializer = details::SerializerFromPtr<TitleInfo>(mInstance.quickStartTitleInfoSerializer);
mKillerNotificationSerializer = details::SerializerFromPtr<KillerNotification>(mInstance.killerNotificationSerializer);
mJumpTitleInfoSerializer = details::SerializerFromPtr<TitleInfo>(mInstance.jumpTitleInfoSerializer);
}
}
[[nodiscard]] details::ISerializerBase<TitleInfo> &GetQuickStartTitleInfoSerializer() {
return mQuickStartTitleInfoSerializer;
}
[[nodiscard]] details::ISerializerBase<TitleInfo> &
GetQuickStartTitleInfoSerializer()
{
return mQuickStartTitleInfoSerializer;
}
[[nodiscard]] details::ISerializerBase<KillerNotification> &GetKillerNotificationSerializer() {
return mKillerNotificationSerializer;
}
[[nodiscard]] details::ISerializerBase<KillerNotification> &
GetKillerNotificationSerializer()
{
return mKillerNotificationSerializer;
}
[[nodiscard]] details::ISerializerBase<TitleInfo> &GetJumpTitleInfoSerializer() {
return mJumpTitleInfoSerializer;
}
[[nodiscard]] details::ISerializerBase<TitleInfo> &
GetJumpTitleInfoSerializer()
{
return mJumpTitleInfoSerializer;
}
void SetupInitialCache() {
SetupInitialCache__Q3_2nn2sl12CacheManagerFv(&mInstance);
}
void
SetupInitialCache()
{
SetupInitialCache__Q3_2nn2sl12CacheManagerFv(&mInstance);
}
nn::Result GetKillerNotificationCache(KillerNotification *u1, TitleInfo *u2) {
return GetKillerNotificationCache__Q3_2nn2sl12CacheManagerFPQ3_2nn2sl18KillerNotificationPQ3_2nn2sl9TitleInfo(&mInstance, u1, u2);
}
nn::Result
GetKillerNotificationCache(KillerNotification *u1, TitleInfo *u2)
{
return GetKillerNotificationCache__Q3_2nn2sl12CacheManagerFPQ3_2nn2sl18KillerNotificationPQ3_2nn2sl9TitleInfo(&mInstance, u1, u2);
}
nn::Result GetQuickStartCache(TitleInfo *u1, int u2) {
return GetQuickStartCache__Q3_2nn2sl12CacheManagerFPQ3_2nn2sl9TitleInfoi(&mInstance, u1, u2);
}
nn::Result
GetQuickStartCache(TitleInfo *u1, int u2)
{
return GetQuickStartCache__Q3_2nn2sl12CacheManagerFPQ3_2nn2sl9TitleInfoi(&mInstance, u1, u2);
}
nn::Result Get(TitleInfo *u1, int u2, KillerNotification *u3, TitleInfo *u4) {
return Get__Q3_2nn2sl12CacheManagerFPQ3_2nn2sl9TitleInfoiPQ3_2nn2sl18KillerNotificationT1(&mInstance, u1, u2, u3, u4);
}
nn::Result
Get(TitleInfo *u1, int u2, KillerNotification *u3, TitleInfo *u4)
{
return Get__Q3_2nn2sl12CacheManagerFPQ3_2nn2sl9TitleInfoiPQ3_2nn2sl18KillerNotificationT1(&mInstance, u1, u2, u3, u4);
}
void Initialize(details::ISerializerBase<TitleInfo> &quickStartTitleInfoSerializer, details::ISerializerBase<KillerNotification> &killerNotificationSerializer, details::ISerializerBase<TitleInfo> &jumpTitleInfoSerializer) {
Initialize__Q3_2nn2sl12CacheManagerFRQ3_2nn2sl39ISerializer__tm__20_Q3_2nn2sl9TitleInfoRQ3_2nn2sl49ISerializer__tm__30_Q3_2nn2sl18KillerNotificationT1(&mInstance,
quickStartTitleInfoSerializer.GetInternal(),
killerNotificationSerializer.GetInternal(),
jumpTitleInfoSerializer.GetInternal());
mQuickStartTitleInfoSerializer = details::SerializerFromPtr<TitleInfo>(quickStartTitleInfoSerializer.GetInternal());
mKillerNotificationSerializer = details::SerializerFromPtr<KillerNotification>(killerNotificationSerializer.GetInternal());
mJumpTitleInfoSerializer = details::SerializerFromPtr<TitleInfo>(jumpTitleInfoSerializer.GetInternal());
}
void
Initialize(details::ISerializerBase<TitleInfo> &quickStartTitleInfoSerializer, details::ISerializerBase<KillerNotification> &killerNotificationSerializer, details::ISerializerBase<TitleInfo> &jumpTitleInfoSerializer)
{
Initialize__Q3_2nn2sl12CacheManagerFRQ3_2nn2sl39ISerializer__tm__20_Q3_2nn2sl9TitleInfoRQ3_2nn2sl49ISerializer__tm__30_Q3_2nn2sl18KillerNotificationT1(&mInstance,
quickStartTitleInfoSerializer.GetInternal(),
killerNotificationSerializer.GetInternal(),
jumpTitleInfoSerializer.GetInternal());
mQuickStartTitleInfoSerializer = details::SerializerFromPtr<TitleInfo>(quickStartTitleInfoSerializer.GetInternal());
mKillerNotificationSerializer = details::SerializerFromPtr<KillerNotification>(killerNotificationSerializer.GetInternal());
mJumpTitleInfoSerializer = details::SerializerFromPtr<TitleInfo>(jumpTitleInfoSerializer.GetInternal());
}
~CacheManager() = default;
~CacheManager() = default;
private:
details::CacheManagerInternal mInstance{};
details::SerializerFromPtr<TitleInfo> mQuickStartTitleInfoSerializer;
details::SerializerFromPtr<KillerNotification> mKillerNotificationSerializer;
details::SerializerFromPtr<TitleInfo> mJumpTitleInfoSerializer;
};
private:
details::CacheManagerInternal mInstance{};
details::SerializerFromPtr<TitleInfo> mQuickStartTitleInfoSerializer;
details::SerializerFromPtr<KillerNotification> mKillerNotificationSerializer;
details::SerializerFromPtr<TitleInfo> mJumpTitleInfoSerializer;
};
} // namespace nn::sl
#endif

View File

@ -1,114 +1,144 @@
#pragma once
#include <wut.h>
#include <coreinit/time.h>
#include <nn/result.h>
#include <nn/sl/ISettingAccessor.h>
#include <nn/sl/ITimeAccessor.h>
#include <nn/sl/IUpdatePackageAccessor.h>
#include <nn/sl/details/ISerializerDetails.h>
#include <wut.h>
#ifdef __cplusplus
namespace nn::sl {
namespace details {
typedef struct WUT_PACKED ConditionInternal {
ISettingAccessorInternal *settingAccessor;
IUpdatePackageAccessorInternal *updatePackageAccessor;
ISerializerInternal *previousSendingTimeSerializer;
ITimeAccessorInternal *timeAccessor;
void *vtable;
} ConditionInternal;
WUT_CHECK_SIZE(ConditionInternal, 0x14);
WUT_CHECK_OFFSET(ConditionInternal, 0x00, settingAccessor);
WUT_CHECK_OFFSET(ConditionInternal, 0x04, updatePackageAccessor);
WUT_CHECK_OFFSET(ConditionInternal, 0x08, previousSendingTimeSerializer);
WUT_CHECK_OFFSET(ConditionInternal, 0x0C, timeAccessor);
WUT_CHECK_OFFSET(ConditionInternal, 0x10, vtable);
namespace nn::sl
{
namespace details
{
typedef struct WUT_PACKED ConditionInternal
{
ISettingAccessorInternal *settingAccessor;
IUpdatePackageAccessorInternal *updatePackageAccessor;
ISerializerInternal *previousSendingTimeSerializer;
ITimeAccessorInternal *timeAccessor;
void *vtable;
} ConditionInternal;
WUT_CHECK_SIZE(ConditionInternal, 0x14);
WUT_CHECK_OFFSET(ConditionInternal, 0x00, settingAccessor);
WUT_CHECK_OFFSET(ConditionInternal, 0x04, updatePackageAccessor);
WUT_CHECK_OFFSET(ConditionInternal, 0x08, previousSendingTimeSerializer);
WUT_CHECK_OFFSET(ConditionInternal, 0x0C, timeAccessor);
WUT_CHECK_OFFSET(ConditionInternal, 0x10, vtable);
extern "C" ConditionInternal *__ct__Q3_2nn2sl9ConditionFv(ConditionInternal *);
extern "C" nn::Result GetEnability__Q3_2nn2sl9ConditionCFv(ConditionInternal *);
extern "C" nn::Result StoreCurrentTimeAsPreviousSendingTime__Q3_2nn2sl9ConditionCFv(ConditionInternal *);
extern "C" nn::Result NeedsUpdate__Q3_2nn2sl9ConditionCFv(ConditionInternal *);
extern "C" nn::Result GetPreviousSendingTime__Q3_2nn2sl9ConditionCFPL(ConditionInternal *, int64_t *outTime);
extern "C" void Initialize__Q3_2nn2sl9ConditionFRQ3_2nn2sl16ISettingAccessorRQ3_2nn2sl22IUpdatePackageAccessorRQ3_2nn2sl20ISerializer__tm__2_LRQ3_2nn2sl13ITimeAccessor(ConditionInternal *,
ISettingAccessorInternal *,
IUpdatePackageAccessorInternal *,
ISerializerInternal *,
ITimeAccessorInternal *);
} // namespace details
extern "C" ConditionInternal *
__ct__Q3_2nn2sl9ConditionFv(ConditionInternal *);
extern "C" nn::Result
GetEnability__Q3_2nn2sl9ConditionCFv(ConditionInternal *);
extern "C" nn::Result
StoreCurrentTimeAsPreviousSendingTime__Q3_2nn2sl9ConditionCFv(ConditionInternal *);
extern "C" nn::Result
NeedsUpdate__Q3_2nn2sl9ConditionCFv(ConditionInternal *);
extern "C" nn::Result
GetPreviousSendingTime__Q3_2nn2sl9ConditionCFPL(ConditionInternal *, int64_t *outTime);
extern "C" void
Initialize__Q3_2nn2sl9ConditionFRQ3_2nn2sl16ISettingAccessorRQ3_2nn2sl22IUpdatePackageAccessorRQ3_2nn2sl20ISerializer__tm__2_LRQ3_2nn2sl13ITimeAccessor(ConditionInternal *,
ISettingAccessorInternal *,
IUpdatePackageAccessorInternal *,
ISerializerInternal *,
ITimeAccessorInternal *);
} // namespace details
class Condition {
public:
Condition() : mSettingAccessor(nullptr),
mUpdatePackageAccessor(nullptr),
mPreviousSendingTimeSerializer(nullptr),
mTimeAccessor(nullptr) {
if (__ct__Q3_2nn2sl9ConditionFv(&mInstance) != nullptr) {
mSettingAccessor = details::SettingAccessorFromPtr(mInstance.settingAccessor);
mUpdatePackageAccessor = details::UpdatePackageAccessorFromPtr(mInstance.updatePackageAccessor);
mPreviousSendingTimeSerializer = details::SerializerFromPtr<OSTime>(mInstance.previousSendingTimeSerializer);
mTimeAccessor = details::TimeAccessorFromPtr(mInstance.timeAccessor);
}
}
class Condition
{
public:
Condition() :
mSettingAccessor(nullptr),
mUpdatePackageAccessor(nullptr),
mPreviousSendingTimeSerializer(nullptr),
mTimeAccessor(nullptr)
{
if (__ct__Q3_2nn2sl9ConditionFv(&mInstance) != nullptr) {
mSettingAccessor = details::SettingAccessorFromPtr(mInstance.settingAccessor);
mUpdatePackageAccessor = details::UpdatePackageAccessorFromPtr(mInstance.updatePackageAccessor);
mPreviousSendingTimeSerializer = details::SerializerFromPtr<OSTime>(mInstance.previousSendingTimeSerializer);
mTimeAccessor = details::TimeAccessorFromPtr(mInstance.timeAccessor);
}
}
~Condition() = default;
~Condition() = default;
[[nodiscard]] details::ISettingAccessorBase &GetSettingAccessor() {
return mSettingAccessor;
}
[[nodiscard]] details::ISettingAccessorBase &
GetSettingAccessor()
{
return mSettingAccessor;
}
[[nodiscard]] details::IUpdatePackageAccessorBase &GetUpdatePackageAccessor() {
return mUpdatePackageAccessor;
}
[[nodiscard]] details::IUpdatePackageAccessorBase &
GetUpdatePackageAccessor()
{
return mUpdatePackageAccessor;
}
[[nodiscard]] details::ISerializerBase<OSTime> &GetPreviousSendingTimeSerializer() {
return mPreviousSendingTimeSerializer;
}
[[nodiscard]] details::ISerializerBase<OSTime> &
GetPreviousSendingTimeSerializer()
{
return mPreviousSendingTimeSerializer;
}
[[nodiscard]] details::ITimeAccessorBase &GetTimeAccessor() {
return mTimeAccessor;
}
[[nodiscard]] details::ITimeAccessorBase &
GetTimeAccessor()
{
return mTimeAccessor;
}
nn::Result GetEnability() {
return GetEnability__Q3_2nn2sl9ConditionCFv(&mInstance);
}
nn::Result
GetEnability()
{
return GetEnability__Q3_2nn2sl9ConditionCFv(&mInstance);
}
nn::Result NeedsUpdate() {
return NeedsUpdate__Q3_2nn2sl9ConditionCFv(&mInstance);
}
nn::Result
NeedsUpdate()
{
return NeedsUpdate__Q3_2nn2sl9ConditionCFv(&mInstance);
}
nn::Result StoreCurrentTimeAsPreviousSendingTime() {
return StoreCurrentTimeAsPreviousSendingTime__Q3_2nn2sl9ConditionCFv(&mInstance);
}
nn::Result
StoreCurrentTimeAsPreviousSendingTime()
{
return StoreCurrentTimeAsPreviousSendingTime__Q3_2nn2sl9ConditionCFv(&mInstance);
}
nn::Result GetPreviousSendingTime(int64_t *outTime) {
return GetPreviousSendingTime__Q3_2nn2sl9ConditionCFPL(&mInstance, outTime);
}
nn::Result
GetPreviousSendingTime(int64_t *outTime)
{
return GetPreviousSendingTime__Q3_2nn2sl9ConditionCFPL(&mInstance, outTime);
}
void Initialize(details::ISettingAccessorBase &settingAccessor,
details::IUpdatePackageAccessorBase &updatePackageAccessor,
details::ISerializerBase<OSTime> &previousSendingTimeSerializer,
details::ITimeAccessorBase &timeAccessor) {
Initialize__Q3_2nn2sl9ConditionFRQ3_2nn2sl16ISettingAccessorRQ3_2nn2sl22IUpdatePackageAccessorRQ3_2nn2sl20ISerializer__tm__2_LRQ3_2nn2sl13ITimeAccessor(
&mInstance,
settingAccessor.GetInternal(),
updatePackageAccessor.GetInternal(),
previousSendingTimeSerializer.GetInternal(),
timeAccessor.GetInternal());
mSettingAccessor = details::SettingAccessorFromPtr(settingAccessor.GetInternal());
mUpdatePackageAccessor = details::UpdatePackageAccessorFromPtr(updatePackageAccessor.GetInternal());
mPreviousSendingTimeSerializer = details::SerializerFromPtr<OSTime>(previousSendingTimeSerializer.GetInternal());
mTimeAccessor = details::TimeAccessorFromPtr(timeAccessor.GetInternal());
}
void
Initialize(details::ISettingAccessorBase &settingAccessor,
details::IUpdatePackageAccessorBase &updatePackageAccessor,
details::ISerializerBase<OSTime> &previousSendingTimeSerializer,
details::ITimeAccessorBase &timeAccessor)
{
Initialize__Q3_2nn2sl9ConditionFRQ3_2nn2sl16ISettingAccessorRQ3_2nn2sl22IUpdatePackageAccessorRQ3_2nn2sl20ISerializer__tm__2_LRQ3_2nn2sl13ITimeAccessor(
&mInstance,
settingAccessor.GetInternal(),
updatePackageAccessor.GetInternal(),
previousSendingTimeSerializer.GetInternal(),
timeAccessor.GetInternal());
mSettingAccessor = details::SettingAccessorFromPtr(settingAccessor.GetInternal());
mUpdatePackageAccessor = details::UpdatePackageAccessorFromPtr(updatePackageAccessor.GetInternal());
mPreviousSendingTimeSerializer = details::SerializerFromPtr<OSTime>(previousSendingTimeSerializer.GetInternal());
mTimeAccessor = details::TimeAccessorFromPtr(timeAccessor.GetInternal());
}
private:
details::ConditionInternal mInstance = {};
details::SettingAccessorFromPtr mSettingAccessor;
details::UpdatePackageAccessorFromPtr mUpdatePackageAccessor;
details::SerializerFromPtr<OSTime> mPreviousSendingTimeSerializer;
details::TimeAccessorFromPtr mTimeAccessor;
};
private:
details::ConditionInternal mInstance = {};
details::SettingAccessorFromPtr mSettingAccessor;
details::UpdatePackageAccessorFromPtr mUpdatePackageAccessor;
details::SerializerFromPtr<OSTime> mPreviousSendingTimeSerializer;
details::TimeAccessorFromPtr mTimeAccessor;
};
} // namespace nn::sl

View File

@ -1,5 +1,6 @@
#pragma once
#include <wut.h>
#include <nn/result.h>
#include <nn/sl/IIconInfoAccessor.h>
#include <nn/sl/ISettingAccessor.h>
@ -8,92 +9,122 @@
#include <nn/sl/LaunchInfoDatabase.h>
#include <nn/sl/details/IAccountInfoAccessorDetails.h>
#include <nn/sl/sl_cpp.h>
#include <wut.h>
#ifdef __cplusplus
namespace nn ::sl {
namespace details {
typedef struct WUT_PACKED DataCreatorInternal {
IIconInfoAccessorInternal *iconInfoAccessor;
IAccountInfoAccessorInternal *accountInfoAccessor;
ISettingAccessorInternal *settingInfoAccessor;
ITitleIconCacheInternal *titleIconCache;
void *vtable;
} DataCreatorInternal;
WUT_CHECK_SIZE(DataCreatorInternal, 0x14);
WUT_CHECK_OFFSET(DataCreatorInternal, 0x00, iconInfoAccessor);
WUT_CHECK_OFFSET(DataCreatorInternal, 0x04, accountInfoAccessor);
WUT_CHECK_OFFSET(DataCreatorInternal, 0x08, settingInfoAccessor);
WUT_CHECK_OFFSET(DataCreatorInternal, 0x0c, titleIconCache);
WUT_CHECK_OFFSET(DataCreatorInternal, 0x10, vtable);
namespace nn ::sl
{
namespace details
{
typedef struct WUT_PACKED DataCreatorInternal
{
IIconInfoAccessorInternal *iconInfoAccessor;
IAccountInfoAccessorInternal *accountInfoAccessor;
ISettingAccessorInternal *settingInfoAccessor;
ITitleIconCacheInternal *titleIconCache;
void *vtable;
} DataCreatorInternal;
WUT_CHECK_SIZE(DataCreatorInternal, 0x14);
WUT_CHECK_OFFSET(DataCreatorInternal, 0x00, iconInfoAccessor);
WUT_CHECK_OFFSET(DataCreatorInternal, 0x04, accountInfoAccessor);
WUT_CHECK_OFFSET(DataCreatorInternal, 0x08, settingInfoAccessor);
WUT_CHECK_OFFSET(DataCreatorInternal, 0x0c, titleIconCache);
WUT_CHECK_OFFSET(DataCreatorInternal, 0x10, vtable);
extern "C" DataCreatorInternal *__ct__Q3_2nn2sl11DataCreatorFv(DataCreatorInternal *);
extern "C" nn::Result Create__Q3_2nn2sl11DataCreatorFPQ3_2nn2sl16TransferableInfoPCQ3_2nn2sl9TitleInfoiRCQ3_2nn2sl18KillerNotificationRCQ3_2nn2sl9TitleInfoRQ3_2nn2sl18LaunchInfoDatabase(
DataCreatorInternal *, TransferableInfo *, const TitleInfo *, int, const KillerNotification &, const TitleInfo &, LaunchInfoDatabase &);
extern "C" nn::Result Initialize__Q3_2nn2sl11DataCreatorFRQ3_2nn2sl17IIconInfoAccessorRQ3_2nn2sl20IAccountInfoAccessorRQ3_2nn2sl16ISettingAccessorRQ3_2nn2sl15ITitleIconCache(
DataCreatorInternal *, IIconInfoAccessorInternal *, IAccountInfoAccessorInternal *, ISettingAccessorInternal *, ITitleIconCacheInternal *);
} // namespace details
extern "C" DataCreatorInternal *
__ct__Q3_2nn2sl11DataCreatorFv(DataCreatorInternal *);
extern "C" nn::Result
Create__Q3_2nn2sl11DataCreatorFPQ3_2nn2sl16TransferableInfoPCQ3_2nn2sl9TitleInfoiRCQ3_2nn2sl18KillerNotificationRCQ3_2nn2sl9TitleInfoRQ3_2nn2sl18LaunchInfoDatabase(
DataCreatorInternal *,
TransferableInfo *,
const TitleInfo *,
int,
const KillerNotification &,
const TitleInfo &,
LaunchInfoDatabase &);
extern "C" nn::Result
Initialize__Q3_2nn2sl11DataCreatorFRQ3_2nn2sl17IIconInfoAccessorRQ3_2nn2sl20IAccountInfoAccessorRQ3_2nn2sl16ISettingAccessorRQ3_2nn2sl15ITitleIconCache(
DataCreatorInternal *,
IIconInfoAccessorInternal *,
IAccountInfoAccessorInternal *,
ISettingAccessorInternal *,
ITitleIconCacheInternal *);
} // namespace details
class DataCreator {
public:
DataCreator() : mIconInfoAccessor(nullptr),
mAccountInfoAccessor(nullptr),
mSettingAccessor(nullptr),
mTitleIconCache(nullptr) {
if (__ct__Q3_2nn2sl11DataCreatorFv(&mInstance) != nullptr) {
mIconInfoAccessor = details::IconInfoAccessorFromPtr(mInstance.iconInfoAccessor);
mAccountInfoAccessor = details::AccountInfoAccessorFromPtr(mInstance.accountInfoAccessor);
mSettingAccessor = details::SettingAccessorFromPtr(mInstance.settingInfoAccessor);
mTitleIconCache = details::TitleIconCacheFromPtr(mInstance.titleIconCache);
}
}
class DataCreator
{
public:
DataCreator() :
mIconInfoAccessor(nullptr),
mAccountInfoAccessor(nullptr),
mSettingAccessor(nullptr),
mTitleIconCache(nullptr)
{
if (__ct__Q3_2nn2sl11DataCreatorFv(&mInstance) != nullptr) {
mIconInfoAccessor = details::IconInfoAccessorFromPtr(mInstance.iconInfoAccessor);
mAccountInfoAccessor = details::AccountInfoAccessorFromPtr(mInstance.accountInfoAccessor);
mSettingAccessor = details::SettingAccessorFromPtr(mInstance.settingInfoAccessor);
mTitleIconCache = details::TitleIconCacheFromPtr(mInstance.titleIconCache);
}
}
[[nodiscard]] details::IIconInfoAccessorBase &getIconInfoAccessor() {
return mIconInfoAccessor;
}
[[nodiscard]] details::IIconInfoAccessorBase &
getIconInfoAccessor()
{
return mIconInfoAccessor;
}
[[nodiscard]] details::IAccountInfoAccessorBase &getAccountInfoAccessor() {
return mAccountInfoAccessor;
}
[[nodiscard]] details::IAccountInfoAccessorBase &
getAccountInfoAccessor()
{
return mAccountInfoAccessor;
}
[[nodiscard]] details::ISettingAccessorBase &getSettingAccessor() {
return mSettingAccessor;
}
[[nodiscard]] details::ISettingAccessorBase &
getSettingAccessor()
{
return mSettingAccessor;
}
[[nodiscard]] details::ITitleIconCacheBase &getTitleIconCache() {
return mTitleIconCache;
}
[[nodiscard]] details::ITitleIconCacheBase &
getTitleIconCache()
{
return mTitleIconCache;
}
nn::Result Create(TransferableInfo *outTransferableInfo,
const TitleInfo *quickstartTitleInfos,
int numQuickstartTitleInfos,
const KillerNotification &killerNotification,
const TitleInfo &killerNotificationTitleInfo,
LaunchInfoDatabase &launchInfoDatabase) {
return details::Create__Q3_2nn2sl11DataCreatorFPQ3_2nn2sl16TransferableInfoPCQ3_2nn2sl9TitleInfoiRCQ3_2nn2sl18KillerNotificationRCQ3_2nn2sl9TitleInfoRQ3_2nn2sl18LaunchInfoDatabase(
&mInstance, outTransferableInfo, quickstartTitleInfos, numQuickstartTitleInfos, killerNotification, killerNotificationTitleInfo, launchInfoDatabase);
}
nn::Result
Create(TransferableInfo *outTransferableInfo,
const TitleInfo *quickstartTitleInfos,
int numQuickstartTitleInfos,
const KillerNotification &killerNotification,
const TitleInfo &killerNotificationTitleInfo,
LaunchInfoDatabase &launchInfoDatabase)
{
return details::Create__Q3_2nn2sl11DataCreatorFPQ3_2nn2sl16TransferableInfoPCQ3_2nn2sl9TitleInfoiRCQ3_2nn2sl18KillerNotificationRCQ3_2nn2sl9TitleInfoRQ3_2nn2sl18LaunchInfoDatabase(
&mInstance, outTransferableInfo, quickstartTitleInfos, numQuickstartTitleInfos, killerNotification, killerNotificationTitleInfo, launchInfoDatabase);
}
void Initialize(details::IIconInfoAccessorBase &iconInfoAccessor, details::IAccountInfoAccessorBase &accountInfoAccessor, details::ISettingAccessorBase &settingAccessor, details::ITitleIconCacheBase &titleIconCache) {
details::Initialize__Q3_2nn2sl11DataCreatorFRQ3_2nn2sl17IIconInfoAccessorRQ3_2nn2sl20IAccountInfoAccessorRQ3_2nn2sl16ISettingAccessorRQ3_2nn2sl15ITitleIconCache(
&mInstance, iconInfoAccessor.GetInternal(), accountInfoAccessor.GetInternal(), settingAccessor.GetInternal(), titleIconCache.GetInternal());
mIconInfoAccessor = details::IconInfoAccessorFromPtr(mInstance.iconInfoAccessor);
mAccountInfoAccessor = details::AccountInfoAccessorFromPtr(mInstance.accountInfoAccessor);
mSettingAccessor = details::SettingAccessorFromPtr(mInstance.settingInfoAccessor);
mTitleIconCache = details::TitleIconCacheFromPtr(mInstance.titleIconCache);
}
void
Initialize(details::IIconInfoAccessorBase &iconInfoAccessor, details::IAccountInfoAccessorBase &accountInfoAccessor, details::ISettingAccessorBase &settingAccessor, details::ITitleIconCacheBase &titleIconCache)
{
details::Initialize__Q3_2nn2sl11DataCreatorFRQ3_2nn2sl17IIconInfoAccessorRQ3_2nn2sl20IAccountInfoAccessorRQ3_2nn2sl16ISettingAccessorRQ3_2nn2sl15ITitleIconCache(
&mInstance, iconInfoAccessor.GetInternal(), accountInfoAccessor.GetInternal(), settingAccessor.GetInternal(), titleIconCache.GetInternal());
mIconInfoAccessor = details::IconInfoAccessorFromPtr(mInstance.iconInfoAccessor);
mAccountInfoAccessor = details::AccountInfoAccessorFromPtr(mInstance.accountInfoAccessor);
mSettingAccessor = details::SettingAccessorFromPtr(mInstance.settingInfoAccessor);
mTitleIconCache = details::TitleIconCacheFromPtr(mInstance.titleIconCache);
}
~DataCreator() = default;
~DataCreator() = default;
private:
details::DataCreatorInternal mInstance = {};
details::IconInfoAccessorFromPtr mIconInfoAccessor;
details::AccountInfoAccessorFromPtr mAccountInfoAccessor;
details::SettingAccessorFromPtr mSettingAccessor;
details::TitleIconCacheFromPtr mTitleIconCache;
};
private:
details::DataCreatorInternal mInstance = {};
details::IconInfoAccessorFromPtr mIconInfoAccessor;
details::AccountInfoAccessorFromPtr mAccountInfoAccessor;
details::SettingAccessorFromPtr mSettingAccessor;
details::TitleIconCacheFromPtr mTitleIconCache;
};
}; // namespace nn::sl
#endif

View File

@ -1,91 +1,119 @@
#pragma once
#include <wut.h>
#include <nn/result.h>
#include <nn/sl/ISettingAccessor.h>
#include <nn/sl/ITimeAccessor.h>
#include <nn/sl/ITransferrer.h>
#include <nn/sl/KillerNotification.h>
#include <nn/sl/sl_cpp.h>
#include <wut.h>
#ifdef __cplusplus
namespace nn::sl {
namespace nn::sl
{
namespace details {
typedef struct WUT_PACKED DrcManagerInternal {
ITransferrerInternal *drcTransferrer;
ISettingAccessorInternal *settingsAccessor;
ITimeAccessorInternal *timeAccessor;
void *vtable;
} DrcManagerInternal;
WUT_CHECK_SIZE(DrcManagerInternal, 0x10);
WUT_CHECK_OFFSET(DrcManagerInternal, 0x00, drcTransferrer);
WUT_CHECK_OFFSET(DrcManagerInternal, 0x04, settingsAccessor);
WUT_CHECK_OFFSET(DrcManagerInternal, 0x08, timeAccessor);
WUT_CHECK_OFFSET(DrcManagerInternal, 0x0C, vtable);
namespace details
{
typedef struct WUT_PACKED DrcManagerInternal
{
ITransferrerInternal *drcTransferrer;
ISettingAccessorInternal *settingsAccessor;
ITimeAccessorInternal *timeAccessor;
void *vtable;
} DrcManagerInternal;
WUT_CHECK_SIZE(DrcManagerInternal, 0x10);
WUT_CHECK_OFFSET(DrcManagerInternal, 0x00, drcTransferrer);
WUT_CHECK_OFFSET(DrcManagerInternal, 0x04, settingsAccessor);
WUT_CHECK_OFFSET(DrcManagerInternal, 0x08, timeAccessor);
WUT_CHECK_OFFSET(DrcManagerInternal, 0x0C, vtable);
extern "C" DrcManagerInternal *__ct__Q3_2nn2sl10DrcManagerFv(DrcManagerInternal *);
extern "C" nn::Result CancelTransfer__Q3_2nn2sl10DrcManagerFv(DrcManagerInternal *);
extern "C" nn::Result PushNotification__Q3_2nn2sl10DrcManagerFPbPCQ3_2nn2sl18KillerNotificationbT3L(DrcManagerInternal *, bool *, const KillerNotification *, bool, bool, uint64_t);
extern "C" nn::Result Transfer__Q3_2nn2sl10DrcManagerFRCQ3_2nn2sl16TransferableInfobQ4_2nn2sl12ITransferrer12TransferMode(DrcManagerInternal *, TransferableInfo *, bool, TransferMode);
extern "C" DrcManagerInternal *
__ct__Q3_2nn2sl10DrcManagerFv(DrcManagerInternal *);
extern "C" nn::Result
CancelTransfer__Q3_2nn2sl10DrcManagerFv(DrcManagerInternal *);
extern "C" nn::Result
PushNotification__Q3_2nn2sl10DrcManagerFPbPCQ3_2nn2sl18KillerNotificationbT3L(DrcManagerInternal *, bool *, const KillerNotification *, bool, bool, uint64_t);
extern "C" nn::Result
Transfer__Q3_2nn2sl10DrcManagerFRCQ3_2nn2sl16TransferableInfobQ4_2nn2sl12ITransferrer12TransferMode(DrcManagerInternal *, TransferableInfo *, bool, TransferMode);
extern "C" nn::Result Initialize__Q3_2nn2sl10DrcManagerFRQ3_2nn2sl12ITransferrerRQ3_2nn2sl16ISettingAccessorRQ3_2nn2sl13ITimeAccessor(
DrcManagerInternal *, ITransferrerInternal *, ISettingAccessorInternal *, ITimeAccessorInternal *);
} // namespace details
class DrcManager {
public:
DrcManager() : mTransferrer(nullptr),
mSettingAccessor(nullptr),
mTimeAccessor(nullptr) {
if (__ct__Q3_2nn2sl10DrcManagerFv(&mInstance) != nullptr) {
mTransferrer = details::TransferrerFromPtr(mInstance.drcTransferrer);
mSettingAccessor = details::SettingAccessorFromPtr(mInstance.settingsAccessor);
mTimeAccessor = details::TimeAccessorFromPtr(mInstance.timeAccessor);
}
}
extern "C" nn::Result
Initialize__Q3_2nn2sl10DrcManagerFRQ3_2nn2sl12ITransferrerRQ3_2nn2sl16ISettingAccessorRQ3_2nn2sl13ITimeAccessor(
DrcManagerInternal *,
ITransferrerInternal *,
ISettingAccessorInternal *,
ITimeAccessorInternal *);
} // namespace details
class DrcManager
{
public:
DrcManager() :
mTransferrer(nullptr),
mSettingAccessor(nullptr),
mTimeAccessor(nullptr)
{
if (__ct__Q3_2nn2sl10DrcManagerFv(&mInstance) != nullptr) {
mTransferrer = details::TransferrerFromPtr(mInstance.drcTransferrer);
mSettingAccessor = details::SettingAccessorFromPtr(mInstance.settingsAccessor);
mTimeAccessor = details::TimeAccessorFromPtr(mInstance.timeAccessor);
}
}
~DrcManager() = default;
~DrcManager() = default;
details::ITransferrerBase &GetTransferrer() {
return mTransferrer;
}
details::ITransferrerBase &
GetTransferrer()
{
return mTransferrer;
}
details::ISettingAccessorBase &GetSettingAccessor() {
return mSettingAccessor;
}
details::ISettingAccessorBase &
GetSettingAccessor()
{
return mSettingAccessor;
}
details::ITimeAccessorBase &GetTimeAccessor() {
return mTimeAccessor;
}
details::ITimeAccessorBase &
GetTimeAccessor()
{
return mTimeAccessor;
}
nn::Result CancelTransfer() {
return CancelTransfer__Q3_2nn2sl10DrcManagerFv(&mInstance);
}
nn::Result
CancelTransfer()
{
return CancelTransfer__Q3_2nn2sl10DrcManagerFv(&mInstance);
}
nn::Result PushNotification(bool *u1, const KillerNotification *u2, bool u3, bool u4, uint64_t u5) {
return PushNotification__Q3_2nn2sl10DrcManagerFPbPCQ3_2nn2sl18KillerNotificationbT3L(&mInstance, u1, u2, u3, u4, u5);
}
nn::Result
PushNotification(bool *u1, const KillerNotification *u2, bool u3, bool u4, uint64_t u5)
{
return PushNotification__Q3_2nn2sl10DrcManagerFPbPCQ3_2nn2sl18KillerNotificationbT3L(&mInstance, u1, u2, u3, u4, u5);
}
nn::Result Transfer(TransferableInfo *u1, bool u2, TransferMode u3) {
return Transfer__Q3_2nn2sl10DrcManagerFRCQ3_2nn2sl16TransferableInfobQ4_2nn2sl12ITransferrer12TransferMode(&mInstance, u1, u2, u3);
}
nn::Result
Transfer(TransferableInfo *u1, bool u2, TransferMode u3)
{
return Transfer__Q3_2nn2sl10DrcManagerFRCQ3_2nn2sl16TransferableInfobQ4_2nn2sl12ITransferrer12TransferMode(&mInstance, u1, u2, u3);
}
void Initialize(details::ITransferrerBase &transferrer, details::ISettingAccessorBase &settingAccessor, details::ITimeAccessorBase &timeAccessor) {
Initialize__Q3_2nn2sl10DrcManagerFRQ3_2nn2sl12ITransferrerRQ3_2nn2sl16ISettingAccessorRQ3_2nn2sl13ITimeAccessor(
&mInstance,
transferrer.GetInternal(),
settingAccessor.GetInternal(),
timeAccessor.GetInternal());
}
void
Initialize(details::ITransferrerBase &transferrer, details::ISettingAccessorBase &settingAccessor, details::ITimeAccessorBase &timeAccessor)
{
Initialize__Q3_2nn2sl10DrcManagerFRQ3_2nn2sl12ITransferrerRQ3_2nn2sl16ISettingAccessorRQ3_2nn2sl13ITimeAccessor(
&mInstance,
transferrer.GetInternal(),
settingAccessor.GetInternal(),
timeAccessor.GetInternal());
}
private:
details::DrcManagerInternal mInstance = {};
private:
details::DrcManagerInternal mInstance = {};
details::TransferrerFromPtr mTransferrer;
details::SettingAccessorFromPtr mSettingAccessor;
details::TimeAccessorFromPtr mTimeAccessor;
};
details::TransferrerFromPtr mTransferrer;
details::SettingAccessorFromPtr mSettingAccessor;
details::TimeAccessorFromPtr mTimeAccessor;
};
} // namespace nn::sl
#endif

View File

@ -1,73 +1,94 @@
#pragma once
#include <wut.h>
#include <coreinit/filesystem.h>
#include <nn/result.h>
#include <nn/sl/IStream.h>
#include <nn/sl/details/IStreamDetails.h>
#include <wut.h>
#ifdef __cplusplus
namespace nn::sl {
namespace details {
typedef struct WUT_PACKED FileStreamInternal {
void *vtable;
FSClient *fsClient;
FSCmdBlock *fsCmdBlock;
FSFileHandle fileHandle;
} FileStreamInternal;
WUT_CHECK_SIZE(FileStreamInternal, 0x10);
WUT_CHECK_OFFSET(FileStreamInternal, 0x00, vtable);
WUT_CHECK_OFFSET(FileStreamInternal, 0x04, fsClient);
WUT_CHECK_OFFSET(FileStreamInternal, 0x08, fsCmdBlock);
WUT_CHECK_OFFSET(FileStreamInternal, 0x0C, fileHandle);
namespace nn::sl
{
namespace details
{
typedef struct WUT_PACKED FileStreamInternal
{
void *vtable;
FSClient *fsClient;
FSCmdBlock *fsCmdBlock;
FSFileHandle fileHandle;
} FileStreamInternal;
WUT_CHECK_SIZE(FileStreamInternal, 0x10);
WUT_CHECK_OFFSET(FileStreamInternal, 0x00, vtable);
WUT_CHECK_OFFSET(FileStreamInternal, 0x04, fsClient);
WUT_CHECK_OFFSET(FileStreamInternal, 0x08, fsCmdBlock);
WUT_CHECK_OFFSET(FileStreamInternal, 0x0C, fileHandle);
extern "C" nn::Result Initialize__Q3_2nn2sl10FileStreamFP8FSClientP10FSCmdBlockPCcT3(FileStreamInternal *, FSClient *, FSCmdBlock *, char const *, char const *);
extern "C" FileStreamInternal *__ct__Q3_2nn2sl10FileStreamFv(FileStreamInternal *);
extern "C" void __dt__Q3_2nn2sl10FileStreamFv(FileStreamInternal *, int);
} // namespace details
extern "C" nn::Result
Initialize__Q3_2nn2sl10FileStreamFP8FSClientP10FSCmdBlockPCcT3(FileStreamInternal *, FSClient *, FSCmdBlock *, char const *, char const *);
extern "C" FileStreamInternal *
__ct__Q3_2nn2sl10FileStreamFv(FileStreamInternal *);
extern "C" void
__dt__Q3_2nn2sl10FileStreamFv(FileStreamInternal *, int);
} // namespace details
class FileStream : public details::IStreamBase {
public:
FileStream() {
__ct__Q3_2nn2sl10FileStreamFv(&mInstance);
}
class FileStream : public details::IStreamBase
{
public:
FileStream()
{
__ct__Q3_2nn2sl10FileStreamFv(&mInstance);
}
~FileStream() override {
__dt__Q3_2nn2sl10FileStreamFv(&mInstance, 2);
}
~FileStream() override
{
__dt__Q3_2nn2sl10FileStreamFv(&mInstance, 2);
}
nn::Result Read(uint32_t *bytesRead, void *buffer, uint32_t readSize) override {
auto *base = reinterpret_cast<details::IStreamInternal *>(&mInstance);
return base->vtable->ReadFn(base, bytesRead, buffer, readSize);
}
nn::Result Write(uint32_t *bytesWritten, void *buffer, uint32_t readSize) override {
auto *base = reinterpret_cast<details::IStreamInternal *>(&mInstance);
return base->vtable->WriteFn(base, bytesWritten, buffer, readSize);
}
nn::Result GetSize(uint32_t *fileSize) override {
auto *base = reinterpret_cast<details::IStreamInternal *>(&mInstance);
return base->vtable->GetSizeFn(base, fileSize);
}
nn::Result Seek(int32_t offset, nn::sl::SeekOrigin seekOrigin) override {
auto *base = reinterpret_cast<details::IStreamInternal *>(&mInstance);
return base->vtable->SeekFn(base, offset, seekOrigin);
}
nn::Result
Read(uint32_t *bytesRead, void *buffer, uint32_t readSize) override
{
auto *base = reinterpret_cast<details::IStreamInternal *>(&mInstance);
return base->vtable->ReadFn(base, bytesRead, buffer, readSize);
}
nn::Result
Write(uint32_t *bytesWritten, void *buffer, uint32_t readSize) override
{
auto *base = reinterpret_cast<details::IStreamInternal *>(&mInstance);
return base->vtable->WriteFn(base, bytesWritten, buffer, readSize);
}
nn::Result
GetSize(uint32_t *fileSize) override
{
auto *base = reinterpret_cast<details::IStreamInternal *>(&mInstance);
return base->vtable->GetSizeFn(base, fileSize);
}
nn::Result
Seek(int32_t offset, nn::sl::SeekOrigin seekOrigin) override
{
auto *base = reinterpret_cast<details::IStreamInternal *>(&mInstance);
return base->vtable->SeekFn(base, offset, seekOrigin);
}
/**
/**
* The given client and cmd must be valid during the whole liftime of the filestream
*/
nn::Result Initialize(FSClient *client, FSCmdBlock *cmdBlock, char const *path, char const *mode) {
return Initialize__Q3_2nn2sl10FileStreamFP8FSClientP10FSCmdBlockPCcT3(&mInstance, client, cmdBlock, path, mode);
}
nn::Result
Initialize(FSClient *client, FSCmdBlock *cmdBlock, char const *path, char const *mode)
{
return Initialize__Q3_2nn2sl10FileStreamFP8FSClientP10FSCmdBlockPCcT3(&mInstance, client, cmdBlock, path, mode);
}
details::IStreamInternal *GetInternal() override {
return reinterpret_cast<details::IStreamInternal *>(&mInstance);
}
details::IStreamInternal *
GetInternal() override
{
return reinterpret_cast<details::IStreamInternal *>(&mInstance);
}
private:
details::FileStreamInternal mInstance = {};
};
private:
details::FileStreamInternal mInstance = {};
};
}; // namespace nn::sl

View File

@ -1,55 +1,70 @@
#pragma once
#include <wut.h>
#include <nn/result.h>
#include <nn/sl/details/IAccountInfoAccessorDetails.h>
#include <wut.h>
#ifdef __cplusplus
namespace nn::sl {
class IAccountInfoAccessor : public details::IAccountInfoAccessorBase {
namespace nn::sl
{
class IAccountInfoAccessor : public details::IAccountInfoAccessorBase
{
public:
IAccountInfoAccessor() {
InitInternalVtable();
}
public:
IAccountInfoAccessor()
{
InitInternalVtable();
}
IAccountInfoAccessor(IAccountInfoAccessor &src) {
InitInternalVtable();
}
IAccountInfoAccessor(IAccountInfoAccessor &src)
{
InitInternalVtable();
}
IAccountInfoAccessor &operator=(const IAccountInfoAccessor &other) {
InitInternalVtable();
return *this;
}
IAccountInfoAccessor &
operator=(const IAccountInfoAccessor &other)
{
InitInternalVtable();
return *this;
}
IAccountInfoAccessor &operator=(IAccountInfoAccessor &&src) noexcept {
InitInternalVtable();
return *this;
}
IAccountInfoAccessor &
operator=(IAccountInfoAccessor &&src) noexcept
{
InitInternalVtable();
return *this;
}
~IAccountInfoAccessor() override = default;
~IAccountInfoAccessor() override = default;
private:
static nn::Result GetWrapper(details::IAccountInfoAccessorInternal *instance, AccountInfo *outAccountInfo) {
return instance->vtable->instance->Get(outAccountInfo);
}
private:
static nn::Result
GetWrapper(details::IAccountInfoAccessorInternal *instance, AccountInfo *outAccountInfo)
{
return instance->vtable->instance->Get(outAccountInfo);
}
details::IAccountInfoAccessorInternal *GetInternal() override {
return &mInstance;
}
details::IAccountInfoAccessorInternal *
GetInternal() override
{
return &mInstance;
}
void InitInternalVtable() {
mVTable = {.instance = this,
.GetFn = &GetWrapper};
mInstance.vtable = &mVTable;
}
void
InitInternalVtable()
{
mVTable = {.instance = this,
.GetFn = &GetWrapper};
mInstance.vtable = &mVTable;
}
details::IAccountInfoAccessorInternal mInstance{};
details::IAccountInfoAccessorInternalVTable mVTable{};
};
details::IAccountInfoAccessorInternal mInstance{};
details::IAccountInfoAccessorInternalVTable mVTable{};
};
details::IAccountInfoAccessorBase &GetDefaultAccountInfoAccessor();
details::IAccountInfoAccessorBase &
GetDefaultAccountInfoAccessor();
} // namespace nn::sl
#endif

View File

@ -1,58 +1,73 @@
#pragma once
#include <wut.h>
#include <nn/result.h>
#include <nn/sl/details/IBlackListAccessorDetails.h>
#include <nn/sl/sl_cpp.h>
#include <wut.h>
#ifdef __cplusplus
namespace nn::sl {
namespace nn::sl
{
class IBlackListAccessor : public details::IBlackListAccessorBase {
class IBlackListAccessor : public details::IBlackListAccessorBase
{
public:
IBlackListAccessor() {
InitInternalVtable();
}
public:
IBlackListAccessor()
{
InitInternalVtable();
}
IBlackListAccessor(IBlackListAccessor &src) {
InitInternalVtable();
}
IBlackListAccessor(IBlackListAccessor &src)
{
InitInternalVtable();
}
IBlackListAccessor &operator=(const IBlackListAccessor &other) {
InitInternalVtable();
return *this;
}
IBlackListAccessor &
operator=(const IBlackListAccessor &other)
{
InitInternalVtable();
return *this;
}
IBlackListAccessor &operator=(IBlackListAccessor &&src) noexcept {
InitInternalVtable();
return *this;
}
IBlackListAccessor &
operator=(IBlackListAccessor &&src) noexcept
{
InitInternalVtable();
return *this;
}
~IBlackListAccessor() override = default;
~IBlackListAccessor() override = default;
private:
static nn::Result GetWrapper(details::IBlackListAccessorInternal *instance, nn::sl::TitleInfo *outTitleInfos, int *outTitleInfosSize, int maxTitleInfos) {
return instance->vtable->instance->Get(outTitleInfos, outTitleInfosSize, maxTitleInfos);
}
private:
static nn::Result
GetWrapper(details::IBlackListAccessorInternal *instance, nn::sl::TitleInfo *outTitleInfos, int *outTitleInfosSize, int maxTitleInfos)
{
return instance->vtable->instance->Get(outTitleInfos, outTitleInfosSize, maxTitleInfos);
}
details::IBlackListAccessorInternal *GetInternal() override {
return &mInstance;
}
details::IBlackListAccessorInternal *
GetInternal() override
{
return &mInstance;
}
void InitInternalVtable() {
mVTable = {.instance = this,
.GetFn = &GetWrapper};
mInstance.vtable = &mVTable;
}
void
InitInternalVtable()
{
mVTable = {.instance = this,
.GetFn = &GetWrapper};
mInstance.vtable = &mVTable;
}
details::IBlackListAccessorInternal mInstance{};
details::IBlackListAccessorInternalVTable mVTable{};
};
details::IBlackListAccessorInternal mInstance{};
details::IBlackListAccessorInternalVTable mVTable{};
};
details::IBlackListAccessorBase &GetDefaultBlackListAccessor();
details::IBlackListAccessorBase &
GetDefaultBlackListAccessor();
} // namespace nn::sl
#endif

View File

@ -1,57 +1,72 @@
#pragma once
#include <wut.h>
#include <nn/result.h>
#include <nn/sl/details/IDefaultTitleAccessorDetails.h>
#include <nn/sl/sl_cpp.h>
#include <wut.h>
#ifdef __cplusplus
namespace nn::sl {
namespace nn::sl
{
class IDefaultTitleAccessor : public details::IDefaultTitleAccessorBase {
class IDefaultTitleAccessor : public details::IDefaultTitleAccessorBase
{
public:
IDefaultTitleAccessor() {
InitInternalVtable();
}
public:
IDefaultTitleAccessor()
{
InitInternalVtable();
}
IDefaultTitleAccessor(IDefaultTitleAccessor &src) {
InitInternalVtable();
}
IDefaultTitleAccessor(IDefaultTitleAccessor &src)
{
InitInternalVtable();
}
IDefaultTitleAccessor &operator=(const IDefaultTitleAccessor &other) {
InitInternalVtable();
return *this;
}
IDefaultTitleAccessor &
operator=(const IDefaultTitleAccessor &other)
{
InitInternalVtable();
return *this;
}
IDefaultTitleAccessor &operator=(IDefaultTitleAccessor &&src) noexcept {
InitInternalVtable();
return *this;
}
IDefaultTitleAccessor &
operator=(IDefaultTitleAccessor &&src) noexcept
{
InitInternalVtable();
return *this;
}
~IDefaultTitleAccessor() override = default;
~IDefaultTitleAccessor() override = default;
private:
static nn::Result GetWrapper(details::IDefaultTitleAccessorInternal *instance, nn::sl::TitleInfo *outTitleInfos, int *outTitleInfosSize, int maxTitleInfos) {
return instance->vtable->instance->Get(outTitleInfos, outTitleInfosSize, maxTitleInfos);
}
private:
static nn::Result
GetWrapper(details::IDefaultTitleAccessorInternal *instance, nn::sl::TitleInfo *outTitleInfos, int *outTitleInfosSize, int maxTitleInfos)
{
return instance->vtable->instance->Get(outTitleInfos, outTitleInfosSize, maxTitleInfos);
}
details::IDefaultTitleAccessorInternal *GetInternal() override {
return &mInstance;
}
details::IDefaultTitleAccessorInternal *
GetInternal() override
{
return &mInstance;
}
void InitInternalVtable() {
mVTable = {.instance = this,
.GetFn = &GetWrapper};
mInstance.vtable = &mVTable;
}
void
InitInternalVtable()
{
mVTable = {.instance = this,
.GetFn = &GetWrapper};
mInstance.vtable = &mVTable;
}
details::IDefaultTitleAccessorInternal mInstance{};
details::IDefaultTitleAccessorInternalVTable mVTable{};
};
details::IDefaultTitleAccessorInternal mInstance{};
details::IDefaultTitleAccessorInternalVTable mVTable{};
};
details::IDefaultTitleAccessorBase &GetDefaultDefaultTitleAccessor();
details::IDefaultTitleAccessorBase &
GetDefaultDefaultTitleAccessor();
} // namespace nn::sl
#endif

View File

@ -1,57 +1,72 @@
#pragma once
#include <wut.h>
#include <nn/result.h>
#include <nn/sl/details/IDiscCachedTitleAccessorDetails.h>
#include <nn/sl/sl_cpp.h>
#include <wut.h>
#ifdef __cplusplus
namespace nn::sl {
namespace nn::sl
{
class DiscCachedTitleAccessor : public details::IDiscCachedTitleAccessorBase {
class DiscCachedTitleAccessor : public details::IDiscCachedTitleAccessorBase
{
public:
DiscCachedTitleAccessor() {
InitInternalVtable();
}
public:
DiscCachedTitleAccessor()
{
InitInternalVtable();
}
DiscCachedTitleAccessor(DiscCachedTitleAccessor &src) {
InitInternalVtable();
}
DiscCachedTitleAccessor(DiscCachedTitleAccessor &src)
{
InitInternalVtable();
}
DiscCachedTitleAccessor &operator=(const DiscCachedTitleAccessor &other) {
InitInternalVtable();
return *this;
}
DiscCachedTitleAccessor &
operator=(const DiscCachedTitleAccessor &other)
{
InitInternalVtable();
return *this;
}
DiscCachedTitleAccessor &operator=(DiscCachedTitleAccessor &&src) noexcept {
InitInternalVtable();
return *this;
}
DiscCachedTitleAccessor &
operator=(DiscCachedTitleAccessor &&src) noexcept
{
InitInternalVtable();
return *this;
}
~DiscCachedTitleAccessor() override = default;
~DiscCachedTitleAccessor() override = default;
private:
static nn::Result GetWrapper(details::IDiscCachedTitleAccessorInternal *instance, nn::sl::TitleInfo *outTitleInfos, int *outTitleInfosSize, int maxTitleInfos) {
return instance->vtable->instance->Get(outTitleInfos, outTitleInfosSize, maxTitleInfos);
}
private:
static nn::Result
GetWrapper(details::IDiscCachedTitleAccessorInternal *instance, nn::sl::TitleInfo *outTitleInfos, int *outTitleInfosSize, int maxTitleInfos)
{
return instance->vtable->instance->Get(outTitleInfos, outTitleInfosSize, maxTitleInfos);
}
details::IDiscCachedTitleAccessorInternal *GetInternal() override {
return &mInstance;
}
details::IDiscCachedTitleAccessorInternal *
GetInternal() override
{
return &mInstance;
}
void InitInternalVtable() {
mVTable = {.instance = this,
.GetFn = &GetWrapper};
mInstance.vtable = &mVTable;
}
void
InitInternalVtable()
{
mVTable = {.instance = this,
.GetFn = &GetWrapper};
mInstance.vtable = &mVTable;
}
details::IDiscCachedTitleAccessorInternal mInstance{};
details::IDiscCachedTitleAccessorInternalVTable mVTable{};
};
details::IDiscCachedTitleAccessorInternal mInstance{};
details::IDiscCachedTitleAccessorInternalVTable mVTable{};
};
details::IDiscCachedTitleAccessorBase &GetDefaultDiscCachedTitleAccessor();
details::IDiscCachedTitleAccessorBase &
GetDefaultDiscCachedTitleAccessor();
} // namespace nn::sl
#endif

View File

@ -1,60 +1,77 @@
#pragma once
#include <wut.h>
#include <nn/result.h>
#include <nn/sl/details/IIconInfoAccessorDetails.h>
#include <nn/sl/sl_cpp.h>
#include <wut.h>
#ifdef __cplusplus
namespace nn::sl {
class IIconInfoAccessor : public details::IIconInfoAccessorBase {
namespace nn::sl
{
class IIconInfoAccessor : public details::IIconInfoAccessorBase
{
public:
IIconInfoAccessor() {
InitInternalVtable();
}
public:
IIconInfoAccessor()
{
InitInternalVtable();
}
IIconInfoAccessor(IIconInfoAccessor &src) {
InitInternalVtable();
}
IIconInfoAccessor(IIconInfoAccessor &src)
{
InitInternalVtable();
}
IIconInfoAccessor &operator=(const IIconInfoAccessor &other) {
InitInternalVtable();
return *this;
}
IIconInfoAccessor &
operator=(const IIconInfoAccessor &other)
{
InitInternalVtable();
return *this;
}
IIconInfoAccessor &operator=(IIconInfoAccessor &&src) noexcept {
InitInternalVtable();
return *this;
}
IIconInfoAccessor &
operator=(IIconInfoAccessor &&src) noexcept
{
InitInternalVtable();
return *this;
}
~IIconInfoAccessor() override = default;
~IIconInfoAccessor() override = default;
private:
static nn::Result GetTitleIconInfoWrapper(details::IIconInfoAccessorInternal *instance, nn::sl::IconInfo *outIconInfo, const nn::sl::TitleInfo &titleInfo, nn::sl::Language language) {
return instance->vtable->instance->GetTitleIconInfo(outIconInfo, titleInfo, language);
}
static nn::Result GetMiiIconWrapper(details::IIconInfoAccessorInternal *instance, void *buffer, uint32_t buffer_size, uint32_t slot) {
return instance->vtable->instance->GetMiiIcon(buffer, buffer_size, slot);
}
private:
static nn::Result
GetTitleIconInfoWrapper(details::IIconInfoAccessorInternal *instance, nn::sl::IconInfo *outIconInfo, const nn::sl::TitleInfo &titleInfo, nn::sl::Language language)
{
return instance->vtable->instance->GetTitleIconInfo(outIconInfo, titleInfo, language);
}
static nn::Result
GetMiiIconWrapper(details::IIconInfoAccessorInternal *instance, void *buffer, uint32_t buffer_size, uint32_t slot)
{
return instance->vtable->instance->GetMiiIcon(buffer, buffer_size, slot);
}
details::IIconInfoAccessorInternal *GetInternal() override {
return &mInstance;
}
details::IIconInfoAccessorInternal *
GetInternal() override
{
return &mInstance;
}
void InitInternalVtable() {
mVTable = {.instance = this,
.GetTitleIconInfoFn = GetTitleIconInfoWrapper,
.GetMiiIconFn = GetMiiIconWrapper};
mInstance.vtable = &mVTable;
}
void
InitInternalVtable()
{
mVTable = {.instance = this,
.GetTitleIconInfoFn = GetTitleIconInfoWrapper,
.GetMiiIconFn = GetMiiIconWrapper};
mInstance.vtable = &mVTable;
}
details::IIconInfoAccessorInternal mInstance{};
details::IIconInfoAccessorInternalVTable mVTable{};
};
details::IIconInfoAccessorInternal mInstance{};
details::IIconInfoAccessorInternalVTable mVTable{};
};
details::IIconInfoAccessorBase &GetDefaultIconInfoAccessor();
details::IIconInfoAccessorBase &
GetDefaultIconInfoAccessor();
} // namespace nn::sl
#endif

View File

@ -1,57 +1,72 @@
#pragma once
#include <wut.h>
#include <nn/result.h>
#include <nn/sl/details/IInstalledTitleListAccessorDetails.h>
#include <nn/sl/sl_cpp.h>
#include <wut.h>
#ifdef __cplusplus
namespace nn::sl {
class IInstalledTitleListAccessor : public details::IInstalledTitleListAccessorBase {
namespace nn::sl
{
class IInstalledTitleListAccessor : public details::IInstalledTitleListAccessorBase
{
public:
IInstalledTitleListAccessor() {
InitInternalVtable();
}
public:
IInstalledTitleListAccessor()
{
InitInternalVtable();
}
IInstalledTitleListAccessor(IInstalledTitleListAccessor &src) {
InitInternalVtable();
}
IInstalledTitleListAccessor(IInstalledTitleListAccessor &src)
{
InitInternalVtable();
}
IInstalledTitleListAccessor &operator=(const IInstalledTitleListAccessor &other) {
InitInternalVtable();
return *this;
}
IInstalledTitleListAccessor &
operator=(const IInstalledTitleListAccessor &other)
{
InitInternalVtable();
return *this;
}
IInstalledTitleListAccessor &operator=(IInstalledTitleListAccessor &&src) noexcept {
InitInternalVtable();
return *this;
}
IInstalledTitleListAccessor &
operator=(IInstalledTitleListAccessor &&src) noexcept
{
InitInternalVtable();
return *this;
}
~IInstalledTitleListAccessor() override = default;
~IInstalledTitleListAccessor() override = default;
private:
static nn::Result GetWrapper(details::IInstalledTitleListAccessorInternal *instance, nn::sl::TitleInfo *outInstalledTitleInfos, int *outInstalledTitleInfosSize, int maxInstalledTitleInfos) {
return instance->vtable->instance->Get(outInstalledTitleInfos, outInstalledTitleInfosSize, maxInstalledTitleInfos);
}
private:
static nn::Result
GetWrapper(details::IInstalledTitleListAccessorInternal *instance, nn::sl::TitleInfo *outInstalledTitleInfos, int *outInstalledTitleInfosSize, int maxInstalledTitleInfos)
{
return instance->vtable->instance->Get(outInstalledTitleInfos, outInstalledTitleInfosSize, maxInstalledTitleInfos);
}
details::IInstalledTitleListAccessorInternal *GetInternal() override {
return &mInstance;
}
details::IInstalledTitleListAccessorInternal *
GetInternal() override
{
return &mInstance;
}
void InitInternalVtable() {
mVTable = {.instance = this,
.GetFn = &GetWrapper};
mInstance.vtable = &mVTable;
}
void
InitInternalVtable()
{
mVTable = {.instance = this,
.GetFn = &GetWrapper};
mInstance.vtable = &mVTable;
}
details::IInstalledTitleListAccessorInternal mInstance{};
details::IInstalledTitleListAccessorInternalVTable mVTable{};
};
details::IInstalledTitleListAccessorInternal mInstance{};
details::IInstalledTitleListAccessorInternalVTable mVTable{};
};
details::IInstalledTitleListAccessorBase &GetDefaultInstalledTitleListAccessor();
details::IInstalledTitleListAccessorBase &
GetDefaultInstalledTitleListAccessor();
} // namespace nn::sl
#endif

View File

@ -1,56 +1,71 @@
#pragma once
#include <wut.h>
#include <nn/result.h>
#include <nn/sl/details/IKillerNotificationAccessorDetails.h>
#include <nn/sl/sl_cpp.h>
#include <wut.h>
#ifdef __cplusplus
namespace nn::sl {
class IKillerNotificationAccessor : public details::IKillerNotificationAccessorBase {
namespace nn::sl
{
class IKillerNotificationAccessor : public details::IKillerNotificationAccessorBase
{
public:
IKillerNotificationAccessor() {
InitInternalVtable();
}
public:
IKillerNotificationAccessor()
{
InitInternalVtable();
}
IKillerNotificationAccessor(IKillerNotificationAccessor &src) {
InitInternalVtable();
}
IKillerNotificationAccessor(IKillerNotificationAccessor &src)
{
InitInternalVtable();
}
IKillerNotificationAccessor &operator=(const IKillerNotificationAccessor &other) {
InitInternalVtable();
return *this;
}
IKillerNotificationAccessor &
operator=(const IKillerNotificationAccessor &other)
{
InitInternalVtable();
return *this;
}
IKillerNotificationAccessor &operator=(IKillerNotificationAccessor &&src) noexcept {
InitInternalVtable();
return *this;
}
IKillerNotificationAccessor &
operator=(IKillerNotificationAccessor &&src) noexcept
{
InitInternalVtable();
return *this;
}
~IKillerNotificationAccessor() override = default;
~IKillerNotificationAccessor() override = default;
private:
static nn::Result GetWrapper(details::IKillerNotificationAccessorInternal *instance, KillerNotification *outBuffer, int *outNum, int outBufferNum) {
return instance->vtable->instance->Get(outBuffer, outNum, outBufferNum);
}
private:
static nn::Result
GetWrapper(details::IKillerNotificationAccessorInternal *instance, KillerNotification *outBuffer, int *outNum, int outBufferNum)
{
return instance->vtable->instance->Get(outBuffer, outNum, outBufferNum);
}
details::IKillerNotificationAccessorInternal *GetInternal() override {
return &mInstance;
}
details::IKillerNotificationAccessorInternal *
GetInternal() override
{
return &mInstance;
}
void InitInternalVtable() {
mVTable = {.instance = this,
.GetFn = &GetWrapper};
mInstance.vtable = &mVTable;
}
void
InitInternalVtable()
{
mVTable = {.instance = this,
.GetFn = &GetWrapper};
mInstance.vtable = &mVTable;
}
details::IKillerNotificationAccessorInternal mInstance{};
details::IKillerNotificationAccessorInternalVTable mVTable{};
};
details::IKillerNotificationAccessorInternal mInstance{};
details::IKillerNotificationAccessorInternalVTable mVTable{};
};
details::IKillerNotificationAccessorBase &GetDefaultKillerNotificationAccessor();
details::IKillerNotificationAccessorBase &
GetDefaultKillerNotificationAccessor();
} // namespace nn::sl
#endif

View File

@ -1,61 +1,78 @@
#pragma once
#include <wut.h>
#include <nn/result.h>
#include <nn/sl/details/ILaunchedTitleListAccessoDetails.h>
#include <wut.h>
#ifdef __cplusplus
namespace nn::sl {
class ILaunchedTitleListAccessor : public details::ILaunchedTitleListAccessorBase {
namespace nn::sl
{
class ILaunchedTitleListAccessor : public details::ILaunchedTitleListAccessorBase
{
public:
ILaunchedTitleListAccessor() {
InitInternalVtable();
}
public:
ILaunchedTitleListAccessor()
{
InitInternalVtable();
}
ILaunchedTitleListAccessor(ILaunchedTitleListAccessor &src) {
InitInternalVtable();
}
ILaunchedTitleListAccessor(ILaunchedTitleListAccessor &src)
{
InitInternalVtable();
}
ILaunchedTitleListAccessor &operator=(const ILaunchedTitleListAccessor &other) {
InitInternalVtable();
return *this;
}
ILaunchedTitleListAccessor &
operator=(const ILaunchedTitleListAccessor &other)
{
InitInternalVtable();
return *this;
}
ILaunchedTitleListAccessor &operator=(ILaunchedTitleListAccessor &&src) noexcept {
InitInternalVtable();
return *this;
}
ILaunchedTitleListAccessor &
operator=(ILaunchedTitleListAccessor &&src) noexcept
{
InitInternalVtable();
return *this;
}
~ILaunchedTitleListAccessor() override = default;
~ILaunchedTitleListAccessor() override = default;
private:
static nn::Result GetByAccountWrapper(details::ILaunchedTitleListAccessorInternal *instance, nn::sl::TitleInfo *outTitleInfos, int *outTitleInfoSize, int inTitleInfosSize, int userId) {
return instance->vtable->instance->GetByAccount(outTitleInfos, outTitleInfoSize, inTitleInfosSize, userId);
}
private:
static nn::Result
GetByAccountWrapper(details::ILaunchedTitleListAccessorInternal *instance, nn::sl::TitleInfo *outTitleInfos, int *outTitleInfoSize, int inTitleInfosSize, int userId)
{
return instance->vtable->instance->GetByAccount(outTitleInfos, outTitleInfoSize, inTitleInfosSize, userId);
}
details::ILaunchedTitleListAccessorInternal *GetInternal() override {
return &mInstance;
}
details::ILaunchedTitleListAccessorInternal *
GetInternal() override
{
return &mInstance;
}
void InitInternalVtable() {
mVTable = {.instance = this,
.GetByAccountFn = &GetByAccountWrapper};
mInstance.vtable = &mVTable;
}
void
InitInternalVtable()
{
mVTable = {.instance = this,
.GetByAccountFn = &GetByAccountWrapper};
mInstance.vtable = &mVTable;
}
details::ILaunchedTitleListAccessorInternal mInstance{};
details::ILaunchedTitleListAccessorInternalVTable mVTable{};
};
details::ILaunchedTitleListAccessorInternal mInstance{};
details::ILaunchedTitleListAccessorInternalVTable mVTable{};
};
enum LaunchedTitleListAccessorType {
TITLE_LIST_ACCESSOR_LAUNCHED_TITLES = 0,
TITLE_LIST_ACCESSOR_PLAY_STATS = 1,
};
enum LaunchedTitleListAccessorType
{
TITLE_LIST_ACCESSOR_LAUNCHED_TITLES = 0,
TITLE_LIST_ACCESSOR_PLAY_STATS = 1,
};
details::ILaunchedTitleListAccessorBase &GetDefaultLaunchedTitleListAccessor(LaunchedTitleListAccessorType type);
details::ILaunchedTitleListAccessorBase &GetDefaultLaunchedTitleListAccessor();
details::ILaunchedTitleListAccessorBase &
GetDefaultLaunchedTitleListAccessor(LaunchedTitleListAccessorType type);
details::ILaunchedTitleListAccessorBase &
GetDefaultLaunchedTitleListAccessor();
} // namespace nn::sl
#endif

View File

@ -1,58 +1,73 @@
#pragma once
#include <wut.h>
#include <nn/result.h>
#include <nn/sl/details/IMetaInfoAccessorDetails.h>
#include <nn/sl/sl_cpp.h>
#include <wut.h>
#ifdef __cplusplus
namespace nn::sl {
namespace nn::sl
{
class MetaInfoAccessor : public details::IMetaInfoAccessorBase {
class MetaInfoAccessor : public details::IMetaInfoAccessorBase
{
public:
MetaInfoAccessor() {
InitInternalVtable();
}
public:
MetaInfoAccessor()
{
InitInternalVtable();
}
MetaInfoAccessor(MetaInfoAccessor &src) {
InitInternalVtable();
}
MetaInfoAccessor(MetaInfoAccessor &src)
{
InitInternalVtable();
}
MetaInfoAccessor &operator=(const MetaInfoAccessor &other) {
InitInternalVtable();
return *this;
}
MetaInfoAccessor &
operator=(const MetaInfoAccessor &other)
{
InitInternalVtable();
return *this;
}
MetaInfoAccessor &operator=(MetaInfoAccessor &&src) noexcept {
InitInternalVtable();
return *this;
}
MetaInfoAccessor &
operator=(MetaInfoAccessor &&src) noexcept
{
InitInternalVtable();
return *this;
}
~MetaInfoAccessor() override = default;
~MetaInfoAccessor() override = default;
private:
static nn::Result GetWrapper(details::IMetaInfoAccessorInternal *instance, nn::sl::TitleMetaInfo *outMetaInfo, const nn::sl::TitleInfo &titleInfo) {
return instance->vtable->instance->Get(outMetaInfo, titleInfo);
}
private:
static nn::Result
GetWrapper(details::IMetaInfoAccessorInternal *instance, nn::sl::TitleMetaInfo *outMetaInfo, const nn::sl::TitleInfo &titleInfo)
{
return instance->vtable->instance->Get(outMetaInfo, titleInfo);
}
details::IMetaInfoAccessorInternal *GetInternal() override {
return &mInstance;
}
details::IMetaInfoAccessorInternal *
GetInternal() override
{
return &mInstance;
}
void InitInternalVtable() {
mVTable = {.instance = this,
.GetFn = &GetWrapper};
mInstance.vtable = &mVTable;
}
void
InitInternalVtable()
{
mVTable = {.instance = this,
.GetFn = &GetWrapper};
mInstance.vtable = &mVTable;
}
details::IMetaInfoAccessorInternal mInstance{};
details::IMetaInfoAccessorInternalVTable mVTable{};
};
details::IMetaInfoAccessorInternal mInstance{};
details::IMetaInfoAccessorInternalVTable mVTable{};
};
details::IMetaInfoAccessorBase &GetDefaultMetaInfoAccessor();
details::IMetaInfoAccessorBase &
GetDefaultMetaInfoAccessor();
} // namespace nn::sl
#endif

View File

@ -1,55 +1,70 @@
#pragma once
#include <wut.h>
#include <nn/result.h>
#include <nn/sl/details/IPreferentialTitleAccessorDetails.h>
#include <wut.h>
#ifdef __cplusplus
namespace nn::sl {
class IPreferentialTitleAccessor : public details::IPreferentialTitleAccessorBase {
namespace nn::sl
{
class IPreferentialTitleAccessor : public details::IPreferentialTitleAccessorBase
{
public:
IPreferentialTitleAccessor() {
InitInternalVtable();
}
public:
IPreferentialTitleAccessor()
{
InitInternalVtable();
}
IPreferentialTitleAccessor(IPreferentialTitleAccessor &src) {
InitInternalVtable();
}
IPreferentialTitleAccessor(IPreferentialTitleAccessor &src)
{
InitInternalVtable();
}
IPreferentialTitleAccessor &operator=(const IPreferentialTitleAccessor &other) {
InitInternalVtable();
return *this;
}
IPreferentialTitleAccessor &
operator=(const IPreferentialTitleAccessor &other)
{
InitInternalVtable();
return *this;
}
IPreferentialTitleAccessor &operator=(IPreferentialTitleAccessor &&src) noexcept {
InitInternalVtable();
return *this;
}
IPreferentialTitleAccessor &
operator=(IPreferentialTitleAccessor &&src) noexcept
{
InitInternalVtable();
return *this;
}
~IPreferentialTitleAccessor() override = default;
~IPreferentialTitleAccessor() override = default;
private:
static nn::Result GetWrapper(details::IPreferentialTitleAccessorInternal *instance, TitleInfo *outTitleInfo, uint32_t *outTitleInfoSize, int maxTitleInfo, uint32_t u1) {
return instance->vtable->instance->Get(outTitleInfo, outTitleInfoSize, maxTitleInfo, u1);
}
private:
static nn::Result
GetWrapper(details::IPreferentialTitleAccessorInternal *instance, TitleInfo *outTitleInfo, uint32_t *outTitleInfoSize, int maxTitleInfo, uint32_t u1)
{
return instance->vtable->instance->Get(outTitleInfo, outTitleInfoSize, maxTitleInfo, u1);
}
details::IPreferentialTitleAccessorInternal *GetInternal() override {
return &mInstance;
}
details::IPreferentialTitleAccessorInternal *
GetInternal() override
{
return &mInstance;
}
void InitInternalVtable() {
mVTable = {.instance = this,
.GetFn = &GetWrapper};
mInstance.vtable = &mVTable;
}
void
InitInternalVtable()
{
mVTable = {.instance = this,
.GetFn = &GetWrapper};
mInstance.vtable = &mVTable;
}
details::IPreferentialTitleAccessorInternal mInstance{};
details::IPreferentialTitleAccessorInternalVTable mVTable{};
};
details::IPreferentialTitleAccessorInternal mInstance{};
details::IPreferentialTitleAccessorInternalVTable mVTable{};
};
details::IPreferentialTitleAccessorBase &GetDefaultPreferentialTitleAccessor();
details::IPreferentialTitleAccessorBase &
GetDefaultPreferentialTitleAccessor();
} // namespace nn::sl
#endif

View File

@ -1,85 +1,112 @@
#pragma once
#include <wut.h>
#include <coreinit/time.h>
#include <nn/result.h>
#include <nn/sl/KillerNotification.h>
#include <nn/sl/details/ISerializerDetails.h>
#include <nn/sl/sl_cpp.h>
#include <wut.h>
#ifdef __cplusplus
namespace nn::sl {
template<typename T>
class ISerializer : public details::ISerializerBase<T> {
namespace nn::sl
{
template<typename T>
class ISerializer : public details::ISerializerBase<T>
{
public:
ISerializer() {
InitInternalVtable();
}
public:
ISerializer()
{
InitInternalVtable();
}
ISerializer(ISerializer &src) {
InitInternalVtable();
}
ISerializer(ISerializer &src)
{
InitInternalVtable();
}
ISerializer &operator=(const ISerializer &other) {
InitInternalVtable();
return *this;
}
ISerializer &
operator=(const ISerializer &other)
{
InitInternalVtable();
return *this;
}
ISerializer &operator=(ISerializer &&src) noexcept {
InitInternalVtable();
return *this;
}
ISerializer &
operator=(ISerializer &&src) noexcept
{
InitInternalVtable();
return *this;
}
nn::Result Serialize(T *buffer, uint32_t num) {
return details::ISerializerBase<T>::Serialize(buffer, num * sizeof(buffer));
}
nn::Result
Serialize(T *buffer, uint32_t num)
{
return details::ISerializerBase<T>::Serialize(buffer, num * sizeof(buffer));
}
nn::Result Deserialize(T *buffer, uint32_t num) {
return details::ISerializerBase<T>::Deserialize(buffer, num * sizeof(buffer));
}
nn::Result
Deserialize(T *buffer, uint32_t num)
{
return details::ISerializerBase<T>::Deserialize(buffer, num * sizeof(buffer));
}
~ISerializer() override = default;
~ISerializer() override = default;
private:
static nn::Result SerializeWrapper(details::ISerializerInternal *instance, void *buffer, uint32_t size) {
return details::ISerializerBase<T>::instance->vtable->instance->Serialize(buffer, size);
}
private:
static nn::Result
SerializeWrapper(details::ISerializerInternal *instance, void *buffer, uint32_t size)
{
return details::ISerializerBase<T>::instance->vtable->instance->Serialize(buffer, size);
}
static nn::Result DeserializeWrapper(details::ISerializerInternal *instance, void *buffer, uint32_t size) {
return details::ISerializerBase<T>::instance->vtable->instance->Deserialize(buffer, size);
}
static nn::Result
DeserializeWrapper(details::ISerializerInternal *instance, void *buffer, uint32_t size)
{
return details::ISerializerBase<T>::instance->vtable->instance->Deserialize(buffer, size);
}
static nn::Result GetCountWrapper(details::ISerializerInternal *instance, uint32_t *outCount) {
return details::ISerializerBase<T>::instance->vtable->instance->GetCount(outCount);
}
static nn::Result
GetCountWrapper(details::ISerializerInternal *instance, uint32_t *outCount)
{
return details::ISerializerBase<T>::instance->vtable->instance->GetCount(outCount);
}
details::ISerializerInternal *GetInternal() override {
return &mInstance;
}
details::ISerializerInternal *
GetInternal() override
{
return &mInstance;
}
void InitInternalVtable() {
mVTable = {.instance = this,
.SerializeFn = &SerializeWrapper,
.DeserializeFn = &DeserializeWrapper,
.GetCountFn = &GetCountWrapper};
mInstance.vtable = &mVTable;
}
void
InitInternalVtable()
{
mVTable = {.instance = this,
.SerializeFn = &SerializeWrapper,
.DeserializeFn = &DeserializeWrapper,
.GetCountFn = &GetCountWrapper};
mInstance.vtable = &mVTable;
}
details::ISerializerInternal mInstance{};
details::ISerializerInternalVTable mVTable{};
};
details::ISerializerInternal mInstance{};
details::ISerializerInternalVTable mVTable{};
};
details::ISerializerBase<nn::sl::IconInfo> &GetDefaultIconInfoSerializer();
details::ISerializerBase<nn::sl::IconInfo> &
GetDefaultIconInfoSerializer();
details::ISerializerBase<nn::sl::TitleInfo> &GetDefaultQuickStartTitleInfoSerializer();
details::ISerializerBase<nn::sl::TitleInfo> &
GetDefaultQuickStartTitleInfoSerializer();
details::ISerializerBase<nn::sl::KillerNotification> &GetDefaultKillerNotificationSerializer();
details::ISerializerBase<nn::sl::KillerNotification> &
GetDefaultKillerNotificationSerializer();
details::ISerializerBase<nn::sl::TitleInfo> &GetDefaultJumpTitleInfoSerializer();
details::ISerializerBase<nn::sl::TitleInfo> &
GetDefaultJumpTitleInfoSerializer();
details::ISerializerBase<OSTime> &GetDefaultPreviousSendingTimeSerializer();
details::ISerializerBase<OSTime> &
GetDefaultPreviousSendingTimeSerializer();
} // namespace nn::sl
#endif

View File

@ -1,56 +1,71 @@
#pragma once
#include <wut.h>
#include <nn/result.h>
#include <nn/sl/details/ISettingAccessorDetails.h>
#include <nn/sl/sl_cpp.h>
#include <wut.h>
#ifdef __cplusplus
namespace nn::sl {
class ISettingAccessor : public details::ISettingAccessorBase {
namespace nn::sl
{
class ISettingAccessor : public details::ISettingAccessorBase
{
public:
ISettingAccessor() {
InitInternalVtable();
}
public:
ISettingAccessor()
{
InitInternalVtable();
}
ISettingAccessor(ISettingAccessor &src) {
InitInternalVtable();
}
ISettingAccessor(ISettingAccessor &src)
{
InitInternalVtable();
}
ISettingAccessor &operator=(const ISettingAccessor &other) {
InitInternalVtable();
return *this;
}
ISettingAccessor &
operator=(const ISettingAccessor &other)
{
InitInternalVtable();
return *this;
}
ISettingAccessor &operator=(ISettingAccessor &&src) noexcept {
InitInternalVtable();
return *this;
}
ISettingAccessor &
operator=(ISettingAccessor &&src) noexcept
{
InitInternalVtable();
return *this;
}
~ISettingAccessor() override = default;
~ISettingAccessor() override = default;
private:
static nn::Result GetWrapper(details::ISettingAccessorInternal *instance, Setting *outSetting) {
return instance->vtable->instance->Get(outSetting);
}
private:
static nn::Result
GetWrapper(details::ISettingAccessorInternal *instance, Setting *outSetting)
{
return instance->vtable->instance->Get(outSetting);
}
details::ISettingAccessorInternal *GetInternal() override {
return &mInstance;
}
details::ISettingAccessorInternal *
GetInternal() override
{
return &mInstance;
}
void InitInternalVtable() {
mVTable = {.instance = this,
.GetFn = &GetWrapper};
mInstance.vtable = &mVTable;
}
void
InitInternalVtable()
{
mVTable = {.instance = this,
.GetFn = &GetWrapper};
mInstance.vtable = &mVTable;
}
details::ISettingAccessorInternal mInstance{};
details::ISettingAccessorInternalVTable mVTable{};
};
details::ISettingAccessorInternal mInstance{};
details::ISettingAccessorInternalVTable mVTable{};
};
details::ISettingAccessorBase &GetDefaultSettingAccessor();
details::ISettingAccessorBase &
GetDefaultSettingAccessor();
} // namespace nn::sl
#endif

View File

@ -1,69 +1,89 @@
#pragma once
#include <wut.h>
#include <nn/result.h>
#include <nn/sl/details/IStreamDetails.h>
#include <nn/sl/sl_cpp.h>
#include <wut.h>
#ifdef __cplusplus
namespace nn::sl {
class IStream : public details::IStreamBase {
namespace nn::sl
{
class IStream : public details::IStreamBase
{
public:
IStream() {
InitInternalVtable();
}
public:
IStream()
{
InitInternalVtable();
}
IStream(IStream &src) {
InitInternalVtable();
}
IStream(IStream &src)
{
InitInternalVtable();
}
IStream &operator=(const IStream &other) {
InitInternalVtable();
return *this;
}
IStream &
operator=(const IStream &other)
{
InitInternalVtable();
return *this;
}
IStream &operator=(IStream &&src) noexcept {
InitInternalVtable();
return *this;
}
IStream &
operator=(IStream &&src) noexcept
{
InitInternalVtable();
return *this;
}
~IStream() override = default;
~IStream() override = default;
private:
static nn::Result ReadWrapper(details::IStreamInternal *instance, uint32_t *bytesRead, void *buffer, uint32_t readSize) {
return instance->vtable->instance->Read(bytesRead, buffer, readSize);
}
private:
static nn::Result
ReadWrapper(details::IStreamInternal *instance, uint32_t *bytesRead, void *buffer, uint32_t readSize)
{
return instance->vtable->instance->Read(bytesRead, buffer, readSize);
}
static nn::Result WriteWrapper(details::IStreamInternal *instance, uint32_t *bytesWritten, void *buffer, uint32_t readSize) {
return instance->vtable->instance->Write(bytesWritten, buffer, readSize);
}
static nn::Result
WriteWrapper(details::IStreamInternal *instance, uint32_t *bytesWritten, void *buffer, uint32_t readSize)
{
return instance->vtable->instance->Write(bytesWritten, buffer, readSize);
}
static nn::Result GetSizeWrapper(details::IStreamInternal *instance, uint32_t *fileSize) {
return instance->vtable->instance->GetSize(fileSize);
}
static nn::Result
GetSizeWrapper(details::IStreamInternal *instance, uint32_t *fileSize)
{
return instance->vtable->instance->GetSize(fileSize);
}
static nn::Result SeekWrapper(details::IStreamInternal *instance, int32_t offset, nn::sl::SeekOrigin seekOrigin) {
return instance->vtable->instance->Seek(offset, seekOrigin);
}
static nn::Result
SeekWrapper(details::IStreamInternal *instance, int32_t offset, nn::sl::SeekOrigin seekOrigin)
{
return instance->vtable->instance->Seek(offset, seekOrigin);
}
details::IStreamInternal *GetInternal() override {
return &mInstance;
}
details::IStreamInternal *
GetInternal() override
{
return &mInstance;
}
void InitInternalVtable() {
mVTable = {.instance = this,
.ReadFn = &ReadWrapper,
.WriteFn = &WriteWrapper,
.GetSizeFn = &GetSizeWrapper,
.SeekFn = &SeekWrapper};
mInstance.vtable = &mVTable;
}
void
InitInternalVtable()
{
mVTable = {.instance = this,
.ReadFn = &ReadWrapper,
.WriteFn = &WriteWrapper,
.GetSizeFn = &GetSizeWrapper,
.SeekFn = &SeekWrapper};
mInstance.vtable = &mVTable;
}
details::IStreamInternal mInstance{};
details::IStreamInternalVTable mVTable{};
};
details::IStreamInternal mInstance{};
details::IStreamInternalVTable mVTable{};
};
} // namespace nn::sl
#endif

View File

@ -1,62 +1,79 @@
#pragma once
#include <wut.h>
#include <coreinit/time.h>
#include <nn/result.h>
#include <nn/sl/details/ITimeAccessorDetails.h>
#include <nn/sl/sl_cpp.h>
#include <wut.h>
#ifdef __cplusplus
namespace nn::sl {
namespace nn::sl
{
class ITimeAccessor : public details::ITimeAccessorBase {
class ITimeAccessor : public details::ITimeAccessorBase
{
public:
ITimeAccessor() {
InitInternalVtable();
}
public:
ITimeAccessor()
{
InitInternalVtable();
}
ITimeAccessor(ITimeAccessor &src) {
InitInternalVtable();
}
ITimeAccessor(ITimeAccessor &src)
{
InitInternalVtable();
}
ITimeAccessor &operator=(const ITimeAccessor &other) {
InitInternalVtable();
return *this;
}
ITimeAccessor &
operator=(const ITimeAccessor &other)
{
InitInternalVtable();
return *this;
}
ITimeAccessor &operator=(ITimeAccessor &&src) noexcept {
InitInternalVtable();
return *this;
}
ITimeAccessor &
operator=(ITimeAccessor &&src) noexcept
{
InitInternalVtable();
return *this;
}
~ITimeAccessor() override = default;
~ITimeAccessor() override = default;
private:
static nn::Result GetNetworkTimeWrapper(details::ITimeAccessorInternal *instance, OSTime *timeOut, bool *successOut) {
return instance->vtable->instance->GetNetworkTime(timeOut, successOut);
}
static nn::Result GetLocalTimeWrapper(details::ITimeAccessorInternal *instance, OSTime *timeOut, bool *successOut) {
return instance->vtable->instance->GetLocalTime(timeOut, successOut);
}
private:
static nn::Result
GetNetworkTimeWrapper(details::ITimeAccessorInternal *instance, OSTime *timeOut, bool *successOut)
{
return instance->vtable->instance->GetNetworkTime(timeOut, successOut);
}
static nn::Result
GetLocalTimeWrapper(details::ITimeAccessorInternal *instance, OSTime *timeOut, bool *successOut)
{
return instance->vtable->instance->GetLocalTime(timeOut, successOut);
}
details::ITimeAccessorInternal *GetInternal() override {
return &mInstance;
}
details::ITimeAccessorInternal *
GetInternal() override
{
return &mInstance;
}
void InitInternalVtable() {
mVTable = {.instance = this,
.GetNetworkTimeFn = &GetNetworkTimeWrapper,
.GetLocalTimeFn = &GetLocalTimeWrapper};
mInstance.vtable = &mVTable;
}
void
InitInternalVtable()
{
mVTable = {.instance = this,
.GetNetworkTimeFn = &GetNetworkTimeWrapper,
.GetLocalTimeFn = &GetLocalTimeWrapper};
mInstance.vtable = &mVTable;
}
details::ITimeAccessorInternal mInstance{};
details::ITimeAccessorInternalVTable mVTable{};
};
details::ITimeAccessorInternal mInstance{};
details::ITimeAccessorInternalVTable mVTable{};
};
details::ITimeAccessorBase &GetDefaultTimeAccessor();
details::ITimeAccessorBase &
GetDefaultTimeAccessor();
} // namespace nn::sl
#endif

Some files were not shown because too many files have changed in this diff Show More