1 /*---------------------------------------------------------------------------*
2   Project:  Horizon
3   File:     applet_Parameters.h
4 
5   Copyright (C)2009 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: 32520 $
14  *---------------------------------------------------------------------------*/
15 
16 #ifndef NN_APPLET_CTR_APPLET_PARAMETERS_H_
17 #define NN_APPLET_CTR_APPLET_PARAMETERS_H_
18 
19 #include <nn/fnd.h>
20 #include <nn/gx/CTR/gx_Lcd.h>
21 
22 namespace nn{
23 namespace applet{
24 namespace CTR{
25 
26     enum Attribute
27     {
28         //---- アプレット種類
29         TYPE_APP                        = (0x0<<0), //000 アプリケーション
30         TYPE_APPLIB                     = (0x1<<0), //001 ライブラリアプレット
31         TYPE_SYS                        = (0x2<<0), //010 システムアプレット
32         TYPE_SYSLIB                     = (0x3<<0), //011 システムライブラリアプレット
33         TYPE_RESIDENT                   = (0x4<<0), //100 常駐アプレット
34         TYPE_MASK                       = (0x7<<0), //111 (アプレット種類用のマスク)
35 
36         //---- GPU権利設定
37         MANUAL_GPU_RIGHT                = (1<<3),   // 手動でAssign/Releaseを行う
38 
39         //---- DSP権利設定
40         MANUAL_DSP_RIGHT                = (1<<4)    // 手動でAssign/Releaseを行う
41     };
42     const bit32 DEFAULT_APPLET_ATTRIBUTE = (TYPE_APP);
43 
44     enum DisplayBufferMode
45     {
46         FORMAT_R8G8B8A8                 = 0,
47         FORMAT_R8G8B8                   = 1,
48         FORMAT_R5G6B5                   = 2,
49         FORMAT_R5G5B5A1                 = 3,
50         FORAMT_R4G4B4A4                 = 4,
51         FORMAT_UNIMPORTABLE             = 0xFFFFFFFF
52     };
53 
54     /*!
55       @brief ホームボタンの状態を表す列挙形です。
56 
57              GetHomeButtonState() で取得することが出来ます。
58 
59              ClearHomeButtonState() を呼び出すと状態は HOME_BUTTON_NONE になります。
60     */
61     enum HomeButtonState
62     {
63         HOME_BUTTON_NONE                = 0, //!< ホームボタンが押されたことを検出していない
64         HOME_BUTTON_SINGLE_PRESSED      = 1, //!< ホームボタンがシングルクリックされたことを検出した
65         HOME_BUTTON_DOUBLE_PRESSED      = 2  //!< ホームボタンがダブルクリックされたことを検出した
66     };
67 
68     enum ShutdownState
69     {
70         SHUTDOWN_STATE_NONE             = 0, // シャットダウン通知を受け取っていない
71         SHUTDOWN_STATE_RECEIVED         = 1  // シャットダウン通知を受け取っている
72     };
73 
74     enum PowerButtonState
75     {
76         POWER_BUTTON_STATE_NONE         = 0, // 押されていない
77         POWER_BUTTON_STATE_CLICK        = 1  // クリック
78     };
79 
80     enum OrderToCloseState
81     {
82         ORDER_TO_CLOSE_STATE_NONE       = 0, // 終了要求なし
83         ORDER_TO_CLOSE_STATE_RECEIVED   = 1  // 終了要求あり
84     };
85 
86     /*!
87       @brief スリープ通知の状態を表す列挙形です。
88 
89              ClearSleepNotificationState() を呼び出すと、NOTIFY_NONE になります。
90     */
91     enum SleepNotificationState
92     {
93         NOTIFY_NONE                     = 0, //!< スリープ関連の通知が行われていない状態
94         NOTIFY_SLEEP_QUERY              = 1, //!< スリープ問い合わせコールバックが呼び出され、"保留"(nn::applet::CTR::REPLY_LATER) を返した
95         NOTIFY_SLEEP_ACCEPT             = 2, //!< スリープ問い合わせコールバックが呼び出され、"承諾"(nn::applet::CTR::REPLY_ACCEPT) を返した
96         NOTIFY_SLEEP_REJECT             = 3, //!< スリープ問い合わせコールバックが呼び出され、"拒否"(nn::applet::CTR::REPLY_REJECT) を返した
97         NOTIFY_SLEEP_ACCEPTED           = 4, //!< スリープ確定のコールバックが呼び出された
98         NOTIFY_AWAKE                    = 5  //!< スリープ復帰のコールバックが呼び出された
99     };
100 
101     enum AppJumpType
102     {
103         JUMP_OTHER                      = 0, // 他のアプリにジャンプする
104         JUMP_CALLER                     = 1, // 呼び出し元にジャンプする
105         JUMP_SELF                       = 2  // 自分にジャンプする
106     };
107 
108     enum AppletPos
109     {
110         POS_APP                         = 0, // アプリ
111         POS_APPLIB                      = 1, // アプリが立ち上げるライブラリアプレット
112         POS_SYS                         = 2, // システム
113         POS_SYSLIB                      = 3, // システムが立ち上げるライブラリアプレット
114         POS_RESIDENT                    = 4, // 常駐アプレット
115         POS_MAX,
116 
117         POS_NONE                        = -1 // どこでもない状態
118     };
119 
120     /*!
121       @brief 起動要求の種類を表す列挙形です。
122 
123              WaitForStarting() の返り値として用いられます。
124     */
125     enum WakeupState
126     {
127         //スリープされた
128         WAKEUP_SKIP                     = 0,  //!< スキップしたことを表します。何も動作を行う必要はありません。
129 
130         //通常の要求で起こされた     → 起こされた方は動作再開
131         WAKEUP_TO_START                 = 1,  //!< ホームメニューなどからの通常起動を表します。動作再開してください。
132         //終了して起こされた         → 起こされた方は動作再開
133         WAKEUP_BY_EXIT                  = 2,  //!< 何らかの終了によってアプリケーションが起床したことを表します。動作再開してください。
134         // 中断して起こされた         → 起こされた方は動作再開
135         WAKEUP_BY_PAUSE                 = 3,  //!< 何らかの中断によってアプリケーションが起床したことを表します。動作再開してください。
136         //取り消しの通知で起こされた → 起こされた方は終了
137         WAKEUP_BY_CANCEL                = 4,  //!< 取り消しの通知で起こされたことを表します。速やかに終了してください。
138         //取り消しの通知で起こされた → 起こされた方は終了 → 必要なら他のものも終了させる
139         WAKEUP_BY_CANCELALL             = 5,  //!< アプリケーションでこの値をケアする必要はありません。
140         // 電源ボタンクリックで起こされた → 起こされる可能性があるのはシステムメニューだけで、スリープ推奨画面に移行する
141         WAKEUP_BY_POWER_BUTTON_CLICK    = 6,  //!< 電源ボタンクリックを検出して起床したことを表します。速やかに終了してください。
142         //HOMEメニューに移るために起こされた→ 起こされた方は JumpToHomeMenu()
143         WAKEUP_TO_JUMP_HOME             = 7,  //!< アプリケーションでこの値をケアする必要はありません。
144         //アプリケーションに移るために起こされた→ 起こされた方は LeaveHomeMenu()
145         WAKEUP_TO_JUMP_APPLICATION      = 8,  //!< アプリケーションでこの値をケアする必要はありません。
146         //アプリケーションを起動するために起こされた→ 起こされた方は StartApplication()
147         WAKEUP_TO_LAUNCH_APPLICATION    = 9, //!< アプリケーションでこの値をケアする必要はありません。
148 
149         // 時間切れ
150         WAKEUP_BY_TIMEOUT               = -1  //!< 時間切れであったことを表します。
151     };
152 
153     /*!
154       @brief スリープ問い合わせに対する返答を表す列挙型です。
155 
156              スリープ問い合わせのコールバックの返り値に用いたり、
157              ReplySleepQuery() の引数に用います。
158 
159              スリープ問い合わせのコールバックの返り値には
160              REPLY_REJECT, REPLY_ACCEPT, REPLY_LATER のいずれかを指定してください。
161 
162              ReplySleepQuery() の引数には
163              REPLY_REJECT, REPLY_ACCEPT のいずれかを指定してください。
164     */
165 
166     enum QueryReply
167     {
168         REPLY_REJECT                    = 0, //!< スリープを拒否します。
169         REPLY_ACCEPT                    = 1, //!< スリープを承諾します。
170         REPLY_LATER                     = 2  //!< 返答を保留します。(これを返した後は、速やかにReplySleepQuery()で返答してください)
171     };
172 
173 
174     enum UsableAppletId
175     {
176         APPLET_ID_NONE                  = 0,    // 未使用
177         //
178         // application
179         APPLICATION_APPLET_ID           = 0x300, // application
180 
181         // library applet
182         APPLIB_APPLET_ID                = 0x400, // ライブラリアプレット
183 
184         // resident applet
185         ERRDISP_APPLET_ID               = 0x501, // ERROR DISPLAY
186 
187         APPLET_ID_MAX
188     };
189 
190 
191     enum SleepCheckOnEnableSleep
192     {
193         SLEEP_IF_SHELL_CLOSED           = true,
194         NO_SHELL_CHECK                  = false
195     };
196     enum ReplyRejectOnDisableSleep
197     {
198         REPLY_REJECT_IF_LATER           = true,
199         NO_REPLY_REJECT                 = false
200     };
201 
202     /*!
203       @brief APPLET ID です。
204     */
205     typedef bit32                                  AppletId;
206 
207     /*!
208       @brief APPLET の属性です。
209     */
210     typedef bit32                                   AppletAttr;
211 
212     typedef nn::applet::CTR::DisplayBufferMode      AppletDisplayBufferMode;
213 
214     typedef nn::applet::CTR::HomeButtonState        AppletHomeButtonState;
215 
216     typedef nn::applet::CTR::SleepNotificationState AppletSleepNotificationState;
217 
218     typedef nn::applet::CTR::ShutdownState          AppletShutdownState;
219 
220     typedef nn::applet::CTR::PowerButtonState       AppletPowerButtonState;
221 
222     typedef nn::applet::CTR::OrderToCloseState      AppletOrderToCloseState;
223 
224     typedef nn::applet::CTR::WakeupState            AppletWakeupState;
225 
226     typedef nn::applet::CTR::QueryReply             AppletQueryReply;
227 
228     typedef nn::applet::CTR::AppJumpType            AppletAppJumpType;
229 
230     // 無効なハンドル
231     extern const nn::Handle                         HANDLE_NONE;
232 
233     // 時間
234     /*!
235       @brief 時間を指定する APPLETライブラリの関数において、
236              結果が得られるまで継続して動作を行うことを意味する指定となります。
237     */
238     extern const nn::fnd::TimeSpan                  WAIT_INFINITE;
239     /*!
240       @brief 時間を指定する APPLETライブラリの関数において、
241              一度だけ動作を行い、結果が得られない場合でも繰り返して動作を行わないことを意味する指定となります。
242     */
243     extern const nn::fnd::TimeSpan                  NO_WAIT;
244 
245     // 無効アプレットID
246     const bit32 INVALID_ID                          = 0;
247 
248     // 無効プログラムID
249     const bit64 INVALID_PROGRAM_ID                  = 0xffffffffffffffffull;
250 
251     // ----コールバック群
252     /*!
253       @brief ホームボタン検出コールバックを表す関数型です。
254     */
255     typedef bool (*AppletHomeButtonCallback)( uptr arg, bool isActive, nn::applet::CTR::HomeButtonState state );
256     /*! :private
257       @brief メッセージ受け取りコールバックを表す関数型です。
258     */
259     typedef void (*AppletMessageCallback)( uptr arg, AppletId senderId, u8 pParam[], size_t paramSize, nn::Handle handle );
260 
261     // メモリリクエスト
262     typedef void (*AppletRequestMemoryCallback)( uptr arg, size_t size, nn::Handle* pHandle );
263     // メモリリクエストのファイナライズ
264     typedef void (*AppletReleaseMemoryCallback)( uptr arg );
265 
266     // DSP スリープ
267     typedef void (*AppletDspSleepCallback)( uptr arg );
268     // DSP ウェイクアップ
269     typedef void (*AppletDspWakeUpCallback)( uptr arg );
270 
271     /*!
272       @brief スリープ問い合わせコールバックを表す関数型です。
273     */
274     typedef AppletQueryReply (*AppletSleepQueryCallback)( uptr arg );
275     /*!
276       @brief スリープキャンセルコールバックを表す関数型です。
277     */
278     typedef void (*AppletSleepCanceledCallback)( uptr arg );
279     /*!
280       @brief スリープからの復帰コールバックを表す関数型です。
281     */
282     typedef void (*AppletAwakeCallback)( uptr arg );
283 
284     /*!
285       @brief シャットダウン通知のコールバックを表す関数型です。
286     */
287     typedef void (*AppletShutdownCallback)( uptr arg );
288     /*! :private
289       @brief アプリケーション終了コールバックを表す関数型です。
290     */
291     typedef void (*AppletCloseAppletCallback)( uptr arg ); // 実際にはすべてのアプレットに共通です
292 
293     /*!
294       @brief 電源ボタン検出コールバックを表す関数型です。
295     */
296     typedef void (*AppletPowerButtonCallback)( uptr arg );
297 
298     /*!
299       @brief 遷移時のコールバックを表す関数型です。
300     */
301     typedef void (*AppletTransitionCallback)( uptr arg );
302 
303     /*!
304       @breaf 電源ボタン検出や電源低下などでアプリケーションが終了すべき状態になったときに呼ばれるコールバックを表す関数です。
305     */
306     typedef void (*AppletCloseCallback)( uptr arg );
307 
308 }
309 }
310 }
311 
312 /*!
313     @addtogroup nn_applet
314     @{
315 */
316 #define NN_APPLET_PORT_NAME_USER        "APT:U"  // User Application
317 
318 /*!
319     @brief    アプレットマネージャに登録できる APPLET の最大数
320 */
321 #define NN_APPLET_MAX_APPLET_NUM        5
322 
323 #define NN_APPLET_PARAMETER_MAX         4096    //!<APPLET の呼び出し時や戻り時にやり取りできるパラメータ領域の最大サイズ(byte)です。
324 #define NN_APPLET_PARAM_BUF_SIZE        768
325 #define NN_APPLET_HMAC_BUF_SIZE         32
326 
327 // キャプチャイメージの格納用バッファサイズ(924KB)テクスチャデータとして利用できるようにパディングを含みます
328 #define NN_APPLET_CAPTURE_BUF_SIZE      (256 * (NN_GX_DISPLAY0_HEIGHT + NN_GX_DISPLAY1_HEIGHT + 512) * 3)
329 
330 // アトリビュート
331 #define NN_APPLET_TYPE_APP                      (nn::applet::CTR::TYPE_APP)
332 #define NN_APPLET_TYPE_APPLIB                   (nn::applet::CTR::TYPE_APPLIB)
333 #define NN_APPLET_TYPE_SYS                      (nn::applet::CTR::TYPE_SYS)
334 #define NN_APPLET_TYPE_SYSLIB                   (nn::applet::CTR::TYPE_SYSLIB)
335 #define NN_APPLET_TYPE_RESIDENT                 (nn::applet::CTR::TYPE_RESIDENT)
336 #define NN_APPLET_TYPE_MASK                     (nn::applet::CTR::TYPE_MASK)
337 
338 #define NN_APPLET_MANUAL_GPU_RIGHT              (nn::applet::CTR::MANUAL_GPU_RIGHT)
339 #define NN_APPLET_MANUAL_DSP_RIGHT              (nn::applet::CTR::MANUAL_DSP_RIGHT)
340 
341 // ホームボタン
342 #define NN_APPLET_HOME_BUTTON_NONE              (nn::applet::CTR::HOME_BUTTON_NONE)
343 #define NN_APPLET_HOME_BUTTON_SINGLE_PRESSED    (nn::applet::CTR::HOME_BUTTON_SINGLE_PRESSED)
344 #define NN_APPLET_HOME_BUTTON_DOUBLE_PRESSED    (nn::applet::CTR::HOME_BUTTON_DOUBLE_PRESSED)
345 
346 // システム用途の通知
347 #define NN_APPLET_NOTIFY_NONE                   (nn::applet::NOTIFY_NONE)
348 #define NN_APPLET_NOTIFY_SLEEP_QUERY            (nn::applet::NOTIFY_SLEEP_QUERY)
349 #define NN_APPLET_NOTIFY_SLEEP_ACCEPT           (nn::applet::NOTIFY_SLEEP_ACCEPT)
350 #define NN_APPLET_NOTIFY_SLEEP_REJECT           (nn::applet::NOTIFY_SLEEP_REJECT)
351 #define NN_APPLET_NOTIFY_AWAKE                  (nn::applet::NOTIFY_AWAKE)
352 
353 // アプレット種類
354 #define NN_APPLET_POS_SYSLIB                    (nn::applet::CTR::POS_SYSLIB)
355 #define NN_APPLET_POS_SYS                       (nn::applet::CTR::POS_SYS)
356 #define NN_APPLET_POS_APP                       (nn::applet::CTR::POS_APP)
357 #define NN_APPLET_POS_APPLIB                    (nn::applet::CTR::POS_APPLIB)
358 #define NN_APPLET_POS_RESIDENT                  (nn::applet::CTR::POS_RESIDENT)
359 #define NN_APPLET_POS_MAX                       (nn::applet::CTR::POS_MAX)
360 
361 // スリープ問い合わせの返答
362 #define NN_APPLET_REPLY_ACCEPT                  (nn::applet::REPLY_ACCEPT)
363 #define NN_APPLET_REPLY_REJECT                  (nn::applet::REPLY_REJECT)
364 #define NN_APPLET_REPLY_LATER                   (nn::applet::REPLY_LATER)
365 
366 //
367 #define NN_APPLET_NO_PREPARATION                (nn::applet::NO_PREPARATION)
368 #define NN_APPLET_PREPARED_TO_LAUNCH_APP        (nn::applet::PREPARED_TO_LAUNCH_APP)
369 #define NN_APPLET_PREPARED_TO_CLOSE_APP         (nn::applet::PREPARED_TO_CLOSE_APP)
370 #define NN_APPLET_PREPARED_TO_LAUNCH_APPLIB     (nn::applet::PREPARED_TO_LAUNCH_APPLIB)
371 #define NN_APPLET_PREPARED_TO_CLOSE_APPLIB      (nn::applet::PREPARED_TO_CLOSE_APPLIB)
372 #define NN_APPLET_PREPARED_TO_LAUNCH_SYS        (nn::applet::PREPARED_TO_LAUNCH_SYS)
373 #define NN_APPLET_PREPARED_TO_CLOSE_SYS         (nn::applet::PREPARED_TO_CLOSE_SYS)
374 #define NN_APPLET_PREPARED_TO_LAUNCH_SYSLIB     (nn::applet::PREPARED_TO_LAUNCH_SYSLIB)
375 #define NN_APPLET_PREPARED_TO_CLOSE_SYSLIB      (nn::applet::PREPARED_TO_CLOSE_SYSLIB)
376 #define NN_APPLET_PREPARED_TO_LAUNCH_RESIDENT   (nn::applet::PREPARED_TO_LAUNCH_RESIDENT)
377 #define NN_APPLET_PREPARED_TO_LEAVE_RESIDENT    (nn::applet::PREPARED_TO_LEAVE_RESIDENT)
378 #define NN_APPLET_PREPARED_TO_DO_HOMEMENU       (nn::applet::PREPARED_TO_DO_HOMEMENU)
379 #define NN_APPLET_PREPARED_TO_LEAVE_HOMEMENU    (nn::applet::PREPARED_TO_LEAVE_HOMEMENU)
380 
381 // アプレットID
382 #define NN_APPLET_APPLICATION_APPLET_ID         (nn::applet::CTR::APPLICATION_APPLET_ID)
383 #define NN_APPLET_ERRDISP_APPLET_ID             (nn::applet::CTR::ERRDISP_APPLET_ID)
384 
385 // 無効なハンドル
386 #define NN_APPLET_HANDLE_NONE                   (nn::applet::CTR::HANDLE_NONE)
387 
388 // 時間
389 #define NN_APPLET_WAIT_INFINITE                 (nn::applet::CTR::WAIT_INFINITE)
390 #define NN_APPLET_NO_WAIT                       (nn::applet::CTR::NO_WAIT)
391 
392 // 無効アプレットID
393 #define NN_APPLET_INVALID_ID                    (nn::applet::CTR::INVALID_ID)
394 // 無効プログラムID
395 #define NN_APPLET_INVALID_PROGRAM_ID            (nn::applet::CTR::INVALID_PROGRAM_ID)
396 
397 #define NN_APPLET_DEFAULT_APPLET_ATTRIBUTE      (nn::applet::CTR::DEFAULT_APPLET_ATTRIBUTE)
398 
399 /*!
400     @}
401 */
402 
403 
404 using nn::applet::CTR::AppletId;
405 using nn::applet::CTR::AppletAttr;
406 
407 using nn::applet::CTR::AppletHomeButtonState;
408 using nn::applet::CTR::AppletSleepNotificationState;
409 
410 using nn::applet::CTR::AppletHomeButtonCallback;
411 using nn::applet::CTR::AppletMessageCallback;
412 using nn::applet::CTR::AppletRequestMemoryCallback;
413 using nn::applet::CTR::AppletReleaseMemoryCallback;
414 using nn::applet::CTR::AppletDspSleepCallback;
415 using nn::applet::CTR::AppletDspWakeUpCallback;
416 using nn::applet::CTR::AppletSleepQueryCallback;
417 using nn::applet::CTR::AppletSleepCanceledCallback;
418 using nn::applet::CTR::AppletAwakeCallback;
419 using nn::applet::CTR::AppletShutdownCallback;
420 using nn::applet::CTR::AppletCloseAppletCallback;
421 using nn::applet::CTR::AppletPowerButtonCallback;
422 
423 using nn::applet::CTR::AppletWakeupState;
424 using nn::applet::CTR::AppletQueryReply;
425 
426 
427 #endif  // ifndef NN_APPLET_CTR_APPLET_PARAMETERS_H_
428