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