acp: Add functions, structs, enums (from Decaf)

This commit is contained in:
Ash Logan 2020-03-12 13:51:13 +11:00
parent d19cd94a99
commit c9a2290196
7 changed files with 410 additions and 221 deletions

View File

@ -2,7 +2,10 @@
/**
* \defgroup nn_acp nn_acp
*
*
*/
#include <nn/acp/nn_acp_types.h>
#include <nn/acp/device.h>
#include <nn/acp/result.h>
#include <nn/acp/save.h>
#include <nn/acp/title.h>

16
include/nn/acp/device.h Normal file
View File

@ -0,0 +1,16 @@
#pragma once
#include <wut.h>
#include <nn/acp/result.h>
/**
* \defgroup nn_acp_device
* \ingroup nn_acp
* @{
*/
typedef int32_t ACPDeviceType;
ACPResult
ACPCheckApplicationDeviceEmulation(BOOL* emulation);
/** @} */

View File

@ -1,221 +1,7 @@
#pragma once
#include <wut.h>
#include <nn/acp/title.h>
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);
};
WUT_CHECK_OFFSET(ACPMetaXml, 0x00, title_id);
WUT_CHECK_OFFSET(ACPMetaXml, 0x08, boss_id);
WUT_CHECK_OFFSET(ACPMetaXml, 0x10, os_version);
WUT_CHECK_OFFSET(ACPMetaXml, 0x18, app_size);
WUT_CHECK_OFFSET(ACPMetaXml, 0x20, common_save_size);
WUT_CHECK_OFFSET(ACPMetaXml, 0x28, account_save_size);
WUT_CHECK_OFFSET(ACPMetaXml, 0x30, common_boss_size);
WUT_CHECK_OFFSET(ACPMetaXml, 0x38, account_boss_size);
WUT_CHECK_OFFSET(ACPMetaXml, 0x40, join_game_mode_mask);
WUT_CHECK_OFFSET(ACPMetaXml, 0x48, version);
WUT_CHECK_OFFSET(ACPMetaXml, 0x4C, product_code);
WUT_CHECK_OFFSET(ACPMetaXml, 0x6C, content_platform);
WUT_CHECK_OFFSET(ACPMetaXml, 0x8C, company_code);
WUT_CHECK_OFFSET(ACPMetaXml, 0x94, mastering_date);
WUT_CHECK_OFFSET(ACPMetaXml, 0xB4, logo_type);
WUT_CHECK_OFFSET(ACPMetaXml, 0xB8, app_launch_type);
WUT_CHECK_OFFSET(ACPMetaXml, 0xBC, invisible_flag);
WUT_CHECK_OFFSET(ACPMetaXml, 0xC0, no_managed_flag);
WUT_CHECK_OFFSET(ACPMetaXml, 0xC4, no_event_log);
WUT_CHECK_OFFSET(ACPMetaXml, 0xC8, no_icon_database);
WUT_CHECK_OFFSET(ACPMetaXml, 0xCC, launching_flag);
WUT_CHECK_OFFSET(ACPMetaXml, 0xD0, install_flag);
WUT_CHECK_OFFSET(ACPMetaXml, 0xD4, closing_msg);
WUT_CHECK_OFFSET(ACPMetaXml, 0xD8, title_version);
WUT_CHECK_OFFSET(ACPMetaXml, 0xDC, group_id);
WUT_CHECK_OFFSET(ACPMetaXml, 0xE0, save_no_rollback);
WUT_CHECK_OFFSET(ACPMetaXml, 0xE4, bg_daemon_enable);
WUT_CHECK_OFFSET(ACPMetaXml, 0xE8, join_game_id);
WUT_CHECK_OFFSET(ACPMetaXml, 0xEC, olv_accesskey);
WUT_CHECK_OFFSET(ACPMetaXml, 0xF0, wood_tin);
WUT_CHECK_OFFSET(ACPMetaXml, 0xF4, e_manual);
WUT_CHECK_OFFSET(ACPMetaXml, 0xF8, e_manual_version);
WUT_CHECK_OFFSET(ACPMetaXml, 0xFC, region);
WUT_CHECK_OFFSET(ACPMetaXml, 0x100, pc_cero);
WUT_CHECK_OFFSET(ACPMetaXml, 0x104, pc_esrb);
WUT_CHECK_OFFSET(ACPMetaXml, 0x108, pc_bbfc);
WUT_CHECK_OFFSET(ACPMetaXml, 0x10C, pc_usk);
WUT_CHECK_OFFSET(ACPMetaXml, 0x110, pc_pegi_gen);
WUT_CHECK_OFFSET(ACPMetaXml, 0x114, pc_pegi_fin);
WUT_CHECK_OFFSET(ACPMetaXml, 0x118, pc_pegi_prt);
WUT_CHECK_OFFSET(ACPMetaXml, 0x11C, pc_pegi_bbfc);
WUT_CHECK_OFFSET(ACPMetaXml, 0x120, pc_cob);
WUT_CHECK_OFFSET(ACPMetaXml, 0x124, pc_grb);
WUT_CHECK_OFFSET(ACPMetaXml, 0x128, pc_cgsrr);
WUT_CHECK_OFFSET(ACPMetaXml, 0x12C, pc_oflc);
WUT_CHECK_OFFSET(ACPMetaXml, 0x130, pc_reserved0);
WUT_CHECK_OFFSET(ACPMetaXml, 0x134, pc_reserved1);
WUT_CHECK_OFFSET(ACPMetaXml, 0x138, pc_reserved2);
WUT_CHECK_OFFSET(ACPMetaXml, 0x13C, pc_reserved3);
WUT_CHECK_OFFSET(ACPMetaXml, 0x140, ext_dev_nunchaku);
WUT_CHECK_OFFSET(ACPMetaXml, 0x144, ext_dev_classic);
WUT_CHECK_OFFSET(ACPMetaXml, 0x148, ext_dev_urcc);
WUT_CHECK_OFFSET(ACPMetaXml, 0x14C, ext_dev_board);
WUT_CHECK_OFFSET(ACPMetaXml, 0x150, ext_dev_usb_keyboard);
WUT_CHECK_OFFSET(ACPMetaXml, 0x154, ext_dev_etc);
WUT_CHECK_OFFSET(ACPMetaXml, 0x158, ext_dev_etc_name);
WUT_CHECK_OFFSET(ACPMetaXml, 0x358, eula_version);
WUT_CHECK_OFFSET(ACPMetaXml, 0x35C, drc_use);
WUT_CHECK_OFFSET(ACPMetaXml, 0x360, network_use);
WUT_CHECK_OFFSET(ACPMetaXml, 0x364, online_account_use);
WUT_CHECK_OFFSET(ACPMetaXml, 0x368, direct_boot);
WUT_CHECK_OFFSET(ACPMetaXml, 0x36C, reserved_flag0);
WUT_CHECK_OFFSET(ACPMetaXml, 0x370, reserved_flag1);
WUT_CHECK_OFFSET(ACPMetaXml, 0x374, reserved_flag2);
WUT_CHECK_OFFSET(ACPMetaXml, 0x378, reserved_flag3);
WUT_CHECK_OFFSET(ACPMetaXml, 0x37C, reserved_flag4);
WUT_CHECK_OFFSET(ACPMetaXml, 0x380, reserved_flag5);
WUT_CHECK_OFFSET(ACPMetaXml, 0x384, reserved_flag6);
WUT_CHECK_OFFSET(ACPMetaXml, 0x388, reserved_flag7);
WUT_CHECK_OFFSET(ACPMetaXml, 0x38C, longname_ja);
WUT_CHECK_OFFSET(ACPMetaXml, 0x58C, longname_en);
WUT_CHECK_OFFSET(ACPMetaXml, 0x78C, longname_fr);
WUT_CHECK_OFFSET(ACPMetaXml, 0x98C, longname_de);
WUT_CHECK_OFFSET(ACPMetaXml, 0xB8C, longname_it);
WUT_CHECK_OFFSET(ACPMetaXml, 0xD8C, longname_es);
WUT_CHECK_OFFSET(ACPMetaXml, 0xF8C, longname_zhs);
WUT_CHECK_OFFSET(ACPMetaXml, 0x118C, longname_ko);
WUT_CHECK_OFFSET(ACPMetaXml, 0x138C, longname_nl);
WUT_CHECK_OFFSET(ACPMetaXml, 0x158C, longname_pt);
WUT_CHECK_OFFSET(ACPMetaXml, 0x178C, longname_ru);
WUT_CHECK_OFFSET(ACPMetaXml, 0x198C, longname_zht);
WUT_CHECK_OFFSET(ACPMetaXml, 0x1B8C, shortname_ja);
WUT_CHECK_OFFSET(ACPMetaXml, 0x1C8C, shortname_en);
WUT_CHECK_OFFSET(ACPMetaXml, 0x1D8C, shortname_fr);
WUT_CHECK_OFFSET(ACPMetaXml, 0x1E8C, shortname_de);
WUT_CHECK_OFFSET(ACPMetaXml, 0x1F8C, shortname_it);
WUT_CHECK_OFFSET(ACPMetaXml, 0x208C, shortname_es);
WUT_CHECK_OFFSET(ACPMetaXml, 0x218C, shortname_zhs);
WUT_CHECK_OFFSET(ACPMetaXml, 0x228C, shortname_ko);
WUT_CHECK_OFFSET(ACPMetaXml, 0x238C, shortname_nl);
WUT_CHECK_OFFSET(ACPMetaXml, 0x248C, shortname_pt);
WUT_CHECK_OFFSET(ACPMetaXml, 0x258C, shortname_ru);
WUT_CHECK_OFFSET(ACPMetaXml, 0x268C, shortname_zht);
WUT_CHECK_OFFSET(ACPMetaXml, 0x278C, publisher_ja);
WUT_CHECK_OFFSET(ACPMetaXml, 0x288C, publisher_en);
WUT_CHECK_OFFSET(ACPMetaXml, 0x298C, publisher_fr);
WUT_CHECK_OFFSET(ACPMetaXml, 0x2A8C, publisher_de);
WUT_CHECK_OFFSET(ACPMetaXml, 0x2B8C, publisher_it);
WUT_CHECK_OFFSET(ACPMetaXml, 0x2C8C, publisher_es);
WUT_CHECK_OFFSET(ACPMetaXml, 0x2D8C, publisher_zhs);
WUT_CHECK_OFFSET(ACPMetaXml, 0x2E8C, publisher_ko);
WUT_CHECK_OFFSET(ACPMetaXml, 0x2F8C, publisher_nl);
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);
/* Included for compatibility - though this header was never in a released
* version of wut. It had the definition of ACPMetaXml.
*/
//#warning "<nn/acp/nn_acp_types.h> is deprecated! Please use <nn/acp/title.h>."

