From e86afb1154aa364e170be97087c0ab5d777cd9c2 Mon Sep 17 00:00:00 2001 From: w1naenator Date: Fri, 18 Jul 2025 14:47:40 +0300 Subject: [PATCH] some fixes - added log spam - fixed typo - fixed log texts --- src/core/libraries/ime/ime.cpp | 92 +++++++++++++++++------------ src/core/libraries/ime/ime_common.h | 2 +- src/core/libraries/ime/ime_ui.cpp | 4 +- 3 files changed, 56 insertions(+), 42 deletions(-) diff --git a/src/core/libraries/ime/ime.cpp b/src/core/libraries/ime/ime.cpp index 360f0fc54..2c494f59a 100644 --- a/src/core/libraries/ime/ime.cpp +++ b/src/core/libraries/ime/ime.cpp @@ -18,9 +18,11 @@ static ImeUi g_ime_ui; class ImeHandler { public: ImeHandler(const OrbisImeKeyboardParam* param) { + LOG_INFO(Lib_Ime, "Creating ImeHandler for keyboard"); Init(param, false); } ImeHandler(const OrbisImeParam* param) { + LOG_INFO(Lib_Ime, "Creating ImeHandler for IME"); Init(param, true); } ~ImeHandler() = default; @@ -38,8 +40,13 @@ public: openEvent.id = (ime_mode ? OrbisImeEventId::Open : OrbisImeEventId::KeyboardOpen); if (ime_mode) { - sceImeGetPanelSize(&m_param.ime, &openEvent.param.rect.width, - &openEvent.param.rect.height); + LOG_INFO(Lib_Ime, "calling sceImeGetPanelSize"); + Error e = sceImeGetPanelSize(&m_param.ime, &openEvent.param.rect.width, + &openEvent.param.rect.height); + if (e != Error::OK) { + LOG_ERROR(Lib_Ime, "sceImeGetPanelSize returned 0x{:X}", static_cast(e)); + } + openEvent.param.rect.x = m_param.ime.posx; openEvent.param.rect.y = m_param.ime.posy; } else { @@ -223,24 +230,23 @@ int PS4_SYSV_ABI sceImeGetPanelPositionAndForm() { } Error PS4_SYSV_ABI sceImeGetPanelSize(const OrbisImeParam* param, u32* width, u32* height) { - LOG_INFO(Lib_Ime, "sceImeGetPanelSize called"); + LOG_INFO(Lib_Ime, "called"); if (!param) { - LOG_ERROR(Lib_Ime, "sceImeGetPanelSize: param is NULL"); + LOG_ERROR(Lib_Ime, "param is NULL"); return Error::INVALID_ADDRESS; } if (!width) { - LOG_ERROR(Lib_Ime, "sceImeGetPanelSize: width pointer is NULL"); + LOG_ERROR(Lib_Ime, "width pointer is NULL"); return Error::INVALID_ADDRESS; } if (!height) { - LOG_ERROR(Lib_Ime, "sceImeGetPanelSize: height pointer is NULL"); + LOG_ERROR(Lib_Ime, "height pointer is NULL"); return Error::INVALID_ADDRESS; } if (static_cast(param->option) & ~0x7BFF) { // Basic check for invalid options - LOG_ERROR(Lib_Ime, "sceImeGetPanelSize: Invalid option 0x{:X}", - static_cast(param->option)); + LOG_ERROR(Lib_Ime, "Invalid option 0x{:X}", static_cast(param->option)); return Error::INVALID_OPTION; } @@ -248,35 +254,31 @@ Error PS4_SYSV_ABI sceImeGetPanelSize(const OrbisImeParam* param, u32* width, u3 case OrbisImeType::Default: *width = 500; // dummy value *height = 100; // dummy value - LOG_INFO(Lib_Ime, "sceImeGetPanelSize: IME type Default ({})", - static_cast(param->type)); + LOG_INFO(Lib_Ime, "IME type Default ({})", static_cast(param->type)); break; case OrbisImeType::BasicLatin: *width = 500; // dummy value *height = 100; // dummy value - LOG_INFO(Lib_Ime, "sceImeGetPanelSize: IME type BasicLatin ({})", - static_cast(param->type)); + LOG_INFO(Lib_Ime, "IME type BasicLatin ({})", static_cast(param->type)); break; case OrbisImeType::Url: *width = 500; // dummy value *height = 100; // dummy value - LOG_INFO(Lib_Ime, "sceImeGetPanelSize: IME type Url ({})", static_cast(param->type)); + LOG_INFO(Lib_Ime, "IME type Url ({})", static_cast(param->type)); break; case OrbisImeType::Mail: // We set our custom sizes, commented sizes are the original ones *width = 500; // 793 *height = 100; // 408 - LOG_INFO(Lib_Ime, "sceImeGetPanelSize: IME type Mail ({})", static_cast(param->type)); + LOG_INFO(Lib_Ime, "IME type Mail ({})", static_cast(param->type)); break; case OrbisImeType::Number: *width = 370; *height = 402; - LOG_INFO(Lib_Ime, "sceImeGetPanelSize: IME type Number ({})", - static_cast(param->type)); + LOG_INFO(Lib_Ime, "IME type Number ({})", static_cast(param->type)); break; default: - LOG_ERROR(Lib_Ime, "sceImeGetPanelSize: Invalid IME type ({})", - static_cast(param->type)); + LOG_ERROR(Lib_Ime, "Invalid IME type ({})", static_cast(param->type)); return Error::INVALID_TYPE; } @@ -287,9 +289,11 @@ Error PS4_SYSV_ABI sceImeKeyboardClose(Libraries::UserService::OrbisUserServiceU LOG_INFO(Lib_Ime, "called"); if (!g_keyboard_handler) { + LOG_ERROR(Lib_Ime, "No keyboard handler is open"); return Error::NOT_OPENED; } + LOG_INFO(Lib_Ime, "Closing keyboard handler for user ID: {}", userId); g_keyboard_handler.release(); return Error::OK; } @@ -308,23 +312,33 @@ Error PS4_SYSV_ABI sceImeKeyboardOpen(Libraries::UserService::OrbisUserServiceUs const OrbisImeKeyboardParam* param) { LOG_INFO(Lib_Ime, "called"); - LOG_INFO(Lib_Ime, "kValidImeDialogExtOptionMask=0x{:X}", kValidImeDialogExtOptionMask); + LOG_INFO(Lib_Ime, "kValidImeDialogExtOptionMask={:032b}", kValidImeDialogExtOptionMask); if (!param) { + LOG_ERROR(Lib_Ime, "param is null"); return Error::INVALID_ADDRESS; } if (!param->arg) { + LOG_ERROR(Lib_Ime, "param->arg is null"); return Error::INVALID_ARG; } if (!param->handler) { + LOG_ERROR(Lib_Ime, "param->handler is null"); return Error::INVALID_HANDLER; } if (g_keyboard_handler) { + LOG_ERROR(Lib_Ime, "Keyboard handler is already open"); return Error::BUSY; } g_keyboard_handler = std::make_unique(param); + if (!g_keyboard_handler) { + LOG_ERROR(Lib_Ime, "Failed to create keyboard handler"); + return Error::NO_MEMORY; + } else { + LOG_INFO(Lib_Ime, "Keyboard handler created successfully for user ID: {}", userId); + } return Error::OK; } @@ -347,7 +361,7 @@ Error PS4_SYSV_ABI sceImeOpen(const OrbisImeParam* param, const OrbisImeParamExt LOG_INFO(Lib_Ime, "called"); if (!param) { - LOG_ERROR(Lib_Ime, "sceImeOpen: param is null"); + LOG_ERROR(Lib_Ime, "param is null"); return Error::INVALID_ADDRESS; } else { // LOG_DEBUG values for debugging purposes @@ -374,7 +388,7 @@ Error PS4_SYSV_ABI sceImeOpen(const OrbisImeParam* param, const OrbisImeParamExt } if (!extended) { - LOG_INFO(Lib_Ime, "sceImeOpen: extended is null"); + LOG_INFO(Lib_Ime, "extended is null"); } else { // LOG_DEBUG values for debugging purposes LOG_DEBUG(Lib_Ime, "extended: option={:032b}", static_cast(extended->option)); @@ -411,46 +425,46 @@ Error PS4_SYSV_ABI sceImeOpen(const OrbisImeParam* param, const OrbisImeParamExt } if (param->user_id < 1 || param->user_id > 4) { - LOG_ERROR(Lib_Ime, "sceImeOpen: Invalid user_id ({})", static_cast(param->user_id)); + LOG_ERROR(Lib_Ime, "Invalid user_id ({})", static_cast(param->user_id)); return Error::INVALID_USER_ID; } if (!magic_enum::enum_contains(param->type)) { - LOG_ERROR(Lib_Ime, "sceImeOpen: Invalid type ({})", static_cast(param->type)); + LOG_ERROR(Lib_Ime, "Invalid type ({})", static_cast(param->type)); return Error::INVALID_TYPE; } if (static_cast(param->supported_languages) & ~kValidOrbisImeLanguageMask) { - LOG_ERROR(Lib_Ime, "sceImeOpen: supported_languages has invalid bits (0x{:016X})", + LOG_ERROR(Lib_Ime, "supported_languages has invalid bits (0x{:016X})", static_cast(param->supported_languages)); return Error::INVALID_SUPPORTED_LANGUAGES; } if (!magic_enum::enum_contains(param->enter_label)) { - LOG_ERROR(Lib_Ime, "sceImeOpen: Invalid enter_label ({})", + LOG_ERROR(Lib_Ime, "Invalid enter_label ({})", static_cast(param->enter_label)); return Error::INVALID_ENTER_LABEL; } if (!magic_enum::enum_contains(param->input_method)) { - LOG_ERROR(Lib_Ime, "sceImeOpen: Invalid input_method ({})", + LOG_ERROR(Lib_Ime, "Invalid input_method ({})", static_cast(param->input_method)); return Error::INVALID_INPUT_METHOD; } if (static_cast(param->option) & ~kValidImeOptionMask) { - LOG_ERROR(Lib_Ime, "sceImeOpen: option has invalid bits set (0x{:X}), mask=(0x{:X})", + LOG_ERROR(Lib_Ime, "option has invalid bits set (0x{:X}), mask=(0x{:X})", static_cast(param->option), kValidImeOptionMask); return Error::INVALID_OPTION; } if (param->maxTextLength == 0 || param->maxTextLength > ORBIS_IME_DIALOG_MAX_TEXT_LENGTH) { - LOG_ERROR(Lib_Ime, "sceImeOpen: maxTextLength invalid ({})", param->maxTextLength); + LOG_ERROR(Lib_Ime, "maxTextLength invalid ({})", param->maxTextLength); return Error::INVALID_MAX_TEXT_LENGTH; } if (!param->inputTextBuffer) { - LOG_ERROR(Lib_Ime, "sceImeOpen: inputTextBuffer is NULL"); + LOG_ERROR(Lib_Ime, "inputTextBuffer is NULL"); return Error::INVALID_INPUT_TEXT_BUFFER; } @@ -459,23 +473,23 @@ Error PS4_SYSV_ABI sceImeOpen(const OrbisImeParam* param, const OrbisImeParamExt const float maxHeight = useHighRes ? 2160.0f : 1080.0f; if (param->posx < 0.0f || param->posx >= maxWidth) { - LOG_ERROR(Lib_Ime, "sceImeOpen: posx out of range (%.2f), max allowed %.0f", param->posx, + LOG_ERROR(Lib_Ime, "posx out of range (%.2f), max allowed %.0f", param->posx, maxWidth); return Error::INVALID_POSX; } if (param->posy < 0.0f || param->posy >= maxHeight) { - LOG_ERROR(Lib_Ime, "sceImeOpen: posy out of range (%.2f), max allowed %.0f", param->posy, + LOG_ERROR(Lib_Ime, "posy out of range (%.2f), max allowed %.0f", param->posy, maxHeight); return Error::INVALID_POSY; } if (!magic_enum::enum_contains(param->horizontal_alignment)) { - LOG_ERROR(Lib_Ime, "sceImeOpen: Invalid horizontal_alignment ({})", + LOG_ERROR(Lib_Ime, "Invalid horizontal_alignment ({})", static_cast(param->horizontal_alignment)); return Error::INVALID_HORIZONTALIGNMENT; } if (!magic_enum::enum_contains(param->vertical_alignment)) { - LOG_ERROR(Lib_Ime, "sceImeOpen: Invalid vertical_alignment ({})", + LOG_ERROR(Lib_Ime, "Invalid vertical_alignment ({})", static_cast(param->vertical_alignment)); return Error::INVALID_VERTICALALIGNMENT; } @@ -483,20 +497,20 @@ Error PS4_SYSV_ABI sceImeOpen(const OrbisImeParam* param, const OrbisImeParamExt if (extended) { u32 ext_option_value = static_cast(extended->option); if (ext_option_value & ~kValidImeExtOptionMask) { - LOG_ERROR(Lib_Ime, "sceImeOpen: extended->option has invalid bits set (0x{:X})", + LOG_ERROR(Lib_Ime, "extended->option has invalid bits set (0x{:X})", ext_option_value); return Error::INVALID_EXTENDED; } } if (!param->work) { - LOG_ERROR(Lib_Ime, "sceImeOpen: work buffer is NULL"); + LOG_ERROR(Lib_Ime, "work buffer is NULL"); return Error::INVALID_WORK; } for (unsigned i = 0; i < sizeof(param->reserved); ++i) { if (param->reserved[i] != 0) { - LOG_ERROR(Lib_Ime, "sceImeOpen: reserved field must be zeroed"); + LOG_ERROR(Lib_Ime, "reserved field must be zeroed"); return Error::INVALID_RESERVED; } } @@ -504,12 +518,12 @@ Error PS4_SYSV_ABI sceImeOpen(const OrbisImeParam* param, const OrbisImeParamExt // Todo: validate arg and handler if (g_ime_handler) { - LOG_ERROR(Lib_Ime, "sceImeOpen: Error BUSY"); + LOG_ERROR(Lib_Ime, "Error BUSY"); return Error::BUSY; } g_ime_handler = std::make_unique(param); - LOG_INFO(Lib_Ime, "sceImeOpen: OK"); + LOG_INFO(Lib_Ime, "OK"); return Error::OK; } @@ -519,7 +533,7 @@ int PS4_SYSV_ABI sceImeOpenInternal() { } void PS4_SYSV_ABI sceImeParamInit(OrbisImeParam* param) { - LOG_INFO(Lib_Ime, "sceImeParamInit called"); + LOG_INFO(Lib_Ime, "called"); if (!param) { return; diff --git a/src/core/libraries/ime/ime_common.h b/src/core/libraries/ime/ime_common.h index 13f2bfa8f..457748a2d 100644 --- a/src/core/libraries/ime/ime_common.h +++ b/src/core/libraries/ime/ime_common.h @@ -323,7 +323,7 @@ enum class OrbisImeEventId : u32 { ChangeInputMethodState = 18, KeyboardOpen = 256, - KeyboardKeycodeDoen = 257, + KeyboardKeycodeDown = 257, KeyboardKeycodeUp = 258, KeyboardKeycodeRepeat = 259, KeyboardConnection = 260, diff --git a/src/core/libraries/ime/ime_ui.cpp b/src/core/libraries/ime/ime_ui.cpp index c49c70ede..bf4f06507 100644 --- a/src/core/libraries/ime/ime_ui.cpp +++ b/src/core/libraries/ime/ime_ui.cpp @@ -44,7 +44,7 @@ ImeState& ImeState::operator=(ImeState&& other) noexcept { } void ImeState::SendEvent(OrbisImeEvent* event) { - std::unique_lock lock{queue_mutex}; + std::unique_lock lock{queue_mutex}; event_queue.push(*event); } @@ -108,7 +108,7 @@ ImeUi& ImeUi::operator=(ImeUi&& other) { } void ImeUi::Draw() { - std::unique_lock lock{draw_mutex}; + std::unique_lock lock{draw_mutex}; if (!state) { return;