Skip to main content
The System Utilities API provides essential functions for managing system events and retrieving system configuration parameters.

Event Management

sysUtilRegisterCallback

Register a callback function for system events.
s32 sysUtilRegisterCallback(s32 slot, sysutilCallback cb, void *usrdata);
slot
s32
Event slot identifier. Multiple callbacks can be registered in different slots (0-3). All system events are delivered to all slots in order.Possible values:
  • SYSUTIL_EVENT_SLOT0 (0)
  • SYSUTIL_EVENT_SLOT1 (1)
  • SYSUTIL_EVENT_SLOT2 (2)
  • SYSUTIL_EVENT_SLOT3 (3)
cb
sysutilCallback
Pointer to callback function. The callback receives:
  • status - Event value (u64)
  • param - Event parameter (u64)
  • usrdata - User data pointer
usrdata
void*
Pointer to user data passed to the callback function. May be NULL.
return
s32
Returns SYSUTIL_OK (0) on success, nonzero on error.

sysUtilCheckCallback

Check for pending system events.
s32 sysUtilCheckCallback();
This function should be called regularly (typically in the main loop) to process system events. When an event occurs, the registered callback functions are invoked.
return
s32
Returns SYSUTIL_OK (0) on success, nonzero on error.

sysUtilUnregisterCallback

Unregister a callback function.
s32 sysUtilUnregisterCallback(s32 slot);
slot
s32
Event slot identifier to unregister (0-3).
return
s32
Returns SYSUTIL_OK (0) on success, nonzero on error.

System Parameters

sysUtilGetSystemParamInt

Get an integer system parameter.
s32 sysUtilGetSystemParamInt(s32 id, s32 *value);
id
s32
Parameter ID to retrieve.
value
s32*
Pointer to store the retrieved integer value.
return
s32
Returns SYSUTIL_OK (0) on success, nonzero on error.

sysUtilGetSystemParamString

Get a string system parameter.
s32 sysUtilGetSystemParamString(s32 id, char *buf, u32 bufsize);
id
s32
Parameter ID to retrieve.Common string parameters:
  • SYSUTIL_SYSTEMPARAM_ID_NICKNAME (0x0113) - User nickname
  • SYSUTIL_SYSTEMPARAM_ID_CURRENT_USERNAME (0x0131) - Current username
buf
char*
Buffer to store the retrieved string.
bufsize
u32
Size of the buffer in bytes.Recommended sizes:
  • Nickname: SYSUTIL_SYSTEMPARAM_NICKNAME_SIZE (128)
  • Username: SYSUTIL_SYSTEMPARAM_CURRENT_USERNAME_SIZE (64)
return
s32
Returns SYSUTIL_OK (0) on success, nonzero on error.

System Events

Events delivered to registered callbacks:
SYSUTIL_EXIT_GAME
0x0101
Exit game requested by user.
SYSUTIL_DRAW_BEGIN
0x0121
XMB menu drawing has started.
SYSUTIL_DRAW_END
0x0122
XMB menu drawing has finished.
SYSUTIL_MENU_OPEN
0x0131
XMB menu has been opened.
SYSUTIL_MENU_CLOSE
0x0132
XMB menu has been closed.
SYSUTIL_OSK_LOADED
0x0502
On-screen keyboard has been loaded.
SYSUTIL_OSK_DONE
0x0503
On-screen keyboard has finished user entry.
SYSUTIL_OSK_UNLOADED
0x0504
On-screen keyboard has been unloaded.
SYSUTIL_OSK_INPUT_ENTERED
0x0505
On-screen keyboard user entered input.
SYSUTIL_OSK_INPUT_CANCELED
0x0506
On-screen keyboard input was canceled.

Language Codes

Example Usage

#include <sysutil/sysutil.h>
#include <stdio.h>

// Event callback function
void eventCallback(u64 status, u64 param, void *usrdata) {
    switch(status) {
        case SYSUTIL_EXIT_GAME:
            printf("Exit game requested\n");
            // Set flag to exit main loop
            *(int*)usrdata = 1;
            break;
        case SYSUTIL_MENU_OPEN:
            printf("XMB menu opened\n");
            break;
        case SYSUTIL_MENU_CLOSE:
            printf("XMB menu closed\n");
            break;
    }
}

int main() {
    int exitFlag = 0;
    s32 lang;
    char nickname[SYSUTIL_SYSTEMPARAM_NICKNAME_SIZE];
    
    // Register callback for system events
    sysUtilRegisterCallback(SYSUTIL_EVENT_SLOT0, eventCallback, &exitFlag);
    
    // Get system language
    if(sysUtilGetSystemParamInt(SYSUTIL_SYSTEMPARAM_ID_LANG, &lang) == SYSUTIL_OK) {
        printf("System language: %d\n", lang);
    }
    
    // Get user nickname
    if(sysUtilGetSystemParamString(SYSUTIL_SYSTEMPARAM_ID_NICKNAME, 
                                    nickname, 
                                    SYSUTIL_SYSTEMPARAM_NICKNAME_SIZE) == SYSUTIL_OK) {
        printf("User nickname: %s\n", nickname);
    }
    
    // Main loop
    while(!exitFlag) {
        // Check for system events
        sysUtilCheckCallback();
        
        // Your game logic here...
    }
    
    // Cleanup
    sysUtilUnregisterCallback(SYSUTIL_EVENT_SLOT0);
    
    return 0;
}

Build docs developers (and LLMs) love