/*---------------------------------------------------------------------------* Project: Horizon File: applet_Wrapper.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: 32608 $ *---------------------------------------------------------------------------*/ #ifndef NN_APPLET_CTR_APPLET_WRAPPER_H_ #define NN_APPLET_CTR_APPLET_WRAPPER_H_ #include #include #include #include namespace nn { namespace applet { namespace CTR { namespace detail { AppletWakeupState WaitForStarting( AppletId* pSenderId=NULL, u8* pParam=NULL, size_t paramSize=0, s32* pReadLen=NULL, nn::Handle *pHandle=NULL, nn::fnd::TimeSpan span=NN_APPLET_WAIT_INFINITE ); bool ProcessHomeButton(void); } } } } namespace nn { namespace applet { namespace CTR { /*! @name ホームメニュー @{ */ /*! @brief ホームボタンの状態を取得します。 @return 状態を返します。 */ AppletHomeButtonState GetHomeButtonState(void); /*! @brief ホームボタンの状態をクリアします。 */ void ClearHomeButtonState(void); // 内部関数(非公開) bool IsExpectedToJumpToHomeMenu(void); // 内部関数(非公開) void SetExpectationToJumpToHomeMenu( bool sw ); /*! @brief ホームボタンの処理を行う要求があるかを調べます。 @return 処理要求の有無を返します。true ならばホームボタン処理が必要です。 */ bool IsExpectedToProcessHomeButton(void); /*! @} */ /*! @name ホームメニュー @{ */ /*! @brief ホームメニュー遷移処理を行います。 @return ウェイトする必要があるかどうかを返します。 */ inline bool ProcessHomeButton(void) { return detail::ProcessHomeButton(); } // ↓この関数は古い表記です。変わりにProcessHomeButton()を使ってください。 // (互換性のために本バージョンでは残してあります) inline bool ProcessHomeButtonIfPrepared(void) { return detail::ProcessHomeButton(); } /*! @} */ /*! @name 電源ボタン @{ */ /*! @brief 電源ボタン遷移処理を行います。 @return 待ちうけを行う必要があるかどうかを返します。 */ bool ProcessPowerButton(void); /*! @} */ /*! @name スリープ @{ */ /*! @brief スリープ通知状態を取得します。 @return 状態を返します。 */ AppletSleepNotificationState GetSleepNotificationState(void); /*! @brief スリープ通知状態が、返答の保留中という状態かどうかを調べます。 @return 返答保留中ならば true を返します。 */ bool IsExpectedToReplySleepQuery(void); inline bool IsExpectedToReplySleepQuery(void) { return (GetSleepNotificationState() == nn::applet::CTR::NOTIFY_SLEEP_QUERY)? true: false; } /*! @brief スリープ通知状態をクリアします。 */ void ClearSleepNotificationState(void); /*! @brief スリープ問い合わせへの返答を行います。 @param[in] reply 返答 */ void ReplySleepQuery( AppletQueryReply reply ); /*! @} */ /*! @name コールバック設定 @{ */ /*! @brief ホームボタン検出コールバックを設定します。 @param[in] callback コールバック @param[in] arg コールバックへの引数 */ void SetHomeButtonCallback( AppletHomeButtonCallback callback, uptr arg=0 ); /*! :private @brief メッセージ受け取りコールバックを設定します。 @param[in] callback コールバック @param[in] arg コールバックへの引数 */ void SetReceiveMessageCallback( AppletMessageCallback callback, uptr arg=0 ); /*! @brief 電源ボタン検出コールバックを設定します。 @param[in] callback コールバック @param[in] arg コールバックへの引数 */ void SetPowerButtonCallback( AppletPowerButtonCallback callback, uptr arg=0 ); /*! :private @brief 共有メモリ要求受け取りコールバックを設定します。 @param[in] callback コールバック @param[in] arg コールバックへの引数 */ void SetRequestMemoryCallback( AppletRequestMemoryCallback callback, uptr arg=0 ); /*! :private @brief 共有メモリ解放コールバックを設定します。 @param[in] callback コールバック @param[in] arg コールバックへの引数 */ void SetReleaseMemoryCallback( AppletReleaseMemoryCallback callback, uptr arg=0 ); /*! :private @brief DSP スリープコールバックを設定します。 @param[in] callback コールバック @param[in] arg コールバックへの引数 */ void SetDspSleepCallback( AppletDspSleepCallback callback, uptr arg=0 ); /*! :private @brief DSP スリープ復帰コールバックを設定します。 @param[in] callback コールバック @param[in] arg コールバックへの引数 */ void SetDspWakeUpCallback( AppletDspWakeUpCallback callback, uptr arg=0 ); /*! @brief スリープ問い合わせコールバックを設定します。 @param[in] callback コールバック @param[in] arg コールバックへの引数 */ void SetSleepQueryCallback( AppletSleepQueryCallback callback, uptr arg=0 ); /*! @brief スリープキャンセルコールバックを設定します。 @param[in] callback コールバック @param[in] arg コールバックへの引数 */ void SetSleepCanceledCallback( AppletSleepCanceledCallback callback, uptr arg=0 ); /*! @brief スリープ復帰コールバックを設定します。 なお、スリープから復帰したあとに nngxStartLcdDisplay() で LCD の復帰を行うのはアプリケーションで行う必要があります。 @param[in] callback コールバック @param[in] arg コールバックへの引数 */ void SetAwakeCallback( AppletAwakeCallback callback, uptr arg=0 ); /*! :private @brief シャットダウン通知コールバックを設定します。 @param[in] callback コールバック @param[in] arg コールバックへの引数 */ void SetShutdownCallback( AppletShutdownCallback callback, uptr arg=0 ); /*! :private @brief アプレット終了時コールバックを設定します。 @param[in] callback コールバック @param[in] arg コールバックへの引数 */ void SetCloseAppletCallback( AppletCloseAppletCallback callback, uptr arg=0 ); /*! :private @brief アプリケーションからホームメニュー/システムアプレット遷移時のコールバックを設定します。 @param[in] callback コールバック @param[in] arg コールバックへの引数 */ void SetTransitionCallback( AppletTransitionCallback callback, uptr arg=0 ); /*! :private @brief アプリケーション終了コールバックを設定します。 @param[in] callback コールバック @param[in] arg コールバックへの引数 */ void SetCloseCallback( AppletCloseCallback callback, uptr arg=0 ); /*! @} */ /*! @name 動作制御 @{ */ /*! @brief 自身の開始イベントが来るのを待ちます。 @param[out] pSenderId イベント送信元の アプレットID @param[out] pParam パラメータバッファ @param[in] paramSize パラメータバッファサイズ @param[out] pReadLen 読み込みサイズ @param[out] pHandle ハンドラ @param[in] timeout タイムアウト時間 @return 起床理由を返します。 */ inline AppletWakeupState WaitForStarting( AppletId* pSenderId=NULL, u8* pParam=NULL, size_t paramSize=0, s32* pReadLen=NULL, nn::Handle *pHandle=NULL, nn::fnd::TimeSpan timeout=NN_APPLET_WAIT_INFINITE ) { return detail::WaitForStarting( pSenderId, pParam, paramSize, pReadLen, pHandle, timeout ); } /*! @} */ bool IsAppletPreloaded( AppletId id ); void WaitForAppletPreloaded( AppletId id ); /*! @name ライブラリアプレットのプリロードと終了 @{ */ /*! :private @brief ライブラリアプレットのプリロードが完了したかを調べます。 @param[in] id ライブラリアプレットのアプレット ID @return 終了していれば true となります。 */ inline bool IsLibraryAppletPreloaded(void) { return IsAppletPreloaded( APPLIB_APPLET_ID ); } /*! :private @brief ライブラリアプレットのプリロードが完了するまで待ちます。 */ inline void WaitForLibraryAppletPreloaded(void) { WaitForAppletPreloaded( APPLIB_APPLET_ID ); } /*! @} */ /*! @name スリープ @{ */ /*! @brief スリープを可能にします。 @param[in] isSleepCheck true ならば、蓋が閉じられていればスリープ動作に入ります。 */ void EnableSleep( bool isSleepCheck=nn::applet::CTR::SLEEP_IF_SHELL_CLOSED ); /*! @brief スリープを禁止にします。 @param[in] isReplyReject true ならば、スリープの問い合わせが来ている場合には applet::ReplySleepQuery( applet::REPLY_REJECT ) を行います。 */ void DisableSleep( bool isReplyReject=nn::applet::CTR::REPLY_REJECT_IF_LATER ); /*! :private @brief スリープが可能かどうかを取得します。 EnableSleep() が呼ばれスリープ可能か、DisableSleep() が呼ばれスリープが禁止状態か を調べて結果を取得します。 @return true ならばスリープ可能です。 */ bool IsEnableSleep(); /*! @} */ } } } #include NN_EXTERN_C inline AppletHomeButtonState nnappletGetHomeButtonState(void) { return nn::applet::CTR::GetHomeButtonState(); } NN_EXTERN_C inline void nnappletClearHomeButtonState(void) { nn::applet::CTR::ClearHomeButtonState(); } NN_EXTERN_C inline AppletWakeupState nnappletWaitForStarting( AppletId* pSenderId=NULL, u8* pParam=NULL, size_t paramSize=0, s32* pReadLen=NULL, nn::Handle *pHandle=NULL ) { return nn::applet::CTR::WaitForStarting( pSenderId, pParam, paramSize, pReadLen, pHandle ); } NN_EXTERN_C inline bool nnappletProcessHomeButton(void) { return nn::applet::CTR::ProcessHomeButton(); } #endif // ifndef NN_APPLET_CTR_APPLET_WRAPPER_H_