/*---------------------------------------------------------------------------* Project: Horizon File: ndm_UserControl.h Copyright (C)2009 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: 31100 $ *---------------------------------------------------------------------------*/ #ifndef NN_NDM_NDM_USERCONTROL_H_ #define NN_NDM_NDM_USERCONTROL_H_ #include #ifdef __cplusplus namespace nn{ namespace ndm{ using namespace CTR; namespace { const char PORT_NAME_USER[] = "ndm:u"; } /*! @brief ネットワークデーモン制御ライブラリを初期化します。 内部で呼び出した回数をカウンタで管理しているため繰り返し呼ぶことが可能です。 複数回 Initialize を呼び出した場合は、同じ回数 @ref Finalize を呼び出してください。 @return 成功の可否 */ Result Initialize(void); /*! @brief ネットワークデーモン制御ライブラリを終了します。 ライブラリを終了すると、@ref SuspendScheduler や @ref SuspendDaemon などの停止操作はすべて取り消されます。
ただし、取り消しが行われるのは内部のカウンタが 0 になり、本当に内部で終了処理が行われた時だけです。 @ref Initialize を複数回呼び出していた場合は、同じ回数だけ Finalize を呼び出さない限り終了処理は行われません。 他のライブラリの内部で @ref Initialize が呼ばれている場合がありますので、 Finalize を呼び出す前にはそれまでに行った停止操作を @ref ResumeScheduler や @ref ResumeDaemon などを使用して明示的に取り消すようにしてください。
なお、アプリケーションが終了時にはライブラリの終了処理が自動的に行われます。 @return 成功の可否を返します。 @retval ResultNotInitialized 初期化されていません。 */ Result Finalize(void); /*! :private @brief ネットワークデーモンを排他モードに設定します。排他モードに完全に遷移するまでブロックします。 他のプロセスが既に排他モードに設定していた場合、排他モードを上書きし排他権を奪い取ることができます。ただし、ローカル通信 @ref EM_LOCAL は奪い取れません。 自プロセスが既に排他モードに設定した場合はエラーになります。一度 @ref LeaveExclusiveState を呼び出してください。 バックグラウンドで自律的に行われている通信が設定した排他モードと競合する場合、バックグラウンドの通信はすぐに停止されます。 しかし、排他モードに応じた通信モードへの切り替えは明示的には行われません。スケジューラもしくはアプリケーションの指示により切り替えられます。
例えば、すれちがい通信中に EM_INFRA が設定されるとすれちがい通信は即停止しますが、 インフラストラクチャ通信がすぐに開始されるわけではありません。インフラストラクチャ通信はデーモンによる自律接続もしくはアプリケーションによる接続要求により開始されます。 @param[in] mode 設定する排他モード @ref ExclusiveMode EM_NONE は指定できません。排他モードを解除するには @ref LeaveExclusiveState を使用してください。 @return 成功の可否を返します。 @retval ResultLockedByOtherProcess 他のプロセスが排他状態の変更をロック中。リトライで成功する可能性あり。 @retval ResultExclusiveByOtherProcess 他のプロセスが既に上書きできない排他モードに設定している。 @retval ResultExclusiveByOwnProcess 自プロセスで既に排他モードに設定している。 @retval ResultOperationDenied スリープへの遷移処理など優先度の高い別の処理を行うため操作が拒否された。 @retval ResultInvalidEnumValue mode の値が不正 */ Result EnterExclusiveState(ExclusiveMode mode); /*! :private @brief ネットワークデーモンの排他モードを取得します。 @param[out] mode 取得する排他モード @ref ExclusiveMode @return 成功の可否を返します。 */ Result QueryExclusiveMode(ExclusiveMode& mode); /*! :private @brief ネットワークデーモンの排他モードを解除します。 自プロセスが設定した排他モードでない場合は失敗します。 @ref Finalize の呼び出し時やプロセスの終了時には自動的に呼び出されます。 @return 成功の可否を返します。 @retval ResultExclusiveByOtherProcess 他のプロセスが既に排他モードに設定している。 */ Result LeaveExclusiveState(void); /*! :private @brief 他のプロセスから排他モードが変更されないようにロックします。 カウントで管理されているのでネストして使うことができます。 ロック中は他のプロセスからローカル通信等を使用することができなくなりますので、 使用には注意してください。 @ref Finalize の呼び出し時やプロセスの終了時にはロックは自動的に解除されます。 @return 成功の可否を返します。 @retval ResultLockedByOtherProcess 他のプロセスが排他状態の変更をロック中。リトライで成功する可能性あり。 */ Result LockState(void); /*! :private @brief 排他モードのロックを解除します。 LockState を呼び出した回数分だけ呼び出す必要があります。 @return 成功の可否を返します。 @retval ResultNotLocked ロックされていません。 @retval ResultLockedByOtherProcess 他のプロセスが排他状態の変更をロック中。リトライで成功する可能性あり。 */ Result UnlockState(void); /*! @brief 各ネットワークデーモンの自律動作をまとめて停止させます。 @ref Suspend 繰り返し呼ぶとの同じです。 @param[in] mask 対象のデーモンを指定します。 @return 成功の可否を返します。 @retval ResultInvalidOperation 停止操作の回数が多すぎます。 */ Result SuspendDaemons(bit32 mask = CONTROL_MASK_DEFAULT); /*! @brief 各ネットワークデーモンの自律動作停止をまとめて解除します。 @ref Resume を繰り返し呼ぶとの同じです。 @param[in] mask 対象のデーモンを指定します。 @return 成功の可否を返します。 @retval ResultNotSuspended 自プロセスからは停止指示は出ていません。 */ Result ResumeDaemons(bit32 mask = CONTROL_MASK_DEFAULT); /*! @brief ネットワークデーモンの自律動作を停止させます。 停止の完了を待たずに処理を返します。
デーモンの停止要求はカウンタで管理されているのでネストして使用することができます。カウンタ値は各プロセスで独立です。
他のプロセスがデーモンを停止している場合は、停止させているプロセス全てが停止を解除するか終了するかしなければ デーモンは自律動作しません。
すべてのデーモンを停止しても、アクセスポイントの検索と自動接続は停止されません。 自動接続を含むすべてのバックグラウンド動作を完全に停止する場合は @ref SuspendScheduler を使用してください。 @param[in] name 対象のデーモンを指定します。 @return 成功の可否を返します。 @retval ResultAlreadySuspended プロセスごとに管理している停止カウントが不正です。 通常このエラーは発生しません。 @retval ResultInvalidOperation 停止操作の回数が多すぎます。 */ Result Suspend(DaemonName name); /*! @brief ネットワークデーモンの自律動作停止を解除します。 自プロセスが @ref Suspend を複数回呼び出している場合は、@ref Resume をその回数分呼び出さないと停止は解除されません。 @param[in] name 対象のデーモンを指定します。 @return 成功の可否を返します。 @retval ResultNotSuspended 自プロセスからは停止指示は出ていません。 */ Result Resume(DaemonName name); /*! @brief 各ネットワークデーモンのスケジューリング、つまりデーモンマネージャ自身の動作を一時停止します。 スケジューリングが停止している間はネットワークへの自律接続およびすべてのデーモンの自律動作が停止します。 特定のデーモンのみを停止したい場合は @ref Suspend, @ref SuspendDaemons を使用してください。 スケジューリングの停止要求はカウンタで管理されているのでネストして使用することができます。カウンタ値は各プロセスで独立です。 @param[in] bAsync true を指定すると停止処理の完了を待たずに処理を返します。 停止の完了を知る必要が無く、早く次の処理を行いたい場合に指定します。 @return 成功の可否を返します。 @retval ResultInvalidOperation 停止操作の回数が多すぎます。 */ Result SuspendScheduler(bool bAsync = false); /*! @brief デーモンのスケジューリング停止状態を解除します。 自プロセスが @ref SuspendScheduler を複数回呼び出している場合は、@ref ResumeScheduler をその回数分呼び出さないと停止は解除されません。 @return 成功の可否を返します。 @retval ResultNotSuspended 自プロセスからは停止指示は出ていません。 */ Result ResumeScheduler(void); /*! @brief ネットワークデーモン動作許可設定を SDK 既定の状態にします。 この関数は弱シンボル関数 @ref nninitSetupDaemons から nnMain に入る前に自動的に呼び出され、 デーモンの動作許可設定を行います。 現バージョンの SDK では、デフォルトですべてのネットワークデーモンが動作します。(何もしません。) */ void SetupDaemonsDefault(void); } } #endif // __cplusplus #endif // NN_NDM_NDM_USERCONTROL_H_