Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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()

Expand Down
46 changes: 45 additions & 1 deletion include/nn/applet.h
Original file line number Diff line number Diff line change
@@ -1,5 +1,49 @@
#pragma once

#include <nn/types.h>

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
107 changes: 87 additions & 20 deletions include/nn/swkbd/swkbd.h
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,8 @@ enum class DictionaryLang {

enum class CloseResult { Enter, Cancel };

enum class Trigger : u8 { Default };

struct DictionaryInfo {
u32 offset;
u16 size;
Expand All @@ -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 {
Expand All @@ -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;
}
Expand All @@ -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);
Expand All @@ -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
Loading