libnx v4.9.0
Loading...
Searching...
No Matches
error.h
Go to the documentation of this file.
1/**
2 * @file error.h
3 * @brief Wrapper for using the error LibraryApplet.
4 * @author StuntHacks, yellows8
5 * @copyright libnx Authors
6 */
7#pragma once
8#include "../types.h"
9#include "../services/set.h"
10
11/// Error type for ErrorCommonHeader.type.
12typedef enum {
13 ErrorType_Normal = 0, ///< Normal
14 ErrorType_System = 1, ///< System
15 ErrorType_Application = 2, ///< Application
16 ErrorType_Eula = 3, ///< EULA
17 ErrorType_Pctl = 4, ///< Parental Controls
18 ErrorType_Record = 5, ///< Record
19 ErrorType_SystemUpdateEula = 8, ///< SystemUpdateEula
20} ErrorType;
21
22/// Stores error-codes which are displayed as XXXX-XXXX, low for the former and desc for the latter.
23typedef struct {
24 u32 low; ///< The module portion of the error, normally this should be set to module + 2000.
25 u32 desc; ///< The error description.
26} ErrorCode;
27
28/// Error type for ErrorContext.type
29typedef enum {
30 ErrorContextType_None = 0, ///< None
31 ErrorContextType_Http = 1, ///< Http
32 ErrorContextType_FileSystem = 2, ///< FileSystem
33 ErrorContextType_WebMediaPlayer = 3, ///< WebMediaPlayer
34 ErrorContextType_LocalContentShare = 4, ///< LocalContentShare
36
37/// Error context.
38typedef struct {
39 u8 type; ///< Type, see \ref ErrorContextType.
40 u8 pad[7]; ///< Padding
41 u8 data[0x1f4]; ///< Data
42 Result res; ///< Result
44
45/// Common header for the start of the arg storage.
46typedef struct {
47 u8 type; ///< Type, see \ref ErrorType.
48 u8 jumpFlag; ///< When clear, this indicates WithoutJump.
49 u8 unk_x2[3]; ///< Unknown
50 u8 contextFlag; ///< When set with ::ErrorType_Normal, indicates that an additional storage is pushed for \ref ErrorResultBacktrace. [4.0.0+] Otherwise, when set indicates that an additional storage is pushed for \ref ErrorContext.
51 u8 resultFlag; ///< ErrorCommonArg: When clear, errorCode is used, otherwise the applet generates the error-code from res.
52 u8 contextFlag2; ///< Similar to contextFlag except for ErrorCommonArg, indicating \ref ErrorContext is used.
54
55/// Common error arg data.
56typedef struct {
57 ErrorCommonHeader hdr; ///< Common header.
58 ErrorCode errorCode; ///< \ref ErrorCode
59 Result res; ///< Result
61
62/// Error arg data for certain errors with module PCTL.
63typedef struct {
64 ErrorCommonHeader hdr; ///< Common header.
65 Result res; ///< Result
67
68/// ResultBacktrace
69typedef struct {
70 s32 count; ///< Total entries in the backtrace array.
71 Result backtrace[0x20]; ///< Result backtrace.
73
74/// Error arg data for EULA.
75typedef struct {
76 ErrorCommonHeader hdr; ///< Common header.
77 SetRegion regionCode; ///< \ref SetRegion
79
80/// Additional input storage data for \ref errorSystemUpdateEulaShow.
81typedef struct {
82 u8 data[0x20000]; ///< data
84
85/// Error arg data for Record.
86typedef struct {
87 ErrorCommonHeader hdr; ///< Common header.
88 ErrorCode errorCode; ///< \ref ErrorCode
89 u64 timestamp; ///< POSIX timestamp.
91
92/// SystemErrorArg
93typedef struct {
94 ErrorCommonHeader hdr; ///< Common header.
95 ErrorCode errorCode; ///< \ref ErrorCode
96 u64 languageCode; ///< See set.h.
97 char dialogMessage[0x800]; ///< UTF-8 Dialog message.
98 char fullscreenMessage[0x800]; ///< UTF-8 Fullscreen message (displayed when the user clicks on "Details").
100
101/// Error system config.
102typedef struct {
103 ErrorSystemArg arg; ///< Arg data.
104 ErrorContext ctx; ///< Optional error context.
106
107/// ApplicationErrorArg
108typedef struct {
109 ErrorCommonHeader hdr; ///< Common header.
110 u32 errorNumber; ///< Raw decimal error number which is displayed in the dialog.
111 u64 languageCode; ///< See set.h.
112 char dialogMessage[0x800]; ///< UTF-8 Dialog message.
113 char fullscreenMessage[0x800]; ///< UTF-8 Fullscreen message (displayed when the user clicks on "Details").
115
116/// Error application config.
117typedef struct {
118 ErrorApplicationArg arg; ///< Arg data.
120
121/**
122 * @brief Creates an \ref ErrorCode.
123 * @param low The module portion of the error, normally this should be set to module + 2000.
124 * @param desc The error description.
125 */
126static inline ErrorCode errorCodeCreate(u32 low, u32 desc) {
127 return (ErrorCode){low, desc};
128}
129
130/**
131 * @brief Creates an \ref ErrorCode with the input Result. Wrapper for \ref errorCodeCreate.
132 * @param res Input Result.
133 */
135 return errorCodeCreate(2000 + R_MODULE(res), R_DESCRIPTION(res));
136}
137
138/**
139 * @brief Creates an invalid \ref ErrorCode.
140 */
142 return (ErrorCode){0};
143}
144
145/**
146 * @brief Checks whether the input ErrorCode is valid.
147 * @param errorCode \ref ErrorCode
148 */
149static inline bool errorCodeIsValid(ErrorCode errorCode) {
150 return errorCode.low!=0;
151}
152
153/**
154 * @brief Launches the applet for displaying the specified Result.
155 * @param res Result
156 * @param jumpFlag Jump flag, normally this is true.
157 * @param ctx Optional \ref ErrorContext, can be NULL. Unused when jumpFlag=false. Ignored on pre-4.0.0, since it's only available for [4.0.0+].
158 * @note Sets the following fields: jumpFlag and contextFlag2. Uses ::ErrorType_Normal normally.
159 * @note For module=PCTL errors with desc 100-119 this sets uses ::ErrorType_Pctl, in which case the applet will display the following special dialog: "This software is restricted by Parental Controls".
160 * @note If the input Result is 0xC8A2, the applet will display a special dialog regarding the current application requiring a software update, with buttons "Later" and "Restart".
161 * @note [3.0.0+] If the input Result is 0xCAA2, the applet will display a special dialog related to DLC version.
162 * @warning This applet creates an error report that is logged in the system, when not handling the above special dialogs. Proceed at your own risk!
163 */
164Result errorResultShow(Result res, bool jumpFlag, const ErrorContext* ctx);
165
166/**
167 * @brief Launches the applet for displaying the specified ErrorCode.
168 * @param errorCode \ref ErrorCode
169 * @param jumpFlag Jump flag, normally this is true.
170 * @param ctx Optional \ref ErrorContext, can be NULL. Unused when jumpFlag=false. Ignored on pre-4.0.0, since it's only available for [4.0.0+].
171 * @note Sets the following fields: jumpFlag and contextFlag2. resultFlag=1. Uses ::ErrorType_Normal.
172 * @warning This applet creates an error report that is logged in the system. Proceed at your own risk!
173 */
174Result errorCodeShow(ErrorCode errorCode, bool jumpFlag, const ErrorContext* ctx);
175
176/**
177 * @brief Creates an ErrorResultBacktrace struct.
178 * @param backtrace \ref ErrorResultBacktrace struct.
179 * @param count Total number of entries.
180 * @param entries Input array of Result.
181 */
183
184/**
185 * @brief Launches the applet for \ref ErrorResultBacktrace.
186 * @param backtrace ErrorResultBacktrace struct.
187 * @param res Result
188 * @note Sets the following fields: jumpFlag=1, contextFlag=1, and uses ::ErrorType_Normal.
189 * @warning This applet creates an error report that is logged in the system. Proceed at your own risk!
190 */
192
193/**
194 * @brief Launches the applet for displaying the EULA.
195 * @param RegionCode \ref SetRegion
196 * @note Sets the following fields: jumpFlag=1, regionCode, and uses ::ErrorType_Eula.
197 */
199
200/**
201 * @brief Launches the applet for displaying the system-update EULA.
202 * @param RegionCode \ref SetRegion
203 * @param eula EULA data. Address must be 0x1000-byte aligned.
204 * @note Sets the following fields: jumpFlag=1, regionCode, and uses ::ErrorType_SystemUpdateEula.
205 */
207
208/**
209 * @brief Launches the applet for displaying an error full-screen, using the specified ErrorCode and timestamp.
210 * @param errorCode \ref ErrorCode
211 * @param timestamp POSIX timestamp.
212 * @note Sets the following fields: jumpFlag=1, errorCode, timestamp, and uses ::ErrorType_Record.
213 * @note The applet does not log an error report for this. error*RecordShow is used by qlaunch for displaying previously logged error reports.
214 */
216
217/**
218 * @brief Launches the applet for displaying an error full-screen, using the specified Result and timestamp.
219 * @param res Result
220 * @param timestamp POSIX timestamp.
221 * @note Wrapper for \ref errorCodeRecordShow, see \ref errorCodeRecordShow notes.
222 */
223static inline Result errorResultRecordShow(Result res, u64 timestamp) {
224 return errorCodeRecordShow(errorCodeCreateResult(res), timestamp);
225}
226
227/**
228 * @brief Creates an ErrorSystemConfig struct.
229 * @param c ErrorSystemConfig struct.
230 * @param dialog_message UTF-8 dialog message.
231 * @param fullscreen_message UTF-8 fullscreen message, displayed when the user clicks on "Details". Optional, can be NULL (which disables displaying Details).
232 * @note Sets the following fields: {strings}, and uses ::ErrorType_System. The rest are cleared.
233 * @note On pre-5.0.0 this will initialize languageCode by using: setInitialize(), setMakeLanguageCode(SetLanguage_ENUS, ...), and setExit(). This is needed since an empty languageCode wasn't supported until [5.0.0+] (which would also use SetLanguage_ENUS).
234 * @warning This applet creates an error report that is logged in the system. Proceed at your own risk!
235 */
236Result errorSystemCreate(ErrorSystemConfig* c, const char* dialog_message, const char* fullscreen_message);
237
238/**
239 * @brief Launches the applet with the specified config.
240 * @param c ErrorSystemConfig struct.
241 */
243
244/**
245 * @brief Sets the error code.
246 * @param c ErrorSystemConfig struct.
247 * @param errorCode \ref ErrorCode
248 */
249static inline void errorSystemSetCode(ErrorSystemConfig* c, ErrorCode errorCode) {
250 c->arg.errorCode = errorCode;
251}
252
253/**
254 * @brief Sets the error code, using the input Result. Wrapper for \ref errorSystemSetCode.
255 * @param c ErrorSystemConfig struct.
256 * @param res The Result to set.
257 */
261
262/**
263 * @brief Sets the LanguageCode.
264 * @param c ErrorSystemConfig struct.
265 * @param LanguageCode LanguageCode, see set.h.
266 */
267static inline void errorSystemSetLanguageCode(ErrorSystemConfig* c, u64 LanguageCode) {
268 c->arg.languageCode = LanguageCode;
269}
270
271/**
272 * @brief Sets the ErrorContext.
273 * @note Only available on [4.0.0+], on older versions this will return without setting the context.
274 * @param c ErrorSystemConfig struct.
275 * @param ctx ErrorContext, NULL to clear it.
276 */
278
279/**
280 * @brief Creates an ErrorApplicationConfig struct.
281 * @param c ErrorApplicationConfig struct.
282 * @param dialog_message UTF-8 dialog message.
283 * @param fullscreen_message UTF-8 fullscreen message, displayed when the user clicks on "Details". Optional, can be NULL (which disables displaying Details).
284 * @note Sets the following fields: jumpFlag=1, {strings}, and uses ::ErrorType_Application. The rest are cleared.
285 * @note On pre-5.0.0 this will initialize languageCode by using: setInitialize(), setMakeLanguageCode(SetLanguage_ENUS, ...), and setExit(). This is needed since an empty languageCode wasn't supported until [5.0.0+] (which would also use SetLanguage_ENUS).
286 * @note With [10.0.0+] this must only be used when running under an Application, since otherwise the applet will trigger a fatalerr.
287 * @warning This applet creates an error report that is logged in the system. Proceed at your own risk!
288 */
289Result errorApplicationCreate(ErrorApplicationConfig* c, const char* dialog_message, const char* fullscreen_message);
290
291/**
292 * @brief Launches the applet with the specified config.
293 * @param c ErrorApplicationConfig struct.
294 */
296
297/**
298 * @brief Sets the error code number.
299 * @param c ErrorApplicationConfig struct.
300 * @param errorNumber Error code number. Raw decimal error number which is displayed in the dialog.
301 */
302static inline void errorApplicationSetNumber(ErrorApplicationConfig* c, u32 errorNumber) {
303 c->arg.errorNumber = errorNumber;
304}
305
306/**
307 * @brief Sets the LanguageCode.
308 * @param c ErrorApplicationConfig struct.
309 * @param LanguageCode LanguageCode, see set.h.
310 */
311static inline void errorApplicationSetLanguageCode(ErrorApplicationConfig* c, u64 LanguageCode) {
312 c->arg.languageCode = LanguageCode;
313}
314
Result errorResultBacktraceShow(Result res, const ErrorResultBacktrace *backtrace)
Launches the applet for ErrorResultBacktrace.
Result errorResultBacktraceCreate(ErrorResultBacktrace *backtrace, s32 count, const Result *entries)
Creates an ErrorResultBacktrace struct.
Result errorCodeRecordShow(ErrorCode errorCode, u64 timestamp)
Launches the applet for displaying an error full-screen, using the specified ErrorCode and timestamp.
static void errorSystemSetCode(ErrorSystemConfig *c, ErrorCode errorCode)
Sets the error code.
Definition error.h:249
static void errorApplicationSetNumber(ErrorApplicationConfig *c, u32 errorNumber)
Sets the error code number.
Definition error.h:302
Result errorSystemCreate(ErrorSystemConfig *c, const char *dialog_message, const char *fullscreen_message)
Creates an ErrorSystemConfig struct.
static bool errorCodeIsValid(ErrorCode errorCode)
Checks whether the input ErrorCode is valid.
Definition error.h:149
Result errorEulaShow(SetRegion RegionCode)
Launches the applet for displaying the EULA.
ErrorContextType
Error type for ErrorContext.type.
Definition error.h:29
@ ErrorContextType_None
None.
Definition error.h:30
@ ErrorContextType_FileSystem
FileSystem.
Definition error.h:32
@ ErrorContextType_WebMediaPlayer
WebMediaPlayer.
Definition error.h:33
@ ErrorContextType_Http
Http.
Definition error.h:31
@ ErrorContextType_LocalContentShare
LocalContentShare.
Definition error.h:34
Result errorApplicationShow(ErrorApplicationConfig *c)
Launches the applet with the specified config.
static void errorApplicationSetLanguageCode(ErrorApplicationConfig *c, u64 LanguageCode)
Sets the LanguageCode.
Definition error.h:311
Result errorCodeShow(ErrorCode errorCode, bool jumpFlag, const ErrorContext *ctx)
Launches the applet for displaying the specified ErrorCode.
Result errorResultShow(Result res, bool jumpFlag, const ErrorContext *ctx)
Launches the applet for displaying the specified Result.
Result errorSystemUpdateEulaShow(SetRegion RegionCode, const ErrorEulaData *eula)
Launches the applet for displaying the system-update EULA.
Result errorApplicationCreate(ErrorApplicationConfig *c, const char *dialog_message, const char *fullscreen_message)
Creates an ErrorApplicationConfig struct.
static ErrorCode errorCodeCreate(u32 low, u32 desc)
Creates an ErrorCode.
Definition error.h:126
static ErrorCode errorCodeCreateInvalid(void)
Creates an invalid ErrorCode.
Definition error.h:141
ErrorType
Error type for ErrorCommonHeader.type.
Definition error.h:12
@ ErrorType_Application
Application.
Definition error.h:15
@ ErrorType_System
System.
Definition error.h:14
@ ErrorType_Eula
EULA.
Definition error.h:16
@ ErrorType_SystemUpdateEula
SystemUpdateEula.
Definition error.h:19
@ ErrorType_Normal
Normal.
Definition error.h:13
@ ErrorType_Pctl
Parental Controls.
Definition error.h:17
@ ErrorType_Record
Record.
Definition error.h:18
void errorSystemSetContext(ErrorSystemConfig *c, const ErrorContext *ctx)
Sets the ErrorContext.
static void errorSystemSetResult(ErrorSystemConfig *c, Result res)
Sets the error code, using the input Result.
Definition error.h:258
static void errorSystemSetLanguageCode(ErrorSystemConfig *c, u64 LanguageCode)
Sets the LanguageCode.
Definition error.h:267
Result errorSystemShow(ErrorSystemConfig *c)
Launches the applet with the specified config.
static ErrorCode errorCodeCreateResult(Result res)
Creates an ErrorCode with the input Result.
Definition error.h:134
static Result errorResultRecordShow(Result res, u64 timestamp)
Launches the applet for displaying an error full-screen, using the specified Result and timestamp.
Definition error.h:223
#define R_MODULE(res)
Returns the module ID of a result code.
Definition result.h:14
#define R_DESCRIPTION(res)
Returns the description of a result code.
Definition result.h:16
SetRegion
Region codes.
Definition set.h:62
ApplicationErrorArg.
Definition error.h:108
ErrorCommonHeader hdr
Common header.
Definition error.h:109
u64 languageCode
See set.h.
Definition error.h:111
u32 errorNumber
Raw decimal error number which is displayed in the dialog.
Definition error.h:110
Error application config.
Definition error.h:117
ErrorApplicationArg arg
Arg data.
Definition error.h:118
Stores error-codes which are displayed as XXXX-XXXX, low for the former and desc for the latter.
Definition error.h:23
u32 low
The module portion of the error, normally this should be set to module + 2000.
Definition error.h:24
u32 desc
The error description.
Definition error.h:25
Common error arg data.
Definition error.h:56
ErrorCode errorCode
ErrorCode
Definition error.h:58
ErrorCommonHeader hdr
Common header.
Definition error.h:57
Result res
Result.
Definition error.h:59
Common header for the start of the arg storage.
Definition error.h:46
u8 resultFlag
ErrorCommonArg: When clear, errorCode is used, otherwise the applet generates the error-code from res...
Definition error.h:51
u8 type
Type, see ErrorType.
Definition error.h:47
u8 jumpFlag
When clear, this indicates WithoutJump.
Definition error.h:48
u8 contextFlag
When set with ErrorType_Normal, indicates that an additional storage is pushed for ErrorResultBacktra...
Definition error.h:50
u8 contextFlag2
Similar to contextFlag except for ErrorCommonArg, indicating ErrorContext is used.
Definition error.h:52
Error context.
Definition error.h:38
Result res
Result.
Definition error.h:42
u8 type
Type, see ErrorContextType.
Definition error.h:39
Error arg data for EULA.
Definition error.h:75
ErrorCommonHeader hdr
Common header.
Definition error.h:76
SetRegion regionCode
SetRegion
Definition error.h:77
Additional input storage data for errorSystemUpdateEulaShow.
Definition error.h:81
Error arg data for certain errors with module PCTL.
Definition error.h:63
Result res
Result.
Definition error.h:65
ErrorCommonHeader hdr
Common header.
Definition error.h:64
Error arg data for Record.
Definition error.h:86
u64 timestamp
POSIX timestamp.
Definition error.h:89
ErrorCommonHeader hdr
Common header.
Definition error.h:87
ErrorCode errorCode
ErrorCode
Definition error.h:88
ResultBacktrace.
Definition error.h:69
s32 count
Total entries in the backtrace array.
Definition error.h:70
SystemErrorArg.
Definition error.h:93
ErrorCommonHeader hdr
Common header.
Definition error.h:94
ErrorCode errorCode
ErrorCode
Definition error.h:95
u64 languageCode
See set.h.
Definition error.h:96
Error system config.
Definition error.h:102
ErrorContext ctx
Optional error context.
Definition error.h:104
ErrorSystemArg arg
Arg data.
Definition error.h:103
uint64_t u64
64-bit unsigned integer.
Definition types.h:22
uint8_t u8
8-bit unsigned integer.
Definition types.h:19
#define NX_PACKED
Packs a struct so that it won't include padding bytes.
Definition types.h:63
u32 Result
Function error code result type.
Definition types.h:44
int32_t s32
32-bit signed integer.
Definition types.h:27
uint32_t u32
32-bit unsigned integer.
Definition types.h:21