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: 33746 $ 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 /*! :private 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 /*! :private 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