diff --git a/CMakeLists.txt b/CMakeLists.txt index 77d547e..2c22d4f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -188,6 +188,7 @@ add_library(NintendoSDK OBJECT include/nn/ui2d/Parts.h include/nn/ui2d/Types.h include/nn/ui2d/Util.h + include/nn/swkbd/swkbd.h include/nn/g3d/BindFuncTable.h include/nn/g3d/ModelObj.h include/nn/g3d/ResMaterialAnim.h @@ -311,7 +312,7 @@ function(nn_ver ID) list(POP_FRONT VER MAJOR MINOR PATCH) foreach(VAR IN ITEMS MAJOR MINOR PATCH) - target_compile_definitions(NintendoSDK PRIVATE ${ID}_${VAR}=${${VAR}}) + target_compile_definitions(NintendoSDK PUBLIC ${ID}_${VAR}=${${VAR}}) endforeach() endfunction() diff --git a/include/nn/applet.h b/include/nn/applet.h index 12d892d..f23456c 100644 --- a/include/nn/applet.h +++ b/include/nn/applet.h @@ -1,5 +1,49 @@ #pragma once +#include + namespace nn::applet { enum class ExitReason { Normal = 0, Canceled = 1, Abnormal = 2, Unexpected = 10 }; -} + +enum class AppletId { + None = 0x00, + application = 0x01, + OverlayApplet = 0x02, + SystemAppletMenu = 0x03, + SystemApplication = 0x04, + LibraryAppletAuth = 0x0A, + LibraryAppletCabinet = 0x0B, + LibraryAppletController = 0x0C, + LibraryAppletDataErase = 0x0D, + LibraryAppletError = 0x0E, + LibraryAppletNetConnect = 0x0F, + LibraryAppletPlayerSelect = 0x10, + LibraryAppletSwkbd = 0x11, + LibraryAppletMiiEdit = 0x12, + LibraryAppletWeb = 0x13, + LibraryAppletShop = 0x14, + LibraryAppletPhotoViewer = 0x15, + LibraryAppletSet = 0x16, + LibraryAppletOfflineWeb = 0x17, + LibraryAppletLoginShare = 0x18, + LibraryAppletWifiWebAuth = 0x19, + LibraryAppletMyPage = 0x1A, +}; + +enum class AppletMode { + AllForeground = 0, + Background = 1, + NoUi = 2, + BackgroundIndirect = 3, + AllForegroundInitiallyHidden = 4, +}; + +struct LibraryAppletHandle { + char _filler0[0x18]; + AppletId id; + AppletMode mode; + char _filler20[0x78]; +}; +static_assert(sizeof(LibraryAppletHandle) == 0x98); + +} // namespace nn::applet diff --git a/include/nn/swkbd/swkbd.h b/include/nn/swkbd/swkbd.h index ffb322b..6f3bcc6 100644 --- a/include/nn/swkbd/swkbd.h +++ b/include/nn/swkbd/swkbd.h @@ -92,6 +92,8 @@ enum class DictionaryLang { enum class CloseResult { Enter, Cancel }; +enum class Trigger : u8 { Default }; + struct DictionaryInfo { u32 offset; u16 size; @@ -109,20 +111,34 @@ struct KeyboardConfig { char headerText[0x82]; char subText[0x102]; char guideText[0x202]; - int textMaxLength; - int textMinLength; + s32 textMaxLength; + s32 textMinLength; PasswordMode passwordMode; InputFormMode inputFormMode; bool isUseNewLine; bool isUseUtf8; bool isUseBlurBackground; - int _initialStringOffset; - int _initialStringLength; - int _userDictionaryOffset; - int _userDictionaryNum; - bool _isUseTextCheck; - void* _textCheckCallback; - int separateTextPos[0x8]; + s32 initialStringOffset; + s32 initialStringLength; + s32 userDictionaryOffset; + s32 userDictionaryNum; + bool isUseTextCheck; + void* textCheckCallback; + +#if NN_SDK_VER >= NN_MAKE_VER(3, 0, 0) + s32 separateTextPos[0x8]; +#endif + +#if NN_SDK_VER >= NN_MAKE_VER(6, 0, 0) + u64 customDictionaryEntries[0x18]; + u8 customDictionaryNum; +#endif + +#if NN_SDK_VER >= NN_MAKE_VER(8, 0, 0) + u8 _3c1; + u8 filler[0xd]; + Trigger trigger; +#endif }; struct ShowKeyboardArg { @@ -137,11 +153,11 @@ struct ShowKeyboardArg { class String { public: - String(int size) { + String(s32 size) { bufsize = size; strBuf = nullptr; } - String(int size, char* buf) { + String(s32 size, char* buf) { bufsize = size; strBuf = buf; } @@ -154,17 +170,59 @@ class String { private: char* strBuf; - int bufsize; + s32 bufsize; }; -struct UserWord; // TODO contents missing +struct UserWord; // TODO contents missing +struct KbdConfig; // TODO contents missing + +struct CustomizedDictionarySet { + void* buffer; // 0x1000-byte aligned buffer. + s32 bufferSize; // 0x1000-byte aligned buffer size. + u64 entries[0x18]; + u16 totalEntries; +}; -ulong GetRequiredWorkBufferSize(bool); -ulong GetRequiredStringBufferSize(); -nn::applet::ExitReason GetExitReason(); +#if NN_SDK_VER >= NN_MAKE_VER(8, 0, 0) +using TextCheckCb = TextCheckResult (*)(void*, u32*, String*); +#else +using TextCheckCb = TextCheckResult (*)(void*, u64*, String*); +#endif + +s32 ConvertUtf8ToUtf16(void*, s32, const char*, s32); +s32 ConvertUtf8ToUtf16(void*, s32, const char*); +s32 GetLengthOfConvertedStringUtf8ToUtf16(const char*); +void MakePresetDefault(KeyboardConfig*); +void MakePresetPassword(KeyboardConfig*); +void MakePresetUsername(KeyboardConfig*); +void MakePresetDownloadCode(KeyboardConfig*); +Result GetInteractiveOutStorageCallback(nn::applet::LibraryAppletHandle, String*, + const ShowKeyboardArg&); +size_t GetRequiredTextCheckWorkBufferSize(); +void ReadCloseResultAndString(nn::applet::LibraryAppletHandle, CloseResult*, String*); +void CopyInitialStringInfo(ShowKeyboardArg*, s32); +void CopyUserDictionaryInfo(ShowKeyboardArg*, s32); + +#if NN_SDK_VER >= NN_MAKE_VER(6, 0, 0) +void keyboardConfig2kbdConfig(const KeyboardConfig&, KbdConfig*); +#endif + +Result ShowKeyboard(String*, const ShowKeyboardArg&); + +#if NN_SDK_VER >= NN_MAKE_VER(8, 0, 0) +Result ShowKeyboard(String*, const ShowKeyboardArg&, Trigger); +#endif + +void InitializeKeyboardConfig(KeyboardConfig*); void MakePreset(KeyboardConfig*, Preset); -void SetHeaderText(KeyboardConfig*, const char16_t*); -void SetSubText(KeyboardConfig*, const char16_t*); + +size_t GetRequiredWorkBufferSize(bool); + +#if NN_SDK_VER >= NN_MAKE_VER(1, 0, 0) +size_t GetRequiredWorkBufferSize(s32); +#endif + +size_t GetRequiredStringBufferSize(); void SetOkText(KeyboardConfig*, const char16_t*); void SetOkTextUtf8(KeyboardConfig*, const char*); void SetLeftOptionalSymbolKey(KeyboardConfig*, char16_t); @@ -179,8 +237,17 @@ void SetGuideText(KeyboardConfig*, const char16_t*); void SetGuideTextUtf8(KeyboardConfig*, const char*); void SetInitialText(ShowKeyboardArg*, const char16_t*); void SetInitialTextUtf8(ShowKeyboardArg*, const char*); -void SetUserWordList(ShowKeyboardArg*, const UserWord*, int); -int ShowKeyboard(String*, const ShowKeyboardArg&); +void SetUserWordList(ShowKeyboardArg*, const UserWord*, s32); + +#if NN_SDK_VER >= NN_MAKE_VER(6, 0, 0) +void SetCustomizedDictionaries(ShowKeyboardArg*, const CustomizedDictionarySet&); +#endif + +void SetTextCheckCallback(ShowKeyboardArg*, TextCheckCb); + +#if NN_SDK_VER < NN_MAKE_VER(4, 0, 0) +nn::applet::ExitReason getExitReason(); +#endif extern nn::applet::ExitReason g_ExitReason; } // namespace nn::swkbd