97
include/nn/acp/result.h Normal file
View File

@ -0,0 +1,97 @@
#pragma once
#include <wut.h>
/**
* \defgroup nn_acp_result Result
* \ingroup nn_acp
* Result codes used by nn_acp
* @{
*/
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_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_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_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_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_NOT_INITIALISED = -1600,
ACP_RESULT_ACCOUNT_ERROR = -1700,
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_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_GENERIC_ERROR = -4096,
} ACPResult;
WUT_CHECK_SIZE(ACPResult, 0x4);
/** @} */

36
include/nn/acp/save.h Normal file
View File

@ -0,0 +1,36 @@
#pragma once
#include <wut.h>
#include <nn/acp/result.h>
#include <nn/acp/device.h>
/**
* \defgroup nn_acp_save Save
* \ingroup nn_acp
*
* Save data services
* @{
*/
ACPResult
ACPCreateSaveDir(uint32_t persistentId,
ACPDeviceType deviceType);
ACPResult
ACPIsExternalStorageRequired(BOOL* required);
ACPResult
ACPMountExternalStorage();
ACPResult
ACPMountSaveDir();
ACPResult
ACPRepairSaveMetaDir();
ACPResult
ACPUnmountExternalStorage();
ACPResult
ACPUnmountSaveDir();
/** @} */

