1 /*---------------------------------------------------------------------------* 2 Project: Horizon 3 File: swkbd_Api.h 4 5 Copyright (C)2009-2012 Nintendo Co., Ltd. All rights reserved. 6 7 These coded instructions, statements, and computer programs contain 8 proprietary information of Nintendo of America Inc. and/or Nintendo 9 Company Ltd., and are protected by Federal copyright law. They may 10 not be disclosed to third parties or copied or duplicated in any form, 11 in whole or in part, without the prior written consent of Nintendo. 12 13 $Rev: 46347 $ 14 *---------------------------------------------------------------------------*/ 15 16 #ifndef NN_SWKBD_CTR_SWKBD_API_H_ 17 #define NN_SWKBD_CTR_SWKBD_API_H_ 18 19 #include <nn/types.h> 20 #include <nn/applet.h> 21 22 #ifdef __cplusplus 23 24 namespace nn 25 { 26 namespace swkbd 27 { 28 namespace CTR 29 { 30 31 /* Please see man pages for details 32 33 */ 34 const u16 VERSION_NUMBER = 5; 35 36 /* Please see man pages for details 37 38 */ 39 enum KeyboardType 40 { 41 KEYBOARD_TYPE_FULL = 0, // 42 KEYBOARD_TYPE_QWERTY, // 43 KEYBOARD_TYPE_TENKEY, // 44 KEYBOARD_TYPE_NO_JAPANESE, // 45 KEYBOARD_TYPE_MAX, // 46 47 KEYBOARD_TYPE_MAX_BIT = (1u << 31) // 48 }; 49 50 /* Please see man pages for details 51 52 */ 53 enum BottomButtonType 54 { 55 BOTTOM_BUTTON_TYPE_1BUTTON = 0, // 56 BOTTOM_BUTTON_TYPE_2BUTTON, // 57 BOTTOM_BUTTON_TYPE_3BUTTON, // 58 BOTTOM_BUTTON_TYPE_MAX, // 59 60 BOTTOM_BUTTON_TYPE_MAX_BIT = (1u << 31) // 61 }; 62 63 /* Please see man pages for details 64 65 */ 66 enum BottomButton 67 { 68 BOTTOM_BUTTON_0 = 0, // 69 BOTTOM_BUTTON_1, // 70 BOTTOM_BUTTON_2, // 71 BOTTOM_BUTTON_MAX, // 72 73 BOTTOM_BUTTON_1BUTTON = BOTTOM_BUTTON_2, // 74 BOTTOM_BUTTON_2BUTTON_LEFT = BOTTOM_BUTTON_0, // 75 BOTTOM_BUTTON_2BUTTON_RIGHT = BOTTOM_BUTTON_2, // 76 BOTTOM_BUTTON_3BUTTON_LEFT = BOTTOM_BUTTON_0, // 77 BOTTOM_BUTTON_3BUTTON_MIDDLE = BOTTOM_BUTTON_1, // 78 BOTTOM_BUTTON_3BUTTON_RIGHT = BOTTOM_BUTTON_2, // 79 80 BOTTOM_BUTTON_MAX_BIT = (1u << 31) // 81 }; 82 83 /* Please see man pages for details 84 85 */ 86 enum TenkeyExtKey 87 { 88 TENKEY_EXT_KEY_LEFT = 0, // 89 TENKEY_EXT_KEY_RIGHT, // 90 TENKEY_EXT_KEY_MAX, // 91 92 TENKEY_EXT_KEY_MAX_BIT = (1u << 31) // 93 }; 94 95 /* Please see man pages for details 96 97 */ 98 enum FinishableCondition 99 { 100 FINISHABLE_CONDITION_NONE = 0, // 101 FINISHABLE_CONDITION_ANY, // 102 FINISHABLE_CONDITION_NON_SPACE, // 103 FINISHABLE_CONDITION_EXCEPT_SPACE_ONLY, // 104 FINISHABLE_CONDITION_FULL, // 105 106 FINISHABLE_CONDITION_MAX, // 107 108 FINISHABLE_CONDITION_MAX_BIT = (1u << 31) // 109 }; 110 111 /* Please see man pages for details 112 113 */ 114 enum MaskMode 115 { 116 MASK_MODE_DISABLE = 0, // 117 MASK_MODE_IMMEDIATE, // 118 MASK_MODE_WAIT_1SEC, // 119 120 MASK_MODE_MAX, // 121 122 MASK_MODE_MAX_BIT = (1u << 31) // 123 }; 124 125 /* Please see man pages for details 126 127 */ 128 enum ParentalControlsMode 129 { 130 PARENTAL_CONTROLS_MODE_DISABLE = 0, // 131 PARENTAL_CONTROLS_MODE_ENABLE, // 132 PARENTAL_CONTROLS_MODE_SYSTEM_SETTINGS, // 133 PARENTAL_CONTROLS_MODE_MAX, // 134 135 PARENTAL_CONTROLS_MODE_MAX_BIT = (1u << 31) // 136 }; 137 138 /* Please see man pages for details 139 140 */ 141 enum DisplayLanguage 142 { 143 DISPLAY_LANGUAGE_DEFAULT = 0, // 144 DISPLAY_LANGUAGE_JAPANESE, // 145 DISPLAY_LANGUAGE_ENGLISH, // 146 DISPLAY_LANGUAGE_FRENCH, // 147 DISPLAY_LANGUAGE_GERMAN, // 148 DISPLAY_LANGUAGE_ITALIAN, // 149 DISPLAY_LANGUAGE_SPANISH, // 150 DISPLAY_LANGUAGE_SIMP_CHINESE, // 151 DISPLAY_LANGUAGE_KOREAN, // 152 DISPLAY_LANGUAGE_DUTCH, // 153 DISPLAY_LANGUAGE_PORTUGUESE, // 154 DISPLAY_LANGUAGE_RUSSIAN, // 155 156 DISPLAY_LANGUAGE_MAX, // 157 158 DISPLAY_LANGUAGE_MAX_BIT = (1u << 7) // 159 }; 160 161 /* Please see man pages for details 162 163 */ 164 enum UpperScreenFlag 165 { 166 UPPER_SCREEN_NORMAL = 0x0, // 167 UPPER_SCREEN_DARK = 0x1, // 168 169 UPPER_SCREEN_MAX_BIT = (1u << 31) // 170 }; 171 172 /* Please see man pages for details 173 174 */ 175 enum TextCheckFlag 176 { 177 TEXT_CHECK_DISABLE = 0x0, // 178 TEXT_CHECK_NUMBER = 0x1, // 179 TEXT_CHECK_AT_MARK = 0x2, // 180 TEXT_CHECK_PERCENT_SIGN = 0x4, // 181 TEXT_CHECK_BACKSLASH = 0x8, // 182 TEXT_CHECK_BANNED_WORDS = 0x10, // 183 TEXT_CHECK_APP = 0x20, // 184 185 TEXT_CHECK_MAX_BIT = (1u << 31) // 186 }; 187 188 /* Please see man pages for details 189 190 */ 191 enum ExtOutputDataFlag 192 { 193 EXT_OUTPUT_DATA_NONE = 0x0, // 194 EXT_OUTPUT_DATA_STATUS = 0x1, // 195 EXT_OUTPUT_DATA_LEARNING = 0x2, // 196 197 EXT_OUTPUT_DATA_MAX_BIT = (1u << 31) // 198 }; 199 200 /* Please see man pages for details 201 202 */ 203 enum AppTextCheckResult 204 { 205 APP_TEXT_CHECK_RESULT_OK = 0, // 206 APP_TEXT_CHECK_RESULT_NG_FINISH, // 207 APP_TEXT_CHECK_RESULT_NG_CONTINUE, // 208 209 APP_TEXT_CHECK_RESULT_MAX, // 210 211 APP_TEXT_CHECK_RESULT_MAX_BIT = (1u << 31) // 212 }; 213 214 /* Please see man pages for details 215 216 217 218 */ 219 enum ReturnCode 220 { 221 RETURN_CODE_UNKNOWN = -1, // 222 RETURN_CODE_INVALID_CONFIG = -2, // 223 RETURN_CODE_OUT_OF_MEMORY = -3, // 224 //RETURN_CODE_INVALID_VERSION = -4, // 225 RETURN_CODE_BOTTOM_BUTTON_1BUTTON = 0, // 226 RETURN_CODE_BOTTOM_BUTTON_2BUTTON_LEFT = 1, // 227 RETURN_CODE_BOTTOM_BUTTON_2BUTTON_RIGHT = 2, // 228 RETURN_CODE_BOTTOM_BUTTON_3BUTTON_LEFT = 3, // 229 RETURN_CODE_BOTTOM_BUTTON_3BUTTON_MIDDLE = 4, // 230 RETURN_CODE_BOTTOM_BUTTON_3BUTTON_RIGHT = 5, // 231 RETURN_CODE_HOME_BUTTON = 10, // 232 RETURN_CODE_SOFTWARE_RESET = 11, // 233 RETURN_CODE_POWER_BUTTON = 12, // 234 RETURN_CODE_PARENTAL_CONTROLS_SUCCESS = 20, // 235 RETURN_CODE_PARENTAL_CONTROLS_FAILURE = 21, // 236 RETURN_CODE_APP_TEXT_CHECK_NG = 30, // 237 238 RETURN_CODE_MAX_BIT = (s32)(1u << 31) // 239 }; 240 241 /* Please see man pages for details 242 243 */ 244 const size_t STATUS_DATA_SIZE = 68; 245 246 /* Please see man pages for details 247 248 */ 249 const size_t LEARNING_DATA_SIZE = 42092; 250 251 /* Please see man pages for details 252 253 */ 254 const u16 TEXT_LENGTH_MAX_MIN = 1; 255 256 /* Please see man pages for details 257 258 */ 259 const u16 TEXT_LENGTH_MAX_MAX = 65000; 260 261 /* Please see man pages for details 262 263 */ 264 const u16 FIXED_WIDTH_TEXT_LENGTH_MAX_MAX = 32; 265 266 /* Please see man pages for details 267 268 */ 269 const u16 TEXT_CHECK_TEXT_LENGTH_MAX_MAX = 2000; 270 271 /* Please see man pages for details 272 273 */ 274 const u16 BANNED_WORD_CHECK_TEXT_LENGTH_MAX_MAX = 64; 275 276 /* Please see man pages for details 277 278 */ 279 const u16 BOTTOM_BUTTON_TEXT_LENGTH_MAX = 16; 280 281 /* Please see man pages for details 282 283 */ 284 const u16 GUIDE_TEXT_LENGTH_MAX = 64; 285 286 /* Please see man pages for details 287 288 */ 289 const u16 APP_TEXT_CHECK_DIALOG_TEXT_LENGTH_MAX = 256; 290 291 /* Please see man pages for details 292 293 */ 294 const u16 NUM_USER_WORDS_MAX = 500; 295 296 /* Please see man pages for details 297 298 */ 299 const u16 USER_WORD_LENGTH_MAX = 40; 300 301 /* Please see man pages for details 302 303 */ 304 const u16 USER_READING_LENGTH_MAX = 40; 305 306 /* Please see man pages for details 307 308 */ 309 struct UserWord 310 { 311 wchar_t reading[USER_READING_LENGTH_MAX + 1]; // 312 wchar_t word[USER_WORD_LENGTH_MAX + 1]; // 313 u8 language; // 314 bool allLanguage; // 315 }; 316 317 /* Please see man pages for details 318 319 320 321 322 323 324 */ 325 typedef AppTextCheckResult (*AppTextCheckCallback)( 326 const wchar_t** ppDialogText, 327 const wchar_t* pInputText, 328 u16 inputTextLength 329 ); 330 331 /* Please see man pages for details 332 333 */ 334 struct Config 335 { 336 //---------------------------------------- 337 // 338 // 339 340 KeyboardType keyboardType; // 341 BottomButtonType bottomButtonType; // 342 FinishableCondition finishableCondition; // 343 MaskMode maskMode; // 344 ParentalControlsMode parentalControlsMode; // 345 bit32 upperScreenFlag; // 346 bit32 textCheckFlag; // 347 bit32 extOutputDataFlag; // 348 u16 textLengthMax; // 349 u16 numUserWords; // 350 u16 numNumbersMax; // 351 wchar_t bottomButtonText[BOTTOM_BUTTON_MAX][BOTTOM_BUTTON_TEXT_LENGTH_MAX + 1]; // 352 wchar_t tenkeyExtKeyChar[TENKEY_EXT_KEY_MAX]; // 353 wchar_t guideText[GUIDE_TEXT_LENGTH_MAX + 1]; // 354 bool prediction; // 355 bool lineFeed; // 356 bool fixedWidthMode; // 357 bool homeButton; // 358 bool softwareReset; // 359 bool powerButton; // 360 bool communicateWithOtherRegions; // 361 bool bootWithQwerty; // 362 bool bottomButtonToFinish[BOTTOM_BUTTON_MAX];// 363 DisplayLanguage displayLanguage; // 364 365 u8 padding0[2]; 366 367 // 368 369 //---------------------------------------- 370 // 371 // 372 373 sptr initialInputText; // 374 sptr userWordArray; // 375 sptr initialStatusData; // 376 sptr initialLearningData; // 377 size_t sharedMemorySize; // 378 u16 versionNumber; // 379 u8 padding1[2]; 380 381 // 382 383 //---------------------------------------- 384 // 385 // 386 387 ReturnCode returnCode; // 388 sptr statusData; // 389 sptr learningData; // 390 sptr inputText; // 391 u16 inputTextLength; // 392 u8 padding2[2]; 393 394 // 395 396 //---------------------------------------- 397 // 398 // 399 400 AppTextCheckResult appTextCheckResult; // 401 wchar_t appTextCheckDialogText[APP_TEXT_CHECK_DIALOG_TEXT_LENGTH_MAX + 1]; // 402 403 u8 padding3[2]; 404 405 // 406 407 //---------------------------------------- 408 // 409 // 410 411 bool skipAtMarkCheck; // 412 u8 reserved[171]; // 413 414 // 415 }; 416 417 /* Please see man pages for details 418 419 */ 420 struct Parameter 421 { 422 Config config; // 423 }; 424 425 /* Please see man pages for details 426 427 428 429 430 */ 431 void InitializeConfig(Config* pConfig); 432 433 /* Please see man pages for details 434 435 436 437 438 439 440 441 442 */ 443 s32 GetSharedMemorySize( 444 const Config* pConfig, 445 const void* pInitialStatusData = NULL, 446 const void* pInitialLearningData = NULL 447 ); 448 449 /* Please see man pages for details 450 451 */ 452 void PreloadKeyboardApplet(); 453 454 /* Please see man pages for details 455 456 */ 457 void CancelPreloadKeyboardApplet(); 458 459 /* Please see man pages for details 460 461 */ 462 void WaitForPreloadKeyboardApplet(); 463 464 /* Please see man pages for details 465 466 467 468 469 */ 470 bool IsRegisteredKeyboardApplet(); 471 472 /* Please see man pages for details 473 474 475 476 477 478 479 480 481 482 483 484 485 */ 486 bool StartKeyboardApplet( 487 nn::applet::AppletWakeupState* pWakeupState, 488 Parameter* pParameter, 489 void* pSharedMemoryAddr, 490 size_t sharedMemorySize, 491 const wchar_t* pInitialInputText = NULL, 492 const UserWord* pUserWordArray = NULL, 493 const void* pInitialStatusData = NULL, 494 const void* pInitialLearningData = NULL, 495 AppTextCheckCallback callback = NULL 496 ); 497 498 }}} 499 500 #endif // __cplusplus 501 502 #endif // ifndef NN_SWKBD_CTR_SWKBD_API_H_ 503