diff --git a/rpcs3/Emu/Cell/Modules/cellOskDialog.cpp b/rpcs3/Emu/Cell/Modules/cellOskDialog.cpp index 6c4e72f48e..f685f50587 100644 --- a/rpcs3/Emu/Cell/Modules/cellOskDialog.cpp +++ b/rpcs3/Emu/Cell/Modules/cellOskDialog.cpp @@ -1,4 +1,4 @@ -#include "stdafx.h" +#include "stdafx.h" #include "Emu/System.h" #include "Emu/IdManager.h" #include "Emu/Cell/PPUModule.h" @@ -448,6 +448,12 @@ error_code cellOskDialogDisableDimmer() error_code cellOskDialogSetKeyLayoutOption(u32 option) { cellOskDialog.todo("cellOskDialogSetKeyLayoutOption(option=0x%x)", option); + + if (option == 0 || option > 3) // CELL_OSKDIALOG_10KEY_PANEL OR CELL_OSKDIALOG_FULLKEY_PANEL + { + return CELL_OSKDIALOG_ERROR_PARAM; + } + return CELL_OK; } @@ -475,16 +481,40 @@ error_code cellOskDialogExtInputDeviceUnlock() return CELL_OK; } +error_code register_keyboard_event_hook_callback(u16 hookEventMode, vm::ptr pCallback) +{ + cellOskDialog.todo("register_keyboard_event_hook_callback(hookEventMode=%u, pCallback=*0x%x)", hookEventMode, pCallback); + + if (!pCallback) + { + return CELL_OSKDIALOG_ERROR_PARAM; + } + + return CELL_OK; +} + error_code cellOskDialogExtRegisterKeyboardEventHookCallback(u16 hookEventMode, vm::ptr pCallback) { cellOskDialog.todo("cellOskDialogExtRegisterKeyboardEventHookCallback(hookEventMode=%u, pCallback=*0x%x)", hookEventMode, pCallback); - return CELL_OK; + + if (hookEventMode == 0 || hookEventMode > 3) // CELL_OSKDIALOG_EVENT_HOOK_TYPE_FUNCTION_KEY OR CELL_OSKDIALOG_EVENT_HOOK_TYPE_ASCII_KEY + { + return CELL_OSKDIALOG_ERROR_PARAM; + } + + return register_keyboard_event_hook_callback(hookEventMode, pCallback); } error_code cellOskDialogExtRegisterKeyboardEventHookCallbackEx(u16 hookEventMode, vm::ptr pCallback) { cellOskDialog.todo("cellOskDialogExtRegisterKeyboardEventHookCallbackEx(hookEventMode=%u, pCallback=*0x%x)", hookEventMode, pCallback); - return CELL_OK; + + if (hookEventMode == 0 || hookEventMode > 7) // CELL_OSKDIALOG_EVENT_HOOK_TYPE_FUNCTION_KEY OR CELL_OSKDIALOG_EVENT_HOOK_TYPE_ASCII_KEY OR CELL_OSKDIALOG_EVENT_HOOK_TYPE_ONLY_MODIFIER + { + return CELL_OSKDIALOG_ERROR_PARAM; + } + + return register_keyboard_event_hook_callback(hookEventMode, pCallback); } error_code cellOskDialogExtAddJapaneseOptionDictionary(vm::cpptr filePath) @@ -590,6 +620,12 @@ error_code cellOskDialogExtEnableHalfByteKana() error_code cellOskDialogExtRegisterForceFinishCallback(vm::ptr pCallback) { cellOskDialog.todo("cellOskDialogExtRegisterForceFinishCallback(pCallback=*0x%x)", pCallback); + + if (!pCallback) + { + return CELL_OSKDIALOG_ERROR_PARAM; + } + return CELL_OK; } diff --git a/rpcs3/Emu/Cell/Modules/cellOskDialog.h b/rpcs3/Emu/Cell/Modules/cellOskDialog.h index f8f0ff61d6..530b8d404a 100644 --- a/rpcs3/Emu/Cell/Modules/cellOskDialog.h +++ b/rpcs3/Emu/Cell/Modules/cellOskDialog.h @@ -6,21 +6,21 @@ enum CellOskDialogError : u32 { CELL_OSKDIALOG_ERROR_IME_ALREADY_IN_USE = 0x8002b501, - CELL_OSKDIALOG_ERROR_GET_SIZE_ERROR = 0x8002b502, - CELL_OSKDIALOG_ERROR_UNKNOWN = 0x8002b503, - CELL_OSKDIALOG_ERROR_PARAM = 0x8002b504, + CELL_OSKDIALOG_ERROR_GET_SIZE_ERROR = 0x8002b502, + CELL_OSKDIALOG_ERROR_UNKNOWN = 0x8002b503, + CELL_OSKDIALOG_ERROR_PARAM = 0x8002b504, }; // OSK status for the callback enum { - CELL_SYSUTIL_OSKDIALOG_LOADED = 0x0502, - CELL_SYSUTIL_OSKDIALOG_FINISHED = 0x0503, - CELL_SYSUTIL_OSKDIALOG_UNLOADED = 0x0504, - CELL_SYSUTIL_OSKDIALOG_INPUT_ENTERED = 0x0505, - CELL_SYSUTIL_OSKDIALOG_INPUT_CANCELED = 0x0506, + CELL_SYSUTIL_OSKDIALOG_LOADED = 0x0502, + CELL_SYSUTIL_OSKDIALOG_FINISHED = 0x0503, + CELL_SYSUTIL_OSKDIALOG_UNLOADED = 0x0504, + CELL_SYSUTIL_OSKDIALOG_INPUT_ENTERED = 0x0505, + CELL_SYSUTIL_OSKDIALOG_INPUT_CANCELED = 0x0506, CELL_SYSUTIL_OSKDIALOG_INPUT_DEVICE_CHANGED = 0x0507, - CELL_SYSUTIL_OSKDIALOG_DISPLAY_CHANGED = 0x0508, + CELL_SYSUTIL_OSKDIALOG_DISPLAY_CHANGED = 0x0508, }; enum CellOskDialogInputFieldResult