247
include/nn/acp/title.h Normal file
View File

@ -0,0 +1,247 @@
#pragma once
#include <wut.h>
#include <nn/acp/result.h>
#include <nn/acp/device.h>
/**
* \defgroup nn_acp_title Title
* \ingroup nn_acp
*
* Information and control of installed title metadata
* @{
*/
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);
};
WUT_CHECK_OFFSET(ACPMetaXml, 0x00, title_id);
WUT_CHECK_OFFSET(ACPMetaXml, 0x08, boss_id);
WUT_CHECK_OFFSET(ACPMetaXml, 0x10, os_version);
WUT_CHECK_OFFSET(ACPMetaXml, 0x18, app_size);
WUT_CHECK_OFFSET(ACPMetaXml, 0x20, common_save_size);
WUT_CHECK_OFFSET(ACPMetaXml, 0x28, account_save_size);
WUT_CHECK_OFFSET(ACPMetaXml, 0x30, common_boss_size);
WUT_CHECK_OFFSET(ACPMetaXml, 0x38, account_boss_size);
WUT_CHECK_OFFSET(ACPMetaXml, 0x40, join_game_mode_mask);
WUT_CHECK_OFFSET(ACPMetaXml, 0x48, version);
WUT_CHECK_OFFSET(ACPMetaXml, 0x4C, product_code);
WUT_CHECK_OFFSET(ACPMetaXml, 0x6C, content_platform);
WUT_CHECK_OFFSET(ACPMetaXml, 0x8C, company_code);
WUT_CHECK_OFFSET(ACPMetaXml, 0x94, mastering_date);
WUT_CHECK_OFFSET(ACPMetaXml, 0xB4, logo_type);
WUT_CHECK_OFFSET(ACPMetaXml, 0xB8, app_launch_type);
WUT_CHECK_OFFSET(ACPMetaXml, 0xBC, invisible_flag);
WUT_CHECK_OFFSET(ACPMetaXml, 0xC0, no_managed_flag);
WUT_CHECK_OFFSET(ACPMetaXml, 0xC4, no_event_log);
WUT_CHECK_OFFSET(ACPMetaXml, 0xC8, no_icon_database);
WUT_CHECK_OFFSET(ACPMetaXml, 0xCC, launching_flag);
WUT_CHECK_OFFSET(ACPMetaXml, 0xD0, install_flag);
WUT_CHECK_OFFSET(ACPMetaXml, 0xD4, closing_msg);
WUT_CHECK_OFFSET(ACPMetaXml, 0xD8, title_version);
WUT_CHECK_OFFSET(ACPMetaXml, 0xDC, group_id);
WUT_CHECK_OFFSET(ACPMetaXml, 0xE0, save_no_rollback);
WUT_CHECK_OFFSET(ACPMetaXml, 0xE4, bg_daemon_enable);
WUT_CHECK_OFFSET(ACPMetaXml, 0xE8, join_game_id);
WUT_CHECK_OFFSET(ACPMetaXml, 0xEC, olv_accesskey);
WUT_CHECK_OFFSET(ACPMetaXml, 0xF0, wood_tin);
WUT_CHECK_OFFSET(ACPMetaXml, 0xF4, e_manual);
WUT_CHECK_OFFSET(ACPMetaXml, 0xF8, e_manual_version);
WUT_CHECK_OFFSET(ACPMetaXml, 0xFC, region);
WUT_CHECK_OFFSET(ACPMetaXml, 0x100, pc_cero);
WUT_CHECK_OFFSET(ACPMetaXml, 0x104, pc_esrb);
WUT_CHECK_OFFSET(ACPMetaXml, 0x108, pc_bbfc);
WUT_CHECK_OFFSET(ACPMetaXml, 0x10C, pc_usk);
WUT_CHECK_OFFSET(ACPMetaXml, 0x110, pc_pegi_gen);
WUT_CHECK_OFFSET(ACPMetaXml, 0x114, pc_pegi_fin);
WUT_CHECK_OFFSET(ACPMetaXml, 0x118, pc_pegi_prt);
WUT_CHECK_OFFSET(ACPMetaXml, 0x11C, pc_pegi_bbfc);
WUT_CHECK_OFFSET(ACPMetaXml, 0x120, pc_cob);
WUT_CHECK_OFFSET(ACPMetaXml, 0x124, pc_grb);
WUT_CHECK_OFFSET(ACPMetaXml, 0x128, pc_cgsrr);
WUT_CHECK_OFFSET(ACPMetaXml, 0x12C, pc_oflc);
WUT_CHECK_OFFSET(ACPMetaXml, 0x130, pc_reserved0);
WUT_CHECK_OFFSET(ACPMetaXml, 0x134, pc_reserved1);
WUT_CHECK_OFFSET(ACPMetaXml, 0x138, pc_reserved2);
WUT_CHECK_OFFSET(ACPMetaXml, 0x13C, pc_reserved3);
WUT_CHECK_OFFSET(ACPMetaXml, 0x140, ext_dev_nunchaku);
WUT_CHECK_OFFSET(ACPMetaXml, 0x144, ext_dev_classic);
WUT_CHECK_OFFSET(ACPMetaXml, 0x148, ext_dev_urcc);
WUT_CHECK_OFFSET(ACPMetaXml, 0x14C, ext_dev_board);
WUT_CHECK_OFFSET(ACPMetaXml, 0x150, ext_dev_usb_keyboard);
WUT_CHECK_OFFSET(ACPMetaXml, 0x154, ext_dev_etc);
WUT_CHECK_OFFSET(ACPMetaXml, 0x158, ext_dev_etc_name);
WUT_CHECK_OFFSET(ACPMetaXml, 0x358, eula_version);
WUT_CHECK_OFFSET(ACPMetaXml, 0x35C, drc_use);
WUT_CHECK_OFFSET(ACPMetaXml, 0x360, network_use);
WUT_CHECK_OFFSET(ACPMetaXml, 0x364, online_account_use);
WUT_CHECK_OFFSET(ACPMetaXml, 0x368, direct_boot);
WUT_CHECK_OFFSET(ACPMetaXml, 0x36C, reserved_flag0);
WUT_CHECK_OFFSET(ACPMetaXml, 0x370, reserved_flag1);
WUT_CHECK_OFFSET(ACPMetaXml, 0x374, reserved_flag2);
WUT_CHECK_OFFSET(ACPMetaXml, 0x378, reserved_flag3);
WUT_CHECK_OFFSET(ACPMetaXml, 0x37C, reserved_flag4);
WUT_CHECK_OFFSET(ACPMetaXml, 0x380, reserved_flag5);
WUT_CHECK_OFFSET(ACPMetaXml, 0x384, reserved_flag6);
WUT_CHECK_OFFSET(ACPMetaXml, 0x388, reserved_flag7);
WUT_CHECK_OFFSET(ACPMetaXml, 0x38C, longname_ja);
WUT_CHECK_OFFSET(ACPMetaXml, 0x58C, longname_en);
WUT_CHECK_OFFSET(ACPMetaXml, 0x78C, longname_fr);
WUT_CHECK_OFFSET(ACPMetaXml, 0x98C, longname_de);
WUT_CHECK_OFFSET(ACPMetaXml, 0xB8C, longname_it);
WUT_CHECK_OFFSET(ACPMetaXml, 0xD8C, longname_es);
WUT_CHECK_OFFSET(ACPMetaXml, 0xF8C, longname_zhs);
WUT_CHECK_OFFSET(ACPMetaXml, 0x118C, longname_ko);
WUT_CHECK_OFFSET(ACPMetaXml, 0x138C, longname_nl);
WUT_CHECK_OFFSET(ACPMetaXml, 0x158C, longname_pt);
WUT_CHECK_OFFSET(ACPMetaXml, 0x178C, longname_ru);
WUT_CHECK_OFFSET(ACPMetaXml, 0x198C, longname_zht);
WUT_CHECK_OFFSET(ACPMetaXml, 0x1B8C, shortname_ja);
WUT_CHECK_OFFSET(ACPMetaXml, 0x1C8C, shortname_en);
WUT_CHECK_OFFSET(ACPMetaXml, 0x1D8C, shortname_fr);
WUT_CHECK_OFFSET(ACPMetaXml, 0x1E8C, shortname_de);
WUT_CHECK_OFFSET(ACPMetaXml, 0x1F8C, shortname_it);
WUT_CHECK_OFFSET(ACPMetaXml, 0x208C, shortname_es);
WUT_CHECK_OFFSET(ACPMetaXml, 0x218C, shortname_zhs);
WUT_CHECK_OFFSET(ACPMetaXml, 0x228C, shortname_ko);
WUT_CHECK_OFFSET(ACPMetaXml, 0x238C, shortname_nl);
WUT_CHECK_OFFSET(ACPMetaXml, 0x248C, shortname_pt);
WUT_CHECK_OFFSET(ACPMetaXml, 0x258C, shortname_ru);
WUT_CHECK_OFFSET(ACPMetaXml, 0x268C, shortname_zht);
WUT_CHECK_OFFSET(ACPMetaXml, 0x278C, publisher_ja);
WUT_CHECK_OFFSET(ACPMetaXml, 0x288C, publisher_en);
WUT_CHECK_OFFSET(ACPMetaXml, 0x298C, publisher_fr);
WUT_CHECK_OFFSET(ACPMetaXml, 0x2A8C, publisher_de);
WUT_CHECK_OFFSET(ACPMetaXml, 0x2B8C, publisher_it);
WUT_CHECK_OFFSET(ACPMetaXml, 0x2C8C, publisher_es);
WUT_CHECK_OFFSET(ACPMetaXml, 0x2D8C, publisher_zhs);
WUT_CHECK_OFFSET(ACPMetaXml, 0x2E8C, publisher_ko);
WUT_CHECK_OFFSET(ACPMetaXml, 0x2F8C, publisher_nl);
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);
ACPResult
ACPGetTitleIdOfMainApplication(ACPTitleId* titleId);
ACPResult
ACPGetTitleMetaXml(ACPTitleId titleId,
ACPMetaXml* metaXml);
ACPResult
ACPGetTitleMetaDirByDevice(ACPTitleId titleId,
char* directory,
size_t directoryLen,
ACPDeviceType deviceType);
/** @} */

View File

@ -72,7 +72,11 @@
#include <gx2r/surface.h>
#include <nn/ac/ac_c.h>
#include <nn/ac/ac_cpp.h>
#include <nn/acp/device.h>
#include <nn/acp/nn_acp_types.h>
#include <nn/acp/result.h>
#include <nn/acp/save.h>
#include <nn/acp/title.h>
#include <nn/swkbd/swkbd_cpp.h>
#include <nn/ac.h>
#include <nn/acp.h>