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