/*---------------------------------------------------------------------------* Project: Horizon File: applet_API.h Copyright (C)2010 Nintendo Co., Ltd. All rights reserved. These coded instructions, statements, and computer programs contain proprietary information of Nintendo of America Inc. and/or Nintendo Company Ltd., and are protected by Federal copyright law. They may not be disclosed to third parties or copied or duplicated in any form, in whole or in part, without the prior written consent of Nintendo. $Rev: 33746 $ *---------------------------------------------------------------------------*/ #ifndef NN_APPLET_CTR_APPLET_API_H_ #define NN_APPLET_CTR_APPLET_API_H_ #include #include #include #include #include /*! @file @blief APPLET に関する API の宣言 */ namespace nn { namespace applet { namespace CTR { namespace detail { using namespace nn::applet::CTR; //---- 初期化・終了 Result Initialize( AppletAttr appletAttr = DEFAULT_APPLET_ATTRIBUTE ); void Enable(bool isSleepEnabled=true); void Lock(void); bool TryLock( nn::fnd::TimeSpan timeout=NO_WAIT); void Unlock(void); int CountRegisteredApplet(void); bool IsRegistered( AppletId appletId ); bool WaitForRegister( AppletId appletId, nn::fnd::TimeSpan span ); bool IsActive(void); void SetActive(void); void SetInactive(void); nn::Result SaveVramSysArea(void); nn::Result RestoreVramSysArea(void); //================ // GPU権利 void AssignGpuRight( bool flag=true ); inline void ReleaseGpuRight(void) { AssignGpuRight(false); } bool IsGpuRightGiven(void); //================ // DSP権利 void AssignDspRight( bool flag = true ); inline void ReleaseDspRight( void ) { AssignDspRight(false); } //================ // CAMERAの起動制御 void AssignCameraRight( bool flag = true ); inline void ReleaseCameraRight( void ) { AssignCameraRight(false); } //================ // sheredMemory のアタッチ void AttachTransferMemoryHandle( os::TransferMemoryBlock* transferMemory, nn::Handle handle, size_t size, bit32 otherPermission ); //================ // アプレットへのユーザメッセージ送り Result SendMessage( AppletId receiverId, const u8* pParam, size_t paramSize, nn::Handle handle=NN_APPLET_HANDLE_NONE, nn::fnd::TimeSpan timeout=WAIT_INFINITE ); Result TrySendMessage( AppletId receiverId, const u8* pParam, size_t paramSize, nn::Handle handle=NN_APPLET_HANDLE_NONE ); //================ // ホームボタン状態 AppletHomeButtonState GetAbsoluteHomeButtonState(void); void ClearAbsoluteHomeButtonState(void); // シャットダウン通知状態 AppletShutdownState GetShutdownState(void); void ClearShutdownState(void); // 電源ボタンクリック通知 AppletPowerButtonState GetPowerButtonState(void); void ClearPowerButtonState(void); // EXIT通知受け取りチェック bool IsExitNotificationReceived(void); // 終了要求 AppletOrderToCloseState GetOrderToCloseState(void); void ClearOrderToCloseState(void); //================ // ライブラリアプレットのプリロード Result PreloadLibraryApplet( AppletId id ); // ライブラリアプレット起動 Result PrepareToStartLibraryApplet( AppletId id ); Result StartLibraryApplet( AppletId id, const u8* pParam=NULL, size_t paramSize=0, Handle handle=NN_APPLET_HANDLE_NONE ); // 起動キャンセル Result CancelLibraryApplet( bool isApplicationEnd=false ); Result CancelLibraryAppletIfRegistered( bool isApplicationEnd=false, AppletWakeupState *pWakeupState=NULL ); // アプリケーション終了 Result PrepareToCloseApplication( bool isCancelPreload=false ); Result CloseApplication( const u8* pParam=NULL, size_t paramSize=0, Handle handle=NN_APPLET_HANDLE_NONE ); // ホームメニュー移行準備 Result PrepareToJumpToHomeMenu(void); Result JumpToHomeMenu( const u8* pParam=NULL, size_t paramSize=0, Handle handle=NN_APPLET_HANDLE_NONE ); // アプリケーションジャンプ Result PrepareToJumpToOtherApplication( ProgramId programId, nn::fs::MediaType mediaType=nn::fs::MEDIA_TYPE_NAND ); Result PrepareToJumpToCallerApplication(void); Result PrepareToJumpToSelfApplication(void); Result JumpToOtherApplication( const u8 pParam[], const u8 pHmacBuf[] ); Result JumpToCallerApplication( const u8 pParam[], const u8 pHmacBuf[] ); Result JumpToSelfApplication( const u8 pParam[], const u8 pHmacBuf[] ); //================ // 引数受け取り bool ReceiveDeliverArg( u8 pParam[], u8 pHmacBuf[], bit32* pUniqueId ); AppletWakeupState GetInitialWakeupState(void); bool GetInitialParam( u8* pParam, size_t paramSize, s32* pReadSize ); //================ Result GetSharedFont(Handle* pHandle, uptr* pAddr); Result GetWirelessRebootInfo(u8* pInfo, size_t size); Result Wrap(void* pWrappedBuffer, const void* pData, size_t dataSize, s32 idOffset, size_t idSize); Result Unwrap(void* pData, const void* pWrapped, size_t wrappedSize, s32 idOffset, size_t idSize); } } } } namespace nn { namespace applet { namespace CTR { using namespace nn::applet::CTR; //================================================================ // 初期化 //================================================================ /*! @name 初期化 @{ */ /*! :private @brief APPLET ライブラリの初期化を行います。 @param[in] appletAttr アプレットライブラリを初期化する際のオプションです。指定せずにデフォルト引数を使ってください。 @return 初期化処理の結果を返します。 */ inline Result Initialize(AppletAttr appletAttr = NN_APPLET_DEFAULT_APPLET_ATTRIBUTE ) { return detail::Initialize( appletAttr ); } /*! @brief アプレットライブラリに関する機能を有効にします。 @param[in] isSleepEnabled スリープを可能にするかどうかを指定するオプションです。 @return なし。 */ inline void Enable(bool isSleepEnabled=true) { detail::Enable(isSleepEnabled); } /*! @} */ //================================================================ // 排他制御 //================================================================ /*! @name 排他制御 @{ */ /*! :private @brief APPLET ライブラリにおける mutex をロックします。 */ inline void Lock(void) { detail::Lock(); } /*! :private @brief APPLET ライブラリにおける mutex のロックを試みます。 timeout は ロックできなかった場合に待つ時間の最大値です。 0 (NN_APPLET_NO_WAIT) を指定すると即座に終了します。 @param[in] timeout タイムアウト時間を指定します。 @return ロックできれば true を、出来なければ false を返します。 */ inline bool TryLock(nn::fnd::TimeSpan timeout = NN_APPLET_NO_WAIT) { return detail::TryLock(timeout); } /*! :private @brief APPLET ライブラリにおける mutex をアンロックします。 */ inline void Unlock(void) { detail::Unlock(); } /*! @} */ //================================================================ // 情報取得 //================================================================ /*! @name 情報取得 @{ */ /*! @brief DeliverArg および HMAC 情報、送信 UniqueId を取得します。 @param[out] pParam 受信用 DeliverArg バッファ @param[out] pHmacBuf 受信用 HMAC バッファ @param[out] pUniqueId 受信用 送信UniqueId バッファ */ inline bool ReceiveDeliverArg( u8 pParam[], u8 pHmacBuf[], bit32* pUniqueId ) { return detail::ReceiveDeliverArg( pParam, pHmacBuf, pUniqueId ); } /*! @brief アプリケーション起動時の Wakeup情報を取得します。 @return アプリケーション起動時の Wakeup情報 */ inline AppletWakeupState GetInitialWakeupState(void) { return detail::GetInitialWakeupState(); } // 初期パラメータを取得 // (未使用) inline bool GetInitialParam( u8* pParam, size_t paramSize, s32* pReadSize ) { return detail::GetInitialParam( pParam, paramSize, pReadSize ); } /*! :private @brief 登録されている APPLET の数を数えます。 アプリケーション自体も 1 つと数えます。 @return 登録されている APPLET の数を返します。 */ inline int CountRegisteredApplet(void) { return detail::CountRegisteredApplet(); } /*! :private @brief 指定した ID のアプレットが登録されているか確認します。 @param[in] appletId アプレット ID @return 登録されていれば true を、されていなければ false 返します。 */ inline bool IsRegistered( AppletId appletId ) { return detail::IsRegistered( appletId ); } /*! @brief アプリケーションが現在動作中かを調べます。 @return active ならば true を、そうでないならば false を返します。 */ inline bool IsActive(void) { return detail::IsActive(); } /*! :private @brief アプリケーションをアクティブにします。 アプリケーションが自ら呼ぶことは行わないでください。 */ inline void SetActive(void) { detail::SetActive(); } /*! :private @brief アプリケーションを非アクティブにします。 アプリケーションが自ら呼ぶことは行わないでください。 */ inline void SetInactive(void) { detail::SetInactive(); } /*! :private @brief アプリケーションがライブラリの初期化を行ったか取得します。 @return 初期化済みならば true を返します。 */ bool IsInitialized(); /*! :private @brief アプリケーションのアプレット ID を取得します。 アプリケーションでは返る値が固定です。 @return アプレット ID を返します。 */ AppletId GetId(void); /*! :private @brief アプリケーションのアプレットアトリビュートを取得します。 取得できるのは Initialize() 時に指定したアトリビュートとなります。 @return アトリビュートを返します。 */ AppletAttr GetAttribute(void); /*! @} */ // :private AppletAttr GetAppletType(void); //================================================================ // 動作制御 //================================================================ /*! @name 動作制御 @{ */ /*! @brief 指定した ID のアプレットが登録されるのを、指定時間だけ待ちます。 @param[in] appletId アプレット ID @param[in] span 待ち時間の上限 @return 登録されていれば true を、されていなければ false を返します。 */ inline bool WaitForRegister( AppletId appletId, nn::fnd::TimeSpan span = NN_APPLET_WAIT_INFINITE ) { return detail::WaitForRegister( appletId, span ); } //================================================================ // 描画権 //================================================================ /*! @name 描画権 @{ */ /*! :private @brief アプリケーションが描画権限を与えられているかを調べます。 @return 描画権限を与えられていれば true を、そうでなければ false を返します。 */ inline bool IsGpuRightGiven(void) { return detail::IsGpuRightGiven(); } /*! @brief アプリケーションが描画することを宣言します。 @param[in] flag true なら描画権限を取得、false なら描画権限を放棄 */ inline void AssignGpuRight( bool flag = true ) { detail::AssignGpuRight(flag); } /*! @brief アプリケーションが他のプログラムに描画を切り替えることを宣言します。 */ inline void ReleaseGpuRight(void) { detail::AssignGpuRight(false); } /*! @} */ //================================================================ // DSP使用権 //================================================================ /*! @name DSP使用権 @{ */ /*! :private @brief DSP の使用権を取得、放棄します。 必要に応じて、内部で DSP 処理を中断、再開します。 通常、アプリケーションが呼ぶ必要はありません。 @param[in] flag true なら再開、false なら中断 */ inline void AssignDspRight( bool flag = true ) { detail::AssignDspRight(flag); } /*! :private @brief DSP の使用権を放棄します。 必要に応じて、内部で DSP での処理を一時中断します。 通常、アプリケーションが呼ぶ必要はありません。 */ inline void ReleaseDspRight( void ) { detail::AssignDspRight(false); } /*! @} */ /*! :private @brief 共有メモリハンドルをアタッチします。 @param[out] transferMemory 共有メモリブロックポインタ @param[in] handle ハンドル @param[in] size 共有メモリのサイズ @param[in] readOnly 読み取り専用フラグ */ inline void AttachTransferMemoryHandle( os::TransferMemoryBlock* transferMemory, nn::Handle handle, size_t size, bit32 otherPermission ) { detail::AttachTransferMemoryHandle( transferMemory, handle, size, otherPermission ); } //================================================================ // CAMERAの起動制御 //================================================================ /*! @name CAMERAの起動制御 @{ */ /*! :private @brief CAMERA を Release 前の状態に戻します。 */ inline void AssignCameraRight( bool flag = true ) { detail::AssignCameraRight(flag); } /*! :private @brief CAMERA をスタンバイ状態に落とします。 */ inline void ReleaseCameraRight( void ) { detail::AssignCameraRight(false); } /*! @} */ //================================================================ // メッセージ //================================================================ /*! @name メッセージ @{ */ /*! :private @brief アプレットへのメッセージ送信を行います。 @param[in] receiverId 宛先のアプレット ID @param[in] pParam アプレットへ送るパラメータバッファ @param[in] paramSize アプレットへ送るパラメータバッファのサイズ @param[in] handle アプレットへ送るハンドル @param[in] timeout タイムアウト時間 @return 処理結果を返します。 */ inline Result SendMessage( AppletId receiverId, const u8* pParam, size_t paramSize, nn::Handle handle=NN_APPLET_HANDLE_NONE, nn::fnd::TimeSpan timeout=WAIT_INFINITE ) { return detail::SendMessage( receiverId, pParam, paramSize, handle, timeout ); } /*! :private @brief アプレットへのメッセージ送信を行います。 @param[in] receiverId 宛先のアプレット ID @param[in] pParam アプレットへ送るパラメータバッファ @param[in] paramSize アプレットへ送るパラメータバッファサイズ @param[in] handle アプレットへ送るハンドル @return 処理結果を返します。 */ inline Result TrySendMessage( AppletId receiverId, const u8* pParam, size_t paramSize, nn::Handle handle=NN_APPLET_HANDLE_NONE ) { return detail::TrySendMessage( receiverId, pParam, paramSize, handle ); } /*! @} */ /*! :private @brief 現在のホームボタンの状態を取得します。 GetHomeButtonState 関数よりも正確な値が得られます。 通常、アプリケーションがこの関数を用いることはありません。 @return 状態を返します。 */ inline AppletHomeButtonState GetAbsoluteHomeButtonState(void) { return detail::GetAbsoluteHomeButtonState(); } /*! :private @brief ホームボタンの状態をクリアします。 通常、アプリケーションがこの関数を用いることはありません。 */ inline void ClearAbsoluteHomeButtonState(void) { return detail::ClearAbsoluteHomeButtonState(); } //================================================================ // シャットダウン //================================================================ /*! @name シャットダウン @{ */ /*! :private @brief シャットダウン状態を取得します。 @return 状態を返します。 */ inline AppletShutdownState GetShutdownState(void) { return detail::GetShutdownState(); } /*! :private @brief シャットダウン状態をクリアします。 */ inline void ClearShutdownState(void) { detail::ClearShutdownState(); } /*! @} */ //================================================================ // 終了状態 //================================================================ inline bool IsExitNotificationReceived(void) { return detail::IsExitNotificationReceived(); } //================================================================ // 電源ボタン //================================================================ /*! @name 電源ボタン @{ */ /*! :private @brief 電源ボタンの状態を取得します。 @return 状態を返します。 取得できる状態は applet::POWER_BUTTON_STATE_NONE (電源ボタンは押されていない)、 applet::POWER_BUTTON_STATE_CLICK (電源ボタンがクリックされた) です。 アプリケーションはこの値を調べるのではなく、 IsExpectedToProcessPowerButton() を用いてください。 */ inline AppletPowerButtonState GetPowerButtonState(void) { return detail::GetPowerButtonState(); } /*! :private @brief 電源ボタンの状態をクリアします。 */ inline void ClearPowerButtonState(void) { detail::ClearPowerButtonState(); } bool IsReceivedWakeupByCancel(void); /*! @brief 電源ボタンの状態を調べます。 @return 状態を返します。 */ inline bool IsExpectedToProcessPowerButton(void) { return ( GetPowerButtonState() != POWER_BUTTON_STATE_NONE )? true: false; } /*! @} */ //================================================================ // 終了要求 //================================================================ inline AppletOrderToCloseState GetOrderToCloseState(void) { return detail::GetOrderToCloseState(); } inline void ClearOrderToCloseState(void) { detail::ClearOrderToCloseState(); } /*! @name アプリケーション終了 @{ */ /*! @brief アプリケーションが終了すべきかを調べます。 @return 状態を返します。 */ inline bool IsExpectedToCloseApplication(void) { return ( GetOrderToCloseState() != ORDER_TO_CLOSE_STATE_NONE || IsReceivedWakeupByCancel() )? true: false; } //================================================================ // ライブラリアプレット・プリロードと終了 //================================================================ /*! @name ライブラリアプレットのプリロードと終了 @{ */ /*! :private @brief 起動するライブラリアプレットのプリロードを行います。 プリロード完了まで待つ場合は WaitForLibraryAppletPreloaded() を 呼んで下さい。 通常アプリケーションがこの関数を直接呼ぶことはありません。 @param[in] id ライブラリアプレットのアプレット ID @return 処理結果を返します。 */ inline Result PreloadLibraryApplet( AppletId id ) { return detail::PreloadLibraryApplet(id); } /*! @} */ /*! :private @brief プリロードされているライブラリアプレットを終了します。 ライブラリアプレットがあるときだけ終了します。 ないときに呼び出しても構いません。 通常アプリケーションがこの関数を呼ぶことはありません。 @return 処理結果を返します。 */ inline Result CancelLibraryAppletIfRegistered( bool isApplicationEnd, AppletWakeupState *pWakeupState=NULL ) { return detail::CancelLibraryAppletIfRegistered( isApplicationEnd, pWakeupState ); } /*! @} */ //================================================================ // ライブラリアプレット・起動 //================================================================ /*! @name ライブラリアプレット起動 @{ */ /*! :private @brief ライブラリアプレットを起動する準備を行います。 ライブラリアプレットを呼び出す準備を行う関数です。 この関数が呼ばれた後に StartLibraryApplet() を呼ぶことでライブラリアプレットを起動します。 通常アプリケーションがこの関数を呼ぶことはありません。 @param[in] id ライブラリアプレットのアプレット ID @return 処理結果を返します。 */ inline Result PrepareToStartLibraryApplet( AppletId id ) { return detail::PrepareToStartLibraryApplet(id); } /*! :private @brief ライブラリアプレットを起動します。 ライブラリアプレットを呼び出す関数です。 この関数の前に PrepareToStartLibraryApplet() が呼ばれている必要があります。 この関数を呼んだ後に、WaitForStarting() で起動待ちを行ってください。 通常アプリケーションがこの関数を呼ぶことはありません。 @param[in] id ライブラリアプレットのアプレット ID @param[in] pParam ライブラリアプレットに送るパラメータバッファ @param[in] paramSize ライブラリアプレットに送るパラメータバッファサイズ @param[in] handle ライブラリアプレットに送るハンドル @return 処理結果を返します。 */ inline Result StartLibraryApplet( AppletId id, const u8* pParam=NULL, size_t paramSize=0, Handle handle=NN_APPLET_HANDLE_NONE ) { return detail::StartLibraryApplet(id, pParam, paramSize, handle); } /*! @} */ //================================================================ // アプリケーション終了 //================================================================ /*! @name アプリケーション終了 @{ */ /*! @brief アプリケーションを終了する準備を行います。 @return 処理結果を返します。 */ inline Result PrepareToCloseApplication(void) { return detail::PrepareToCloseApplication(); } /*! @brief アプリケーションを終了します。 @param[in] pParam パラメータバッファ @param[in] paramSize パラメータバッファサイズ @param[in] handle ハンドル @return 処理結果を返します。 */ inline Result CloseApplication( const u8* pParam=NULL, size_t paramSize=0, Handle handle=NN_APPLET_HANDLE_NONE ) { return detail::CloseApplication( pParam, paramSize, handle ); } /*! @} */ // Obsolete な関数。 inline Result PrepareToClosePreloadedApplication(void) { return detail::PrepareToCloseApplication( true ); } inline Result ClosePreloadedApplication( const u8* pParam=NULL, size_t paramSize=0, Handle handle=NN_APPLET_HANDLE_NONE ) { return detail::CloseApplication( pParam, paramSize, handle ); } //================================================================ // ホームメニュー //================================================================ /*! @name ホームメニュー @{ */ /*! :private @brief ホームメニューへ移行する準備を行います。 この関数の後に CloseApplication() を呼ぶことでホームメニューへ移行します。 通常アプリケーションがこの関数を呼ぶことはありません。 @return 処理結果を返します。 */ inline Result PrepareToJumpToHomeMenu(void) { return detail::PrepareToJumpToHomeMenu(); } /*! :private @brief ホームメニューへ移行します。 この関数の前に PrepareToJumpToHomeMenu() が呼ばれている必要があります。 この関数を呼んだ後に、WaitForStarting() で起動待ちを行ってください。 通常アプリケーションがこの関数を呼ぶことはありません。 @param[in] pParam ホームメニューへ送るパラメータバッファ @param[in] paramSize ホームメニューへ送るパラメータバッファのサイズ @param[in] handle ホームメニューへ送るハンドル @return 処理結果を返します。 */ inline Result JumpToHomeMenu( const u8* pParam=NULL, size_t paramSize=0, Handle handle=NN_APPLET_HANDLE_NONE ) { return detail::JumpToHomeMenu( pParam, paramSize, handle ); } /*! @} */ //================================================================ // アプリケーションジャンプ //================================================================ /*! @name アプリケーションジャンプ @{ */ inline Result PrepareToJumpToOtherApplication( ProgramId programId, nn::fs::MediaType mediaType=nn::fs::MEDIA_TYPE_NAND ) { return detail::PrepareToJumpToOtherApplication( programId, mediaType ); } inline Result PrepareToJumpToCallerApplication(void) { return detail::PrepareToJumpToCallerApplication(); } inline Result PrepareToJumpToSelfApplication(void) { return detail::PrepareToJumpToSelfApplication(); } /*! :private @brief 自身を終了し、他のアプリケーションを起動します。 @param[in] pParam 起動するアプリケーションに渡す DeliverArg バッファ @param[in] pHmacBuf 起動するアプリケーションに渡す HMAC バッファ @return 処理結果を返します。 */ inline Result JumpToOtherApplication( const u8 pParam[]=NULL, const u8 pHmacBuf[]=NULL ) { return detail::JumpToOtherApplication( pParam, pHmacBuf ); } /*! :private @brief 自身を終了し、呼び元のアプリケーションを起動します。 @param[in] pParam 起動するアプリケーションに渡す DeliverArg バッファ @param[in] pHmacBuf 起動するアプリケーションに渡す HMAC バッファ @return 処理結果を返します。 */ inline Result JumpToCallerApplication( const u8 pParam[]=NULL, const u8 pHmacBuf[]=NULL ) { return detail::JumpToCallerApplication( pParam, pHmacBuf ); } /*! :private @brief 自身を終了し、もう一度自身のアプリケーションを起動します。 この自己ジャンプの処理を挟んでも、JumpToCallerApplication() で戻る 呼び元は変わりません。 @param[in] pParam 起動するアプリケーションに渡す DeliverArg バッファ @param[in] pHmacBuf 起動するアプリケーションに渡す HMAC バッファ @return 処理結果を返します。 */ inline Result JumpToSelfApplication( const u8 pParam[]=NULL, const u8 pHmacBuf[]=NULL ) { return detail::JumpToSelfApplication( pParam, pHmacBuf ); } /*! @} */ //================================================================ // 非公開 //================================================================ /*! :private @brief VRAM のシステム領域を退避させます。 @return 処理結果を返します。 */ inline nn::Result SaveVramSysArea(void) { return detail::SaveVramSysArea(); } /*! :private @brief VRAM のシステム領域を復元します。 @return 処理結果を返します。 */ inline nn::Result RestoreVramSysArea(void) { return detail::RestoreVramSysArea(); } /*! @} */ } } } /*! @defgroup nn_applet applet @brief APPLET を扱うモジュールです。 @{ */ #include /*! :private @brief APPLET ライブラリの初期化を行い、APPLET を登録します。 @detail 対応する C++ 関数 @ref nn::applet::CTR::Initialize() を参照してください。 */ NN_EXTERN_C inline nn::Result nnappletInitialize( AppletAttr appletAttr = NN_APPLET_DEFAULT_APPLET_ATTRIBUTE) { return nn::applet::CTR::Initialize(appletAttr); } /*! :private @brief APPLET ライブラリにおける mutex をロックします。 @detail 対応する C++ 関数 @ref nn::applet::CTR::Lock() を参照してください。 */ NN_EXTERN_C inline void nnappletLock(void) { nn::applet::CTR::Lock(); } /*! :private @brief APPLET ライブラリにおける mutex のロックを試みます。 @detail 対応する C++ 関数 @ref nn::applet::CTR::TryLock() を参照してください。 */ NN_EXTERN_C inline bool nnappletTryLock(nn::fnd::TimeSpan timeout=NN_APPLET_NO_WAIT) { return nn::applet::CTR::TryLock(timeout); } /*! :private @brief APPLET ライブラリにおける mutex をアンロックします。 @detail 対応する C++ 関数 @ref nn::applet::CTR::Unlock() を参照してください。 */ NN_EXTERN_C inline void nnappletUnlock(void) { nn::applet::CTR::Unlock(); } //---------------------------------------------------------------- /*! :private @brief 登録されている APPLET の数を数えます。 @detail 対応する C++ 関数 @ref nn::applet::CTR::CountRegisteredApplet() を参照してください。 */ NN_EXTERN_C inline int nnappletCountRegisteredApplet(void) { return nn::applet::CTR::CountRegisteredApplet(); } /*! :private @brief APPLET が登録されているかを調べます。 @detail 対応する C++ 関数 @ref nn::applet::CTR::IsRegistered() を参照してください。 */ NN_EXTERN_C inline bool nnappletIsRegistered( AppletId appletId ) { return nn::applet::CTR::IsRegistered( appletId ); } NN_EXTERN_C inline bool nnappletWaitForRegister( AppletId appletId, nn::fnd::TimeSpan span=NN_APPLET_WAIT_INFINITE ) { return nn::applet::CTR::WaitForRegister( appletId, span ); } /*! @brief APPLET が現在動作選択されて active かを調べます。 @detail 対応する C++ 関数 @ref nn::applet::CTR::IsActive() を参照してください。 */ NN_EXTERN_C inline bool nnappletIsActive(void) { return nn::applet::CTR::IsActive(); } NN_EXTERN_C inline void nnappletAssignGpuRight(bool flag=true) { nn::applet::CTR::AssignGpuRight(flag); } NN_EXTERN_C inline void nnappletReleaseGpuRight(void) { nn::applet::CTR::AssignGpuRight(false); } /*! :private @brief APPLET が現在描画権限を与えられているかを調べます。 @detail 対応する C++ 関数 @ref nn::applet::CTR::IsGpuRightGiven() を参照してください。 */ NN_EXTERN_C inline bool nnappletIsGpuRightGiven(void) { return nn::applet::CTR::IsGpuRightGiven(); } NN_EXTERN_C inline void nnappletAttachTransferMemoryHandle( nn::os::TransferMemoryBlock* transferMemory, nn::Handle handle, size_t size, bit32 otherPermission ) { nn::applet::CTR::AttachTransferMemoryHandle( transferMemory, handle, size, otherPermission ); } /*! @} */ #endif // ifndef NN_APPLET_CTR_APPLET_API_H_