diff --git a/src/core/libraries/libsceuserservice.cpp b/src/core/libraries/libsceuserservice.cpp index 1d80fff0..30a0344f 100644 --- a/src/core/libraries/libsceuserservice.cpp +++ b/src/core/libraries/libsceuserservice.cpp @@ -550,12 +550,12 @@ int PS4_SYSV_ABI sceUserServiceGetLoginFlag() { return ORBIS_OK; } -s32 PS4_SYSV_ABI sceUserServiceGetLoginUserIdList(SceUserServiceLoginUserIdList* userIdList) { +s32 PS4_SYSV_ABI sceUserServiceGetLoginUserIdList(OrbisUserServiceLoginUserIdList* userIdList) { PRINT_DUMMY_FUNCTION_NAME(); userIdList->user_id[0] = 1; - userIdList->user_id[1] = -1; - userIdList->user_id[2] = -1; - userIdList->user_id[3] = -1; + userIdList->user_id[1] = ORBIS_USER_SERVICE_USER_ID_INVALID; + userIdList->user_id[2] = ORBIS_USER_SERVICE_USER_ID_INVALID; + userIdList->user_id[3] = ORBIS_USER_SERVICE_USER_ID_INVALID; return ORBIS_OK; } @@ -1023,7 +1023,7 @@ int PS4_SYSV_ABI sceUserServiceGetTraditionalChineseInputType() { s32 PS4_SYSV_ABI sceUserServiceGetUserColor(int user_id, int* color) { // TODO fix me better PRINT_DUMMY_FUNCTION_NAME(); - *color = 0; // blue + *color = ORBIS_USER_SERVICE_USER_COLOR_BLUE; return ORBIS_OK; } @@ -1088,7 +1088,7 @@ int PS4_SYSV_ABI sceUserServiceGetVolumeForSidetone() { return ORBIS_OK; } -s32 PS4_SYSV_ABI sceUserServiceInitialize(const SceUserServiceInitializeParams* initParams) { +s32 PS4_SYSV_ABI sceUserServiceInitialize(const OrbisUserServiceInitializeParams* initParams) { PRINT_DUMMY_FUNCTION_NAME(); return ORBIS_OK; } diff --git a/src/core/libraries/libsceuserservice.h b/src/core/libraries/libsceuserservice.h index e675e581..42213b9b 100644 --- a/src/core/libraries/libsceuserservice.h +++ b/src/core/libraries/libsceuserservice.h @@ -1,18 +1,56 @@ // SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later - +// reference : +// https://github.com/OpenOrbis/OpenOrbis-PS4-Toolchain/blob/master/include/orbis/_types/user.h #pragma once #include "library_common.h" namespace Libraries::UserService { -struct SceUserServiceInitializeParams { +// Maximum number of users that can be logged in at once +constexpr int ORBIS_USER_SERVICE_MAX_LOGIN_USERS = 4; +// Maximum number of users that can be registered in the system +constexpr int ORBIS_USER_SERVICE_MAX_REGISTER_USERS = 16; +// Maximum user name length +constexpr int ORBIS_USER_SERVICE_MAX_USER_NAME_LENGTH = 16; + +constexpr int ORBIS_USER_SERVICE_USER_ID_SYSTEM = 0xFF; +constexpr int ORBIS_USER_SERVICE_USER_ID_INVALID = -1; + +using OrbisUserServiceUserId = s32; + +constexpr int ORBIS_KERNEL_PRIO_FIFO_LOWEST = 0x2FF; +constexpr int ORBIS_KERNEL_PRIO_FIFO_NORMAL = 0x2BC; +constexpr int ORBIS_KERNEL_PRIO_FIFO_HIGHEST = 0x100; + +struct OrbisUserServiceInitializeParams { s32 priority; }; -struct SceUserServiceLoginUserIdList { - int user_id[4]; +struct OrbisUserServiceLoginUserIdList { + int user_id[ORBIS_USER_SERVICE_MAX_LOGIN_USERS]; +}; + +struct OrbisUserServiceRegisteredUserIdList { + OrbisUserServiceUserId userId[ORBIS_USER_SERVICE_MAX_REGISTER_USERS]; +}; + +enum OrbisUserServiceUserColor : s32 { + ORBIS_USER_SERVICE_USER_COLOR_BLUE = 0, + ORBIS_USER_SERVICE_USER_COLOR_RED = 1, + ORBIS_USER_SERVICE_USER_COLOR_GREEN = 2, + ORBIS_USER_SERVICE_USER_COLOR_PINK = 3, +}; + +enum OrbisUserServiceEventType : s32 { + SCE_USER_SERVICE_EVENT_TYPE_LOGIN = 0, // Login event + SCE_USER_SERVICE_EVENT_TYPE_LOGOUT = 1, // Logout event +}; + +struct OrbisUserServiceEvent { + OrbisUserServiceEventType event; + OrbisUserServiceUserId userId; }; int PS4_SYSV_ABI sceUserServiceInitializeForShellCore(); @@ -123,7 +161,7 @@ int PS4_SYSV_ABI sceUserServiceGetKratosPrimaryUser(); int PS4_SYSV_ABI sceUserServiceGetLastLoginOrder(); int PS4_SYSV_ABI sceUserServiceGetLightBarBaseBrightness(); int PS4_SYSV_ABI sceUserServiceGetLoginFlag(); -s32 PS4_SYSV_ABI sceUserServiceGetLoginUserIdList(SceUserServiceLoginUserIdList* userIdList); +s32 PS4_SYSV_ABI sceUserServiceGetLoginUserIdList(OrbisUserServiceLoginUserIdList* userIdList); int PS4_SYSV_ABI sceUserServiceGetMicLevel(); int PS4_SYSV_ABI sceUserServiceGetMouseHandType(); int PS4_SYSV_ABI sceUserServiceGetMousePointerSpeed(); @@ -229,7 +267,7 @@ int PS4_SYSV_ABI sceUserServiceGetVolumeForController(); int PS4_SYSV_ABI sceUserServiceGetVolumeForGenericUSB(); int PS4_SYSV_ABI sceUserServiceGetVolumeForMorpheusSidetone(); int PS4_SYSV_ABI sceUserServiceGetVolumeForSidetone(); -s32 PS4_SYSV_ABI sceUserServiceInitialize(const SceUserServiceInitializeParams* initParams); +s32 PS4_SYSV_ABI sceUserServiceInitialize(const OrbisUserServiceInitializeParams* initParams); int PS4_SYSV_ABI sceUserServiceInitialize2(); int PS4_SYSV_ABI sceUserServiceIsGuestUser(); int PS4_SYSV_ABI sceUserServiceIsKratosPrimaryUser();