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