mirror of
https://github.com/shadps4-emu/shadPS4.git
synced 2025-06-05 02:03:16 +00:00
Autogen system,user,dialog modules (#98)
* some rework on system_service, user_service * fixed clang format * more clang fix * more clang fix * added error codes in system service * some libc functions * fixed fprintf * small fix * linux fix * error handling in user service * error codes reorganized
This commit is contained in:
parent
8c4f386641
commit
2a03b4d03b
30 changed files with 8184 additions and 184 deletions
|
@ -455,6 +455,9 @@ void libcSymbolsRegister(Loader::SymbolsResolver* sym) {
|
|||
LIB_FUNCTION("DfivPArhucg", "libc", 1, "libc", 1, 1, ps4_memcmp);
|
||||
LIB_FUNCTION("Q3VBxCXhUHs", "libc", 1, "libc", 1, 1, ps4_memcpy);
|
||||
LIB_FUNCTION("8zTFvBIAIN8", "libc", 1, "libc", 1, 1, ps4_memset);
|
||||
LIB_FUNCTION("9yDWMxEFdJU", "libc", 1, "libc", 1, 1, ps4_strrchr);
|
||||
LIB_FUNCTION("aesyjrHVWy4", "libc", 1, "libc", 1, 1, ps4_strncmp);
|
||||
LIB_FUNCTION("g7zzzLDYGw0", "libc", 1, "libc", 1, 1, ps4_strdup);
|
||||
|
||||
// stdio functions
|
||||
LIB_FUNCTION("xeYO4u7uyJ0", "libc", 1, "libc", 1, 1, ps4_fopen);
|
||||
|
@ -462,6 +465,11 @@ void libcSymbolsRegister(Loader::SymbolsResolver* sym) {
|
|||
LIB_FUNCTION("Q2V+iqvjgC0", "libc", 1, "libc", 1, 1, ps4_vsnprintf);
|
||||
LIB_FUNCTION("YQ0navp+YIc", "libc", 1, "libc", 1, 1, ps4_puts);
|
||||
LIB_FUNCTION("fffwELXNVFA", "libc", 1, "libc", 1, 1, ps4_fprintf);
|
||||
LIB_FUNCTION("QMFyLoqNxIg", "libc", 1, "libc", 1, 1, ps4_setvbuf);
|
||||
LIB_FUNCTION("uodLYyUip20", "libc", 1, "libc", 1, 1, ps4_fclose);
|
||||
LIB_FUNCTION("rQFVBXp-Cxg", "libc", 1, "libc", 1, 1, ps4_fseek);
|
||||
LIB_FUNCTION("SHlt7EhOtqA", "libc", 1, "libc", 1, 1, ps4_fgetpos);
|
||||
LIB_FUNCTION("lbB+UlZqVG0", "libc", 1, "libc", 1, 1, ps4_fread);
|
||||
|
||||
// misc
|
||||
LIB_OBJ("P330P3dFF68", "libc", 1, "libc", 1, 1, &g_need_sceLibc);
|
||||
|
|
|
@ -10,7 +10,38 @@ namespace Core::Libraries::LibC {
|
|||
|
||||
std::FILE* PS4_SYSV_ABI ps4_fopen(const char* filename, const char* mode) {
|
||||
auto* mnt = Common::Singleton<Core::FileSys::MntPoints>::Instance();
|
||||
return std::fopen(mnt->GetHostFile(filename).c_str(), mode);
|
||||
FILE* f = std::fopen(mnt->GetHostFile(filename).c_str(), mode);
|
||||
if (f != nullptr) {
|
||||
LOG_INFO(Lib_LibC, "fopen = {}", mnt->GetHostFile(filename).c_str());
|
||||
} else {
|
||||
LOG_INFO(Lib_LibC, "fopen can't open = {}", mnt->GetHostFile(filename).c_str());
|
||||
}
|
||||
return f;
|
||||
}
|
||||
|
||||
int PS4_SYSV_ABI ps4_fclose(FILE* stream) {
|
||||
LOG_INFO(Lib_LibC, "callled");
|
||||
int ret = 0;
|
||||
if (stream != nullptr) {
|
||||
ret = fclose(stream);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
int PS4_SYSV_ABI ps4_setvbuf(FILE* stream, char* buf, int mode, size_t size) {
|
||||
return setvbuf(stream, buf, mode, size);
|
||||
}
|
||||
|
||||
int PS4_SYSV_ABI ps4_fseek(FILE* stream, long offset, int whence) {
|
||||
return fseek(stream, offset, whence);
|
||||
}
|
||||
|
||||
int PS4_SYSV_ABI ps4_fgetpos(FILE* stream, fpos_t* pos) {
|
||||
return fgetpos(stream, pos);
|
||||
}
|
||||
|
||||
std::size_t PS4_SYSV_ABI ps4_fread(void* ptr, size_t size, size_t nmemb, FILE* stream) {
|
||||
return fread(ptr, size, nmemb, stream);
|
||||
}
|
||||
|
||||
int PS4_SYSV_ABI ps4_printf(VA_ARGS) {
|
||||
|
@ -23,10 +54,12 @@ int PS4_SYSV_ABI ps4_fprintf(FILE* file, VA_ARGS) {
|
|||
if (fd == 1 || fd == 2) { // output stdout and stderr to console
|
||||
VA_CTX(ctx);
|
||||
return printf_ctx(&ctx);
|
||||
} else {
|
||||
VA_CTX(ctx);
|
||||
char buf[256];
|
||||
fprintf_ctx(&ctx, buf);
|
||||
return fprintf(file, "%s", buf);
|
||||
}
|
||||
|
||||
UNREACHABLE_MSG("Unimplemented fprintf case");
|
||||
return 0;
|
||||
}
|
||||
|
||||
int PS4_SYSV_ABI ps4_vsnprintf(char* s, size_t n, const char* format, VaList* arg) {
|
||||
|
|
|
@ -13,5 +13,10 @@ int PS4_SYSV_ABI ps4_printf(VA_ARGS);
|
|||
int PS4_SYSV_ABI ps4_vsnprintf(char* s, size_t n, const char* format, VaList* arg);
|
||||
int PS4_SYSV_ABI ps4_puts(const char* s);
|
||||
int PS4_SYSV_ABI ps4_fprintf(FILE* file, VA_ARGS);
|
||||
int PS4_SYSV_ABI ps4_setvbuf(FILE* stream, char* buf, int mode, size_t size);
|
||||
int PS4_SYSV_ABI ps4_fclose(FILE* stream);
|
||||
int PS4_SYSV_ABI ps4_fseek(FILE* stream, long offset, int whence);
|
||||
int PS4_SYSV_ABI ps4_fgetpos(FILE* stream, fpos_t* pos);
|
||||
std::size_t PS4_SYSV_ABI ps4_fread(void* ptr, size_t size, size_t nmemb, FILE* stream);
|
||||
|
||||
} // namespace Core::Libraries::LibC
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#include <cstdlib>
|
||||
#include <cstring>
|
||||
#include "core/hle/libraries/libc/libc_string.h"
|
||||
|
||||
|
@ -42,4 +43,19 @@ size_t PS4_SYSV_ABI ps4_strlen(const char* str) {
|
|||
return std::strlen(str);
|
||||
}
|
||||
|
||||
char* PS4_SYSV_ABI ps4_strrchr(const char* s, int c) {
|
||||
return (char*)strrchr(s, c);
|
||||
}
|
||||
|
||||
int PS4_SYSV_ABI ps4_strncmp(const char* s1, const char* s2, size_t n) {
|
||||
return strncmp(s1, s2, n);
|
||||
}
|
||||
|
||||
char* PS4_SYSV_ABI ps4_strdup(const char* str1) {
|
||||
char* dup = (char*)std::malloc(std::strlen(str1) + 1);
|
||||
if (dup != NULL)
|
||||
strcpy(dup, str1);
|
||||
return dup;
|
||||
}
|
||||
|
||||
} // namespace Core::Libraries::LibC
|
||||
|
|
|
@ -17,5 +17,8 @@ void* PS4_SYSV_ABI ps4_memmove(void* dest, const void* src, std::size_t count);
|
|||
char* PS4_SYSV_ABI ps4_strcpy(char* destination, const char* source);
|
||||
char* PS4_SYSV_ABI ps4_strcat(char* dest, const char* src);
|
||||
size_t PS4_SYSV_ABI ps4_strlen(const char* str);
|
||||
char* PS4_SYSV_ABI ps4_strrchr(const char* s, int c);
|
||||
int PS4_SYSV_ABI ps4_strncmp(const char* s1, const char* s2, size_t n);
|
||||
char* PS4_SYSV_ABI ps4_strdup(const char* str1);
|
||||
|
||||
} // namespace Core::Libraries::LibC
|
||||
|
|
|
@ -736,6 +736,14 @@ static int printf_ctx(VaCtx* ctx) {
|
|||
return result;
|
||||
}
|
||||
|
||||
static int fprintf_ctx(VaCtx* ctx, char* buf) {
|
||||
const char* format = vaArgPtr<const char>(&ctx->va_list);
|
||||
char buffer[256];
|
||||
int result = _vsnprintf(_out_buffer, buffer, format, &ctx->va_list);
|
||||
std::strcpy(buf, buffer);
|
||||
return result;
|
||||
}
|
||||
|
||||
static int vsnprintf_ctx(char* s, size_t n, const char* format, VaList* arg) {
|
||||
char buffer[n];
|
||||
int result = _vsnprintf(_out_buffer, buffer, format, arg);
|
||||
|
|
|
@ -8,14 +8,14 @@
|
|||
#include "core/hle/libraries/libpad/pad.h"
|
||||
#include "core/hle/libraries/libs.h"
|
||||
|
||||
namespace Core::Libraries::LibPad {
|
||||
namespace OldLibraries::LibPad {
|
||||
|
||||
int PS4_SYSV_ABI scePadInit() {
|
||||
LOG_WARNING(Lib_Pad, "(STUBBED) called");
|
||||
return SCE_OK;
|
||||
}
|
||||
|
||||
int PS4_SYSV_ABI scePadOpen(Core::Libraries::LibUserService::SceUserServiceUserId user_id, s32 type,
|
||||
int PS4_SYSV_ABI scePadOpen(Libraries::UserService::OrbisUserServiceUserId user_id, s32 type,
|
||||
s32 index, const ScePadOpenParam* pParam) {
|
||||
LOG_INFO(Lib_Pad, "(STUBBED) called user_id = {} type = {} index = {}", user_id, type, index);
|
||||
return 1; // dummy
|
||||
|
@ -48,10 +48,10 @@ int PS4_SYSV_ABI scePadReadState(int32_t handle, ScePadData* pData) {
|
|||
return SCE_OK;
|
||||
}
|
||||
|
||||
void padSymbolsRegister(Loader::SymbolsResolver* sym) {
|
||||
void padSymbolsRegister(Core::Loader::SymbolsResolver* sym) {
|
||||
LIB_FUNCTION("hv1luiJrqQM", "libScePad", 1, "libScePad", 1, 1, scePadInit);
|
||||
LIB_FUNCTION("xk0AcarP3V4", "libScePad", 1, "libScePad", 1, 1, scePadOpen);
|
||||
LIB_FUNCTION("YndgXqQVV7c", "libScePad", 1, "libScePad", 1, 1, scePadReadState);
|
||||
}
|
||||
|
||||
} // namespace Core::Libraries::LibPad
|
||||
} // namespace OldLibraries::LibPad
|
||||
|
|
|
@ -4,9 +4,13 @@
|
|||
#pragma once
|
||||
|
||||
#include "common/types.h"
|
||||
#include "core/hle/libraries/libuserservice/libuserservice.h"
|
||||
#include "src/core/libraries/libsceuserservice.h"
|
||||
|
||||
namespace Core::Libraries::LibPad {
|
||||
namespace Core::Loader {
|
||||
class SymbolsResolver;
|
||||
}
|
||||
|
||||
namespace OldLibraries::LibPad {
|
||||
|
||||
enum ScePadButton : u32 {
|
||||
L3 = 0x00000002,
|
||||
|
@ -92,10 +96,10 @@ struct ScePadData {
|
|||
};
|
||||
|
||||
int PS4_SYSV_ABI scePadInit();
|
||||
int PS4_SYSV_ABI scePadOpen(LibUserService::SceUserServiceUserId userId, s32 type, s32 index,
|
||||
const ScePadOpenParam* pParam);
|
||||
int PS4_SYSV_ABI scePadOpen(Libraries::UserService::OrbisUserServiceUserId userId, s32 type,
|
||||
s32 index, const ScePadOpenParam* pParam);
|
||||
int PS4_SYSV_ABI scePadReadState(int32_t handle, ScePadData* pData);
|
||||
|
||||
void padSymbolsRegister(Loader::SymbolsResolver* sym);
|
||||
void padSymbolsRegister(Core::Loader::SymbolsResolver* sym);
|
||||
|
||||
}; // namespace Core::Libraries::LibPad
|
||||
}; // namespace OldLibraries::LibPad
|
||||
|
|
|
@ -7,19 +7,25 @@
|
|||
#include "core/hle/libraries/libpad/pad.h"
|
||||
#include "core/hle/libraries/libs.h"
|
||||
#include "core/hle/libraries/libscegnmdriver/libscegnmdriver.h"
|
||||
#include "core/hle/libraries/libsystemservice/system_service.h"
|
||||
#include "core/hle/libraries/libuserservice/libuserservice.h"
|
||||
#include "src/core/libraries/libscecommondialog.h"
|
||||
#include "src/core/libraries/libscemsgdialog.h"
|
||||
#include "src/core/libraries/libscesystemservice.h"
|
||||
#include "src/core/libraries/libsceuserservice.h"
|
||||
|
||||
namespace Core::Libraries {
|
||||
namespace OldLibraries {
|
||||
|
||||
void InitHLELibs(Loader::SymbolsResolver* sym) {
|
||||
LibKernel::LibKernel_Register(sym);
|
||||
void InitHLELibs(Core::Loader::SymbolsResolver* sym) {
|
||||
Core::Libraries::LibKernel::LibKernel_Register(sym);
|
||||
HLE::Libs::Graphics::VideoOut::videoOutRegisterLib(sym);
|
||||
LibSceGnmDriver::LibSceGnmDriver_Register(sym);
|
||||
LibUserService::userServiceSymbolsRegister(sym);
|
||||
LibPad::padSymbolsRegister(sym);
|
||||
LibSystemService::systemServiceSymbolsRegister(sym);
|
||||
LibC::libcSymbolsRegister(sym);
|
||||
Core::Libraries::LibSceGnmDriver::LibSceGnmDriver_Register(sym);
|
||||
OldLibraries::LibPad::padSymbolsRegister(sym);
|
||||
Core::Libraries::LibC::libcSymbolsRegister(sym);
|
||||
|
||||
// new libraries folder from autogen
|
||||
Libraries::UserService::RegisterlibSceUserService(sym);
|
||||
Libraries::SystemService::RegisterlibSceSystemService(sym);
|
||||
Libraries::CommonDialog::RegisterlibSceCommonDialog(sym);
|
||||
Libraries::MsgDialog::RegisterlibSceMsgDialog(sym);
|
||||
}
|
||||
|
||||
} // namespace Core::Libraries
|
||||
} // namespace OldLibraries
|
||||
|
|
|
@ -34,8 +34,8 @@
|
|||
sym->AddSymbol(sr, func); \
|
||||
}
|
||||
|
||||
namespace Core::Libraries {
|
||||
namespace OldLibraries {
|
||||
|
||||
void InitHLELibs(Loader::SymbolsResolver* sym);
|
||||
void InitHLELibs(Core::Loader::SymbolsResolver* sym);
|
||||
|
||||
} // namespace Core::Libraries
|
||||
} // namespace OldLibraries
|
||||
|
|
|
@ -1,35 +0,0 @@
|
|||
// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#include "common/logging/log.h"
|
||||
#include "core/hle/error_codes.h"
|
||||
#include "core/hle/libraries/libs.h"
|
||||
#include "core/hle/libraries/libsystemservice/system_service.h"
|
||||
|
||||
namespace Core::Libraries::LibSystemService {
|
||||
|
||||
s32 PS4_SYSV_ABI sceSystemServiceHideSplashScreen() {
|
||||
LOG_WARNING(Lib_SystemService, "(STUBBED) called");
|
||||
return SCE_OK;
|
||||
}
|
||||
|
||||
s32 PS4_SYSV_ABI sceSystemServiceGetStatus(SceSystemServiceStatus* status) {
|
||||
SceSystemServiceStatus st = {};
|
||||
st.eventNum = 0;
|
||||
st.isSystemUiOverlaid = false;
|
||||
st.isInBackgroundExecution = false;
|
||||
st.isCpuMode7CpuNormal = true;
|
||||
st.isGameLiveStreamingOnAir = false;
|
||||
st.isOutOfVrPlayArea = false;
|
||||
*status = st;
|
||||
return SCE_OK;
|
||||
}
|
||||
|
||||
void systemServiceSymbolsRegister(Loader::SymbolsResolver* sym) {
|
||||
LIB_FUNCTION("Vo5V8KAwCmk", "libSceSystemService", 1, "libSceSystemService", 1, 1,
|
||||
sceSystemServiceHideSplashScreen);
|
||||
LIB_FUNCTION("rPo6tV8D9bM", "libSceSystemService", 1, "libSceSystemService", 1, 1,
|
||||
sceSystemServiceGetStatus);
|
||||
}
|
||||
|
||||
}; // namespace Core::Libraries::LibSystemService
|
|
@ -1,29 +0,0 @@
|
|||
// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "common/types.h"
|
||||
|
||||
namespace Core::Loader {
|
||||
class SymbolsResolver;
|
||||
}
|
||||
|
||||
namespace Core::Libraries::LibSystemService {
|
||||
|
||||
struct SceSystemServiceStatus {
|
||||
s32 eventNum;
|
||||
bool isSystemUiOverlaid;
|
||||
bool isInBackgroundExecution;
|
||||
bool isCpuMode7CpuNormal;
|
||||
bool isGameLiveStreamingOnAir;
|
||||
bool isOutOfVrPlayArea;
|
||||
u8 reserved[];
|
||||
};
|
||||
|
||||
s32 PS4_SYSV_ABI sceSystemServiceHideSplashScreen();
|
||||
s32 PS4_SYSV_ABI sceSystemServiceGetStatus(SceSystemServiceStatus* status);
|
||||
|
||||
void systemServiceSymbolsRegister(Loader::SymbolsResolver* sym);
|
||||
|
||||
}; // namespace Core::Libraries::LibSystemService
|
|
@ -1,33 +0,0 @@
|
|||
// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#include "common/logging/log.h"
|
||||
#include "core/hle/error_codes.h"
|
||||
#include "core/hle/libraries/libs.h"
|
||||
#include "core/hle/libraries/libuserservice/libuserservice.h"
|
||||
|
||||
namespace Core::Libraries::LibUserService {
|
||||
|
||||
s32 PS4_SYSV_ABI sceUserServiceInitialize(const SceUserServiceInitializeParams* initParams) {
|
||||
LOG_WARNING(Lib_UserService, "(STUBBED) called");
|
||||
return SCE_OK;
|
||||
}
|
||||
|
||||
s32 PS4_SYSV_ABI sceUserServiceGetLoginUserIdList(SceUserServiceLoginUserIdList* userIdList) {
|
||||
LOG_WARNING(Lib_UserService, "(STUBBED) called");
|
||||
userIdList->user_id[0] = 1;
|
||||
userIdList->user_id[1] = -1;
|
||||
userIdList->user_id[2] = -1;
|
||||
userIdList->user_id[3] = -1;
|
||||
|
||||
return SCE_OK;
|
||||
}
|
||||
|
||||
void userServiceSymbolsRegister(Loader::SymbolsResolver* sym) {
|
||||
LIB_FUNCTION("j3YMu1MVNNo", "libSceUserService", 1, "libSceUserService", 1, 1,
|
||||
sceUserServiceInitialize);
|
||||
LIB_FUNCTION("fPhymKNvK-A", "libSceUserService", 1, "libSceUserService", 1, 1,
|
||||
sceUserServiceGetLoginUserIdList);
|
||||
}
|
||||
|
||||
} // namespace Core::Libraries::LibUserService
|
|
@ -1,29 +0,0 @@
|
|||
// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "common/types.h"
|
||||
|
||||
namespace Core::Loader {
|
||||
class SymbolsResolver;
|
||||
}
|
||||
|
||||
namespace Core::Libraries::LibUserService {
|
||||
|
||||
using SceUserServiceUserId = s32;
|
||||
|
||||
struct SceUserServiceInitializeParams {
|
||||
s32 priority;
|
||||
};
|
||||
|
||||
struct SceUserServiceLoginUserIdList {
|
||||
int user_id[4];
|
||||
};
|
||||
|
||||
s32 PS4_SYSV_ABI sceUserServiceInitialize(const SceUserServiceInitializeParams* initParams);
|
||||
s32 PS4_SYSV_ABI sceUserServiceGetLoginUserIdList(SceUserServiceLoginUserIdList* userIdList);
|
||||
|
||||
void userServiceSymbolsRegister(Loader::SymbolsResolver* sym);
|
||||
|
||||
}; // namespace Core::Libraries::LibUserService
|
|
@ -1,12 +0,0 @@
|
|||
// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#pragma once
|
||||
|
||||
constexpr int SCE_USER_SERVICE_MAX_LOGIN_USERS = 4; // Max users logged in at once
|
||||
constexpr int SCE_USER_SERVICE_MAX_USER_NAME_LENGTH = 16; // Max length for user name
|
||||
|
||||
constexpr int SCE_USER_SERVICE_USER_ID_INVALID = -1; // Invalid user ID
|
||||
constexpr int SCE_USER_SERVICE_USER_ID_SYSTEM = 255; // Generic id for device
|
||||
constexpr int SCE_USER_SERVICE_USER_ID_EVERYONE =
|
||||
254; // Generic id for user (mostly used in common dialogs)
|
Loading…
Add table
Add a link
Reference in a new issue