1 /*---------------------------------------------------------------------------* 2 Project: Horizon 3 File: ndm_UserControl.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: 33682 $ 14 *---------------------------------------------------------------------------*/ 15 16 #ifndef NN_NDM_NDM_USERCONTROL_H_ 17 #define NN_NDM_NDM_USERCONTROL_H_ 18 19 #include <nn/ndm/CTR/ndm_Types.h> 20 21 #ifdef __cplusplus 22 23 namespace nn{ 24 namespace ndm{ 25 using namespace CTR; 26 27 namespace { 28 const char PORT_NAME_USER[] = "ndm:u"; 29 } 30 31 /*! 32 @brief ネットワークデーモン制御ライブラリを初期化します。 33 34 内部で呼び出した回数をカウンタで管理しているため繰り返し呼ぶことが可能です。 35 複数回 Initialize を呼び出した場合は、同じ回数 @ref Finalize を呼び出してください。 36 37 @return 成功の可否 38 */ 39 Result Initialize(void); 40 41 /*! 42 @brief ネットワークデーモン制御ライブラリを終了します。 43 44 ライブラリを終了すると、@ref SuspendScheduler や @ref SuspendDaemon などの停止操作はすべて取り消されます。 45 <br/> 46 ただし、取り消しが行われるのは内部のカウンタが 0 になり、本当に内部で終了処理が行われた時だけです。 47 @ref Initialize を複数回呼び出していた場合は、同じ回数だけ Finalize を呼び出さない限り終了処理は行われません。 48 他のライブラリの内部で @ref Initialize が呼ばれている場合がありますので、 49 Finalize を呼び出す前にはそれまでに行った停止操作を @ref ResumeScheduler や @ref ResumeDaemon などを使用して明示的に取り消すようにしてください。 50 <br/> 51 なお、アプリケーションが終了時にはライブラリの終了処理が自動的に行われます。 52 53 @return 成功の可否を返します。 54 @retval ResultNotInitialized 初期化されていません。 55 */ 56 Result Finalize(void); 57 58 /*! 59 :private 60 61 @brief ネットワークデーモンを排他モードに設定します。排他モードに完全に遷移するまでブロックします。 62 63 他のプロセスが既に排他モードに設定していた場合、排他モードを上書きし排他権を奪い取ることができます。ただし、ローカル通信 @ref EM_LOCAL は奪い取れません。 64 自プロセスが既に排他モードに設定した場合はエラーになります。一度 @ref LeaveExclusiveState を呼び出してください。 65 66 バックグラウンドで自律的に行われている通信が設定した排他モードと競合する場合、バックグラウンドの通信はすぐに停止されます。 67 しかし、排他モードに応じた通信モードへの切り替えは明示的には行われません。スケジューラもしくはアプリケーションの指示により切り替えられます。<br/> 68 例えば、すれちがい通信中に EM_INFRA が設定されるとすれちがい通信は即停止しますが、 69 インフラストラクチャ通信がすぐに開始されるわけではありません。インフラストラクチャ通信はデーモンによる自律接続もしくはアプリケーションによる接続要求により開始されます。 70 71 @ref Suspend, @ref SuspendDaemons, @ref SuspendScheduler などによって自プロセス・他プロセスがデーモンの自律動作を停止させている場合、 72 排他モードに遷移させてもデーモンは動作しないままになります。 73 74 @param[in] mode 設定する排他モード @ref ExclusiveMode 75 EM_NONE は指定できません。排他モードを解除するには @ref LeaveExclusiveState を使用してください。 76 77 @return 成功の可否を返します。 78 @retval ResultLockedByOtherProcess 他のプロセスが排他状態の変更をロック中。リトライで成功する可能性あり。 79 @retval ResultExclusiveByOtherProcess 他のプロセスが既に上書きできない排他モードに設定している。 80 @retval ResultExclusiveByOwnProcess 自プロセスで既に排他モードに設定している。 81 @retval ResultOperationDenied スリープへの遷移処理など優先度の高い別の処理を行うため操作が拒否された。 82 @retval ResultInvalidEnumValue mode の値が不正 83 */ 84 Result EnterExclusiveState(ExclusiveMode mode); 85 86 /*! 87 :private 88 89 @brief ネットワークデーモンの排他モードを取得します。 90 91 92 @param[out] mode 取得する排他モード @ref ExclusiveMode 93 94 @return 成功の可否を返します。 95 96 */ 97 Result QueryExclusiveMode(ExclusiveMode& mode); 98 99 /*! 100 :private 101 102 @brief ネットワークデーモンの排他モードを解除します。 103 104 自プロセスが設定した排他モードでない場合は失敗します。 105 @ref Finalize の呼び出し時やプロセスの終了時には自動的に呼び出されます。 106 107 @return 成功の可否を返します。 108 @retval ResultExclusiveByOtherProcess 他のプロセスが既に排他モードに設定している。 109 */ 110 Result LeaveExclusiveState(void); 111 112 /*! 113 :private 114 115 @brief 他のプロセスから排他モードが変更されないようにロックします。 116 117 カウントで管理されているのでネストして使うことができます。 118 ロック中は他のプロセスからローカル通信等を使用することができなくなりますので、 119 使用には注意してください。 120 121 @ref Finalize の呼び出し時やプロセスの終了時にはロックは自動的に解除されます。 122 123 @return 成功の可否を返します。 124 @retval ResultLockedByOtherProcess 他のプロセスが排他状態の変更をロック中。リトライで成功する可能性あり。 125 */ 126 Result LockState(void); 127 128 /*! 129 :private 130 131 @brief 排他モードのロックを解除します。 132 133 LockState を呼び出した回数分だけ呼び出す必要があります。 134 135 @return 成功の可否を返します。 136 @retval ResultNotLocked ロックされていません。 137 @retval ResultLockedByOtherProcess 他のプロセスが排他状態の変更をロック中。リトライで成功する可能性あり。 138 */ 139 Result UnlockState(void); 140 141 /*! 142 @brief 各ネットワークデーモンの自律動作をまとめて停止させます。 143 144 @ref Suspend 繰り返し呼ぶとの同じです。<br/> 145 アプレットで使用してはいけません。 146 147 @param[in] mask 対象のデーモンを @ref DaemonMask 型で指定します。 148 149 @return 成功の可否を返します。 150 @retval ResultInvalidOperation 停止操作の回数が多すぎます。 151 */ 152 Result SuspendDaemons(bit32 mask = CONTROL_MASK_DEFAULT); 153 154 /*! 155 @brief 各ネットワークデーモンの自律動作停止をまとめて解除します。 156 157 @ref Resume を繰り返し呼ぶとの同じです。 158 159 @param[in] mask 対象のデーモンを @ref DaemonMask 型で指定します。 160 161 @return 成功の可否を返します。 162 @retval ResultNotSuspended 自プロセスからは停止指示は出ていません。 163 */ 164 Result ResumeDaemons(bit32 mask = CONTROL_MASK_DEFAULT); 165 166 /*! 167 @brief ネットワークデーモンの自律動作を停止させます。 168 169 停止の完了を待たずに処理を返します。 170 <br/> 171 デーモンの停止要求はカウンタで管理されているのでネストして使用することができます。カウンタ値は各プロセスで独立です。 172 <br/> 173 他のプロセスがデーモンを停止している場合は、停止させているプロセス全てが停止を解除するか終了するかしなければ 174 デーモンは自律動作しません。 175 <br/> 176 すべてのデーモンを停止しても、アクセスポイントの検索と自動接続は停止されません。 177 自動接続を含むすべてのバックグラウンド動作を完全に停止する場合は @ref SuspendScheduler を使用してください。 178 179 @param[in] name 対象のデーモンを指定します。 180 181 @return 成功の可否を返します。 182 @retval ResultAlreadySuspended プロセスごとに管理している停止カウントが不正です。 183 通常このエラーは発生しません。 184 @retval ResultInvalidOperation 停止操作の回数が多すぎます。 185 */ 186 Result Suspend(DaemonName name); 187 188 /*! 189 @brief ネットワークデーモンの自律動作停止を解除します。 190 191 自プロセスが @ref Suspend を複数回呼び出している場合は、@ref Resume をその回数分呼び出さないと停止は解除されません。 192 193 @param[in] name 対象のデーモンを指定します。 194 195 @return 成功の可否を返します。 196 @retval ResultNotSuspended 自プロセスからは停止指示は出ていません。 197 */ 198 Result Resume(DaemonName name); 199 200 /*! 201 @brief 各ネットワークデーモンのスケジューリング、つまりデーモンマネージャ自身の動作を一時停止します。 202 203 スケジューリングが停止している間はネットワークへの自律接続およびすべてのデーモンの自律動作が停止します。 204 スケジューリングの停止要求はカウンタで管理されているのでネストして使用することができます。カウンタ値は各プロセスで独立です。 205 <br/> 206 SuspendScheduler を製品に組み込んで使用することは推奨されません。 207 強い理由がない限り、特定のデーモンのみを停止する @ref Suspend, @ref SuspendDaemons を使用してください。 208 209 @param[in] bAsync true を指定すると停止処理の完了を待たずに処理を返します。 210 停止の完了を知る必要が無く、早く次の処理を行いたい場合に指定します。 211 212 @return 成功の可否を返します。 213 @retval ResultInvalidOperation 停止操作の回数が多すぎます。 214 */ 215 Result SuspendScheduler(bool bAsync = false); 216 217 /*! 218 @brief デーモンのスケジューリング停止状態を解除します。 219 220 自プロセスが @ref SuspendScheduler を複数回呼び出している場合は、@ref ResumeScheduler をその回数分呼び出さないと停止は解除されません。 221 222 @return 成功の可否を返します。 223 @retval ResultNotSuspended 自プロセスからは停止指示は出ていません。 224 */ 225 Result ResumeScheduler(void); 226 227 /*! 228 @brief ネットワークデーモン動作許可設定を SDK 既定の状態にします。 229 230 この関数は弱シンボル関数 @ref nninitSetupDaemons から nnMain に入る前に自動的に呼び出され、 231 デーモンの動作許可設定を行います。 232 233 現バージョンの SDK では、デフォルトですべてのネットワークデーモンが動作します。(何もしません。) 234 235 @return なし 236 */ 237 void SetupDaemonsDefault(void); 238 } 239 } 240 241 #endif // __cplusplus 242 243 #endif // NN_NDM_NDM_USERCONTROL_H_ 244