wut v1.9.1
Wii U Toolchain
Loading...
Searching...
No Matches
sl_cpp.h
Go to the documentation of this file.
1#pragma once
2
3#include <wut.h>
4#include <coreinit/mcp.h>
6#include <nn/result.h>
7
8#ifdef __cplusplus
9
10namespace nn::sl
11{
20
21typedef struct WUT_PACKED LaunchInfo
22{
23 uint64_t titleId;
26 char parameter[0x800];
27} LaunchInfo;
28WUT_CHECK_OFFSET(LaunchInfo, 0x00, titleId);
29WUT_CHECK_OFFSET(LaunchInfo, 0x08, appType);
30WUT_CHECK_OFFSET(LaunchInfo, 0x0C, mediaType);
31WUT_CHECK_SIZE(LaunchInfo, 0x810);
32
33typedef struct WUT_PACKED LaunchInfoDatabaseEntry
34{
35 uint64_t id;
37} LaunchInfoDatabaseEntry;
38WUT_CHECK_SIZE(LaunchInfoDatabaseEntry, 0x818);
39WUT_CHECK_OFFSET(LaunchInfoDatabaseEntry, 0x0, id);
40WUT_CHECK_OFFSET(LaunchInfoDatabaseEntry, 0x8, launchInfo);
41
42// This struct has a variable length, the hash is always expected at the end
43typedef struct WUT_PACKED LaunchInfoDatabaseHeader
44{
45 uint32_t version; // 1
46 uint32_t magic; // "LIDB"
47 uint32_t maxEntries;
48 uint32_t entryCount;
49 uint64_t currentId; // start at 0x1000000000000000
50 LaunchInfoDatabaseEntry entries[0]; // Dynamic, actually this array should be entries[maxEntries]
51 char sha1Hash[20];
52} LaunchInfoDatabaseHeader;
53WUT_CHECK_SIZE(LaunchInfoDatabaseHeader, 0x2C);
54WUT_CHECK_OFFSET(LaunchInfoDatabaseHeader, 0x0, version);
55WUT_CHECK_OFFSET(LaunchInfoDatabaseHeader, 0x4, magic);
56WUT_CHECK_OFFSET(LaunchInfoDatabaseHeader, 0x8, maxEntries);
57WUT_CHECK_OFFSET(LaunchInfoDatabaseHeader, 0xC, entryCount);
58WUT_CHECK_OFFSET(LaunchInfoDatabaseHeader, 0x10, currentId);
59WUT_CHECK_OFFSET(LaunchInfoDatabaseHeader, 0x18, entries);
60WUT_CHECK_OFFSET(LaunchInfoDatabaseHeader, 0x18, sha1Hash);
61
62struct WUT_PACKED IconInfo
63{
64 uint8_t data[65580]; // tga
65 char name[0x80];
66};
67WUT_CHECK_SIZE(IconInfo, 0x100ac);
68WUT_CHECK_OFFSET(IconInfo, 0, data);
69WUT_CHECK_OFFSET(IconInfo, 0x1002c, name);
70
71struct WUT_PACKED AccountUUID
72{
73 char uuid[10];
74};
75WUT_CHECK_SIZE(AccountUUID, 10);
76
78{
79 uint8_t b;
80 uint8_t g;
81 uint8_t r;
82 uint8_t a;
83};
84WUT_CHECK_SIZE(DRCImagePaletteColor, 4);
85WUT_CHECK_OFFSET(DRCImagePaletteColor, 0, b);
86WUT_CHECK_OFFSET(DRCImagePaletteColor, 1, g);
87WUT_CHECK_OFFSET(DRCImagePaletteColor, 2, r);
88WUT_CHECK_OFFSET(DRCImagePaletteColor, 3, a);
89
94WUT_CHECK_SIZE(DRCImagePalette, 0x400);
95WUT_CHECK_OFFSET(DRCImagePalette, 0, values);
96
97struct WUT_PACKED TransferableInfo
98{
99 uint8_t numAccounts;
101 AccountUUID uuids[12];
102 WUT_PADDING_BYTES(0x48);
103 uint8_t isNetworkAccount[12];
104 uint8_t isPasswordCacheEnabled[12];
105 uint64_t titleIds[10];
106 uint8_t isOnDisc[10];
108 uint32_t serialId;
109 WUT_PADDING_BYTES(192);
110 struct
111 {
112 DRCImagePalette palette;
113 uint8_t pixelIndex[206][412]; // index of color in palette
114 } accountSceneImage;
115 struct
116 {
117 DRCImagePalette palette;
118 uint8_t pixelIndex[129][1630]; // index of color in palette
119 } quickStartScene1;
120 struct
121 {
122 DRCImagePalette palette;
123 uint8_t pixelIndex[85][854]; // index of color in palette
124 } quickStartScene2;
125 struct
126 {
127 DRCImagePalette palette; // this is actually unused. The quick start menu uses the button color palette for the main image as well.
128 uint8_t pixel[400][854]; // index of color in (button) palette
129 } killerNotificationMain;
130 struct
131 {
132 DRCImagePalette palette;
133 uint8_t pixelIndex[160][487]; // index of color in palette
134 } killerNotificationButton;
135};
136WUT_CHECK_SIZE(TransferableInfo, 0xc1934);
137WUT_CHECK_OFFSET(TransferableInfo, 0x00, numAccounts);
138WUT_CHECK_OFFSET(TransferableInfo, 0x01, defaultAccountIndex);
139WUT_CHECK_OFFSET(TransferableInfo, 0x02, uuids);
140WUT_CHECK_OFFSET(TransferableInfo, 0xC2, isNetworkAccount);
141WUT_CHECK_OFFSET(TransferableInfo, 0xCE, isPasswordCacheEnabled);
142WUT_CHECK_OFFSET(TransferableInfo, 0xda, titleIds);
143WUT_CHECK_OFFSET(TransferableInfo, 0x12a, isOnDisc);
144WUT_CHECK_OFFSET(TransferableInfo, 0x134, killerNotificationsTitleId);
145WUT_CHECK_OFFSET(TransferableInfo, 0x13C, serialId);
146WUT_CHECK_OFFSET(TransferableInfo, 0x200, accountSceneImage);
147WUT_CHECK_OFFSET(TransferableInfo, 0x15188, quickStartScene1);
148WUT_CHECK_OFFSET(TransferableInfo, 0x48ae6, quickStartScene2);
149WUT_CHECK_OFFSET(TransferableInfo, 0x5aa74, killerNotificationMain);
150WUT_CHECK_OFFSET(TransferableInfo, 0xae4d4, killerNotificationButton);
151
152struct WUT_PACKED TitleInfo
153{
154 uint64_t titleId;
157 WUT_UNKNOWN_BYTES(0x10);
158};
159WUT_CHECK_SIZE(TitleInfo, 0x20);
160WUT_CHECK_OFFSET(TitleInfo, 0x00, titleId);
161WUT_CHECK_OFFSET(TitleInfo, 0x08, appType);
162WUT_CHECK_OFFSET(TitleInfo, 0x0C, mediaType);
163
164struct WUT_PACKED TitleMetaInfo
165{
167 WUT_PADDING_BYTES(3);
168};
169WUT_CHECK_SIZE(TitleMetaInfo, 0x4);
170WUT_CHECK_OFFSET(TitleMetaInfo, 0x00, isPreOrder);
171
172struct WUT_PACKED WhiteList
173{
174 MCPAppType titleTypes[50];
176 WUT_PADDING_BYTES(4);
177 uint64_t titleIds[50];
178 uint32_t titleIdCount;
179};
180WUT_CHECK_SIZE(WhiteList, 0x264);
181WUT_CHECK_OFFSET(WhiteList, 0x00, titleTypes);
182WUT_CHECK_OFFSET(WhiteList, 0xC8, titleTypeCount);
183WUT_CHECK_OFFSET(WhiteList, 0xD0, titleIds);
184WUT_CHECK_OFFSET(WhiteList, 0x260, titleIdCount);
185
186struct WUT_PACKED Account
187{
188 char uuid[0x10];
191 uint8_t age;
192 WUT_PADDING_BYTES(2);
193 uint32_t gender;
196 WUT_PADDING_BYTES(1);
197 uint16_t bday_year;
198 uint8_t bday_month;
199 uint8_t bday_day;
200 WUT_PADDING_BYTES(2);
201};
202WUT_CHECK_SIZE(Account, 0x28);
203WUT_CHECK_OFFSET(Account, 0x00, uuid);
204WUT_CHECK_OFFSET(Account, 0x10, isNetworkAccount);
205WUT_CHECK_OFFSET(Account, 0x14, isPasswordCacheEnabled);
206WUT_CHECK_OFFSET(Account, 0x15, age);
207WUT_CHECK_OFFSET(Account, 0x18, gender);
208WUT_CHECK_OFFSET(Account, 0x1C, simpleAddressId);
209WUT_CHECK_OFFSET(Account, 0x20, isMailAddressValidated);
210WUT_CHECK_OFFSET(Account, 0x22, bday_year);
211WUT_CHECK_OFFSET(Account, 0x24, bday_month);
212WUT_CHECK_OFFSET(Account, 0x25, bday_day);
213
214struct WUT_PACKED AccountInfo
215{
216 uint8_t account_index[12];
217 WUT_UNKNOWN_BYTES(4);
219 Account accounts[12];
220};
221WUT_CHECK_SIZE(AccountInfo, 0x1f4);
222WUT_CHECK_OFFSET(AccountInfo, 0, account_index);
223WUT_CHECK_OFFSET(AccountInfo, 0x10, num_of_accounts);
224WUT_CHECK_OFFSET(AccountInfo, 0x14, accounts);
225
226struct WUT_PACKED Setting
227{
228 struct
229 {
230 bool enabled;
231 bool pushEnabled;
232 bool adEnabled;
233 bool drcLedEnable;
234 uint16_t pushInterval;
235 WUT_PADDING_BYTES(2);
236 uint32_t pushTimeSlot;
237 } caffeine;
239 WUT_PADDING_BYTES(3);
241 uint32_t language;
242 uint32_t prodArea;
243};
244WUT_CHECK_SIZE(Setting, 0x1C);
245WUT_CHECK_OFFSET(Setting, 0x0, caffeine.enabled);
246WUT_CHECK_OFFSET(Setting, 0x01, caffeine.pushEnabled);
247WUT_CHECK_OFFSET(Setting, 0x02, caffeine.adEnabled);
248WUT_CHECK_OFFSET(Setting, 0x03, caffeine.drcLedEnable);
249WUT_CHECK_OFFSET(Setting, 0x04, caffeine.pushInterval);
250WUT_CHECK_OFFSET(Setting, 0x08, caffeine.pushTimeSlot);
251WUT_CHECK_OFFSET(Setting, 0x0C, pushAutoDelivery);
252WUT_CHECK_OFFSET(Setting, 0x10, edmStandbyModeLength);
253WUT_CHECK_OFFSET(Setting, 0x14, language);
254WUT_CHECK_OFFSET(Setting, 0x18, prodArea);
255
257{
258 WUT_UNKNOWN_BYTES(0x18);
259};
260WUT_CHECK_SIZE(KillerNotificationTransferRecord, 0x18);
261
262typedef enum Region
263{
266 REGION_EUR = 2
268
275
291
293{
294 SeekSet = 0
296
297void
298GetDefaultDatabasePath(char *, int size, uint64_t titleId)
299 asm("GetDefaultDatabasePath__Q2_2nn2slFPcUiUL");
300
301void
302GetDefaultDatabasePath(char *, int size)
303 asm("GetDefaultDatabasePath__Q2_2nn2slFPcUi");
304
305void
306GetDefaultKillerNotificationTransferRecordPath(char *, int size, uint64_t titleId, const char *)
307 asm("GetDefaultKillerNotificationTransferRecordPath__Q2_2nn2slFPcUiUL");
308
310 asm("Initialize__Q2_2nn2slFPFUiT1_PvPFPv_v");
311
312void
314 asm("Finalize__Q2_2nn2slFv");
315
316void
318 asm("FinalizeForEcoProcess__Q2_2nn2slFv");
319
320void
322 asm("InitializeForEcoProcess__Q2_2nn2slFPFUiT1_PvPFPv_v");
323
324}; // namespace nn::sl
325
326#endif
MCPAppType
Definition mcp.h:26
void *(* MEMAllocFromDefaultHeapExFn)(uint32_t size, int32_t alignment)
void(* MEMFreeToDefaultHeapFn)(void *ptr)
uint64_t titleId
Definition sl_cpp.h:23
uint32_t language
Definition sl_cpp.h:241
uint8_t age
Definition sl_cpp.h:191
MediaType
Definition sl_cpp.h:13
@ NN_SL_MEDIA_TYPE_USB
Definition sl_cpp.h:17
@ NN_SL_MEDIA_TYPE_SLC
Definition sl_cpp.h:15
@ NN_SL_MEDIA_TYPE_ODD
Definition sl_cpp.h:16
@ NN_SL_MEDIA_TYPE_MLC
Definition sl_cpp.h:14
@ NN_SL_MEDIA_TYPE_HFIO
Definition sl_cpp.h:18
uint8_t bday_day
Definition sl_cpp.h:199
uint32_t prodArea
Definition sl_cpp.h:242
void InitializeForEcoProcess(MEMAllocFromDefaultHeapExFn allocFn, MEMFreeToDefaultHeapFn freeFn) asm("InitializeForEcoProcess__Q2_2nn2slFPFUiT1_PvPFPv_v")
uint32_t simpleAddressId
Definition sl_cpp.h:194
Language
Definition sl_cpp.h:277
@ Russian
Definition sl_cpp.h:288
@ German
Definition sl_cpp.h:281
@ Japanese
Definition sl_cpp.h:278
@ Italian
Definition sl_cpp.h:282
@ Spanish
Definition sl_cpp.h:283
@ English
Definition sl_cpp.h:279
@ TraditionalChinese
Definition sl_cpp.h:289
@ Dutch
Definition sl_cpp.h:286
@ SimplifiedChinese
Definition sl_cpp.h:284
@ Korean
Definition sl_cpp.h:285
@ Portuguese
Definition sl_cpp.h:287
@ French
Definition sl_cpp.h:280
void GetDefaultKillerNotificationTransferRecordPath(char *, int size, uint64_t titleId, const char *) asm("GetDefaultKillerNotificationTransferRecordPath__Q2_2nn2slFPcUiUL")
uint32_t isNetworkAccount
Definition sl_cpp.h:189
uint8_t isPasswordCacheEnabled
Definition sl_cpp.h:190
bool pushAutoDelivery
Definition sl_cpp.h:238
uint32_t gender
Definition sl_cpp.h:193
uint8_t isMailAddressValidated
Definition sl_cpp.h:195
void GetDefaultDatabasePath(char *, int size, uint64_t titleId) asm("GetDefaultDatabasePath__Q2_2nn2slFPcUiUL")
DRCImagePaletteColor values[0x100]
Definition sl_cpp.h:92
uint8_t bday_month
Definition sl_cpp.h:198
@ REGION_USA
Definition sl_cpp.h:265
@ REGION_JPN
Definition sl_cpp.h:264
@ REGION_EUR
Definition sl_cpp.h:266
void Initialize(MEMAllocFromDefaultHeapExFn, MEMFreeToDefaultHeapFn) asm("Initialize__Q2_2nn2slFPFUiT1_PvPFPv_v")
uint16_t bday_year
Definition sl_cpp.h:197
uint32_t titleTypeCount
Definition sl_cpp.h:175
uint64_t killerNotificationsTitleId
Definition sl_cpp.h:107
SeekOrigin
Definition sl_cpp.h:293
@ SeekSet
Definition sl_cpp.h:294
void Finalize() asm("Finalize__Q2_2nn2slFv")
MediaType mediaType
Definition sl_cpp.h:25
TransferMode
Definition sl_cpp.h:270
@ TRANSFER_MODE_UNKWN_1
Definition sl_cpp.h:271
@ TRANSFER_MODE_UNKWN_2
Definition sl_cpp.h:272
@ TRANSFER_MODE_UNKWN_3
Definition sl_cpp.h:273
uint32_t edmStandbyModeLength
Definition sl_cpp.h:240
MCPAppType appType
Definition sl_cpp.h:24
void FinalizeForEcoProcess() asm("FinalizeForEcoProcess__Q2_2nn2slFv")
uint32_t titleIdCount
Definition sl_cpp.h:178
uint32_t num_of_accounts
Definition sl_cpp.h:218
uint8_t defaultAccountIndex
Definition sl_cpp.h:100