Skip to content

Commit

Permalink
Initial commit
Browse files Browse the repository at this point in the history
  • Loading branch information
igor725 committed May 4, 2024
1 parent dcea5cb commit e6ed43b
Show file tree
Hide file tree
Showing 3 changed files with 58 additions and 19 deletions.
38 changes: 26 additions & 12 deletions modules/libSceIme/codes.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
#include <stdint.h>

namespace Err {
namespace Ime {
constexpr int32_t BUSY = -2135162879;
constexpr int32_t NOT_OPENED = -2135162878;
constexpr int32_t NO_MEMORY = -2135162877;
Expand Down Expand Up @@ -36,17 +37,30 @@ constexpr int32_t INVALID_ADDRESS = -2135162831;
constexpr int32_t INVALID_RESERVED = -2135162830;
constexpr int32_t INVALID_TIMING = -2135162829;
constexpr int32_t INTERNAL = -2135162625;
} // namespace Ime
} // namespace Err

constexpr uint32_t SCE_IME_OSK_DISPLAY_SIZE_WIDTH = 1920;
constexpr uint32_t SCE_IME_OSK_DISPLAY_SIZE_HEIGHT = 1080;
constexpr uint32_t SCE_IME_OSK_OVER_2K_DISPLAY_SIZE_WIDTH = 3840;
constexpr uint32_t SCE_IME_OSK_OVER_2K_DISPLAY_SIZE_HEIGHT = 2160;
constexpr uint32_t SCE_IME_MAX_PREEDIT_LENGTH = 30;
constexpr uint32_t SCE_IME_MAX_EXPANDED_PREEDIT_LENGTH = 120;
constexpr uint32_t SCE_IME_MAX_TEXT_LENGTH = 2048;
constexpr uint32_t SCE_IME_MAX_TEXT_AREA = 4;
constexpr uint32_t SCE_IME_MAX_CANDIDATE_WORD_LENGTH = 55;
constexpr uint32_t SCE_IME_MAX_CANDIDATE_LIST_SIZE = 100;
constexpr uint32_t SCE_IME_WORK_BUFFER_SIZE = 20 * 1024;
constexpr uint32_t SCE_IME_KEYBOARD_MAX_NUMBER = 5;
namespace Ime {
constexpr uint32_t OSK_DISPLAY_SIZE_WIDTH = 1920;
constexpr uint32_t OSK_DISPLAY_SIZE_HEIGHT = 1080;
constexpr uint32_t OSK_OVER_2K_DISPLAY_SIZE_WIDTH = 3840;
constexpr uint32_t OSK_OVER_2K_DISPLAY_SIZE_HEIGHT = 2160;
constexpr uint32_t MAX_PREEDIT_LENGTH = 30;
constexpr uint32_t MAX_EXPANDED_PREEDIT_LENGTH = 120;
constexpr uint32_t MAX_TEXT_LENGTH = 2048;
constexpr uint32_t MAX_TEXT_AREA = 4;
constexpr uint32_t MAX_CANDIDATE_WORD_LENGTH = 55;
constexpr uint32_t MAX_CANDIDATE_LIST_SIZE = 100;
constexpr uint32_t WORK_BUFFER_SIZE = 20 * 1024;
constexpr uint32_t KEYBOARD_MAX_NUMBER = 5;

namespace Option {
constexpr uint32_t DEFAULT = 0x00;
constexpr uint32_t REPEAT = 0x01;
constexpr uint32_t REPEAT_EACH_KEY = 0x02;
constexpr uint32_t ADD_OSK = 0x04;
constexpr uint32_t EFFECTIVE_WITH_IME = 0x08;
constexpr uint32_t DISABLE_RESUME = 0x10;
constexpr uint32_t CAPSLOCK_WITHOUT_SHIFT = 0x20;
} // namespace Option
} // namespace Ime
33 changes: 29 additions & 4 deletions modules/libSceIme/entry.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,20 @@
#include "logging.h"
#include "types.h"

#include <SDL2/SDL.h>
#include <vector>

LOG_DEFINE_MODULE(libSceIme);

namespace {} // namespace
namespace {
struct ImeHandler {
int32_t userId;
SceImeEventHandler func;
char kbdstate[256];
};

std::vector<ImeHandler> g_handlers = {};
} // namespace

extern "C" {

Expand All @@ -14,8 +25,16 @@ EXPORT SYSV_ABI int sceImeOpen(const SceImeParam* param, const SceImeParamExtend
return Ok;
}

EXPORT SYSV_ABI int sceImeUpdate(SceImeEventHandler handler) {
return Ok;
EXPORT SYSV_ABI int sceImeUpdate(SceImeEventHandler func) {
for (auto& handler: g_handlers) {
if (handler.func == func) {
int32_t length;
auto currstate = SDL_GetKeyboardState(&length);
return Ok;
}
}

return Err::Ime::NOT_OPENED;
}

EXPORT SYSV_ABI int sceImeSetText(const wchar_t* text, uint32_t length) {
Expand Down Expand Up @@ -57,6 +76,12 @@ EXPORT SYSV_ABI int sceImeDisableController(void) {
EXPORT SYSV_ABI void sceImeParamInit(SceImeParam* param) {}

EXPORT SYSV_ABI int sceImeKeyboardOpen(SceUserServiceUserId userId, const SceImeKeyboardParam* param) {
if (param == nullptr) return Err::Ime::INVALID_ARG;
if (param->handler == nullptr) return Err::Ime::INVALID_HANDLER;
for (auto& handler: g_handlers) {
if (handler.userId == userId) return Err::Ime::BUSY;
}
g_handlers.push_back({userId, param->handler});
return Ok;
}

Expand All @@ -82,4 +107,4 @@ EXPORT SYSV_ABI int sceImeKeyboardGetInfo(uint32_t resourceId, SceImeKeyboardInf
EXPORT SYSV_ABI int sceImeKeyboardSetMode(SceUserServiceUserId userId, uint32_t mode) {
return Ok;
}
}
}
6 changes: 3 additions & 3 deletions modules/libSceIme/types.h
Original file line number Diff line number Diff line change
Expand Up @@ -306,7 +306,7 @@ struct SceImeEditText {
wchar_t* str;
uint32_t caretIndex;
uint32_t areaNum;
SceImeTextAreaProperty textArea[SCE_IME_MAX_TEXT_AREA];
SceImeTextAreaProperty textArea[Ime::MAX_TEXT_AREA];
};

struct SceImePositionAndForm {
Expand Down Expand Up @@ -359,7 +359,7 @@ struct SceImeKeyboardInfo {

struct SceImeKeyboardResourceIdArray {
SceUserServiceUserId userId;
uint32_t resourceId[SCE_IME_KEYBOARD_MAX_NUMBER];
uint32_t resourceId[Ime::KEYBOARD_MAX_NUMBER];
};

struct SceImeKeycode {
Expand Down Expand Up @@ -444,5 +444,5 @@ struct SceImeKeyboardParam {

struct SceImeKeyboardResourceId {
SceUserServiceUserId userId;
uint32_t resourceId[SCE_IME_KEYBOARD_MAX_NUMBER];
uint32_t resourceId[Ime::KEYBOARD_MAX_NUMBER];
};

0 comments on commit e6ed43b

Please sign in to comment.