Files
AnyPS5/docs/dev/debt/libSceUserService.md
T
Dean Galvin 9ec09517ee fix(libSceConvertKeycode): treat oversized app metadata as a PS5 title
AppMetadata throws length_error for a title or title ID that does not fit its
buffer, which the title ID lookup did not catch, so a homebrew title with a long
ID made sceConvertKeycodeGetImeKeyboardType throw instead of using the PS5
fallback. Catch it with the other metadata failures and cover oversized,
malformed and missing metadata at the export. sceUserServiceGetKeyboardType also
gets a test that a malformed ANYPS5_LANGUAGE is rejected with the output left
untouched, and the debt entries say so.
2026-10-23 23:25:25 +13:00

3.2 KiB

libSceUserService technical debt

Unknown function info

  • sceUserServiceGetNpAccountId (libSceUserService) - the account id for a user with no linked PSN account is assumed to be 0 with success; libSceNpManager's sceNpGetAccountIdA answers the same question with SCE_NP_ERROR_SIGNED_OUT
  • sceUserServiceInitialize and sceUserServiceInitialize2 (libSceUserService) - event delivery has no background service thread, so the confirmed priority and Initialize2 CPU affinity mask do not affect host scheduling.
  • sceUserServiceGetUserColor (libSceUserService) - the default profile colour is assumed to be blue (0)
  • sceUserServiceGetUserName (libSceUserService) - 0x80960105, which a PS5 (firmware 13.60) returns for a user id it does not know, has no known name; it is USER_SERVICE_ERROR_UNKNOWN_USER here. On the console a registered user who is not logged in still gets their name; here only the initial user exists
  • sceUserServiceGetAgeLevel (libSceUserService) - on a PS5 (firmware 13.60) the value is the age set in the user's parental restriction (0, 7, 12 and 15 were measured) and 0xFFFFFFFF without one; a user who is not logged in returns 0x80960009 with or without an output. Parental restrictions are not modelled, so the initial user is always reported as unrestricted. PPSA12544 (Unity) only stores the value for its user profile
  • sceUserServiceGetAccessibilityChatTranscription, PressAndHoldDelay, TriggerEffect, Vibration, ZoomEnabled, ZoomFollowFocus (libSceUserService) - report 0, 0, 1, 1, 0 and 1, what a PS5 (firmware 13.60) reports for a user whose accessibility settings are all at their defaults; the console reports the user's own settings (a changed vibration intensity read 3), which are not modelled. What each number means is unknown. A user who is not logged in returns 0x80960009 with or without an output
  • sceUserServiceGetKeyboardType, sceUserServiceGetJapaneseInputType, sceUserServiceGetTraditionalChineseInputType (libSceUserService) - AnyPS5 stores no per-user keyboard setting, so the initial user reports the keyboard type of the configured system language (ANYPS5_LANGUAGE, English US by default) and 0 for the two input variants, and any other user id returns USER_SERVICE_ERROR_UNKNOWN_USER. The language-to-keyboard-type table is the repository owner's and covers languages 0 to 29; a language outside it, such as Ukrainian (30), reports 20 (US English). A value that is not a console language number is not replaced by a default: sceSystemServiceParamGetInt rejects it with an error naming ANYPS5_LANGUAGE, and the keyboard type call throws that error and leaves the output untouched. The input variant is 0 because the owner's table needs one only for Japanese and Traditional Chinese, and gives 0 for both. sceConvertKeycodeGetImeKeyboardType consumes these values.