1 /*---------------------------------------------------------------------------* 2 Project: Horizon 3 File: dlp_FakeClient.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 14 *---------------------------------------------------------------------------*/ 15 #ifndef NN_DLP_CTR_DLP_FAKE_CLIENT_H_ 16 #define NN_DLP_CTR_DLP_FAKE_CLIENT_H_ 17 18 #include <nn/dlp/CTR/dlp_Type.h> 19 20 #ifdef __cplusplus 21 22 namespace nn { 23 namespace dlp { 24 namespace CTR { 25 26 /*!--------------------------------------------------------------------------* 27 @brief ダウンロードプレイの擬似クライアントのクラスです。 28 *--------------------------------------------------------------------------*/ 29 class FakeClient 30 { 31 private: FakeClient()32 FakeClient() {}; ~FakeClient()33 ~FakeClient() {}; 34 35 public: 36 /*!--------------------------------------------------------------------------* 37 @brief 擬似クライアントの初期化に必要なバッファのサイズを取得します。 38 39 @param[in] scanNum 一度のスキャン要求で受信可能なタイトル数を指定します。最大で MAX_SCAN_NUM です。 40 41 @return 処理の結果が返ってきます。 42 43 *--------------------------------------------------------------------------*/ 44 static size_t GetBufferSize(u8 scanNum); 45 46 47 /*!--------------------------------------------------------------------------* 48 @brief 擬似クライアントを初期化します。 49 50 pBuffer に GetBufferSize() で指定されたサイズの 4096 Byte 境界 のバッファを指定してください。バッファにデバイスメモリを使用しないでください。 51 52 @param[in] scanNum 一度のスキャン要求で受信可能なタイトル数を指定します。最大で MAX_SCAN_NUM です。 53 @param[in] eventHandle ダウンロードプレイからのシグナルを待つ nn::os::Event のハンドルを指定します。 Event はアプリケーションで初期化してください。また、イベントの情報は GetEventDesc で取得します。 54 @param[in] pBuffer DLP の作業バッファへのポインタ。4096 バイト境界にしてください。 55 @param[in] bufferSize 作業バッファのサイズ。4096 バイト境界にしてください。 56 57 @return 処理の結果が返ってきます。 58 59 *--------------------------------------------------------------------------*/ 60 static nn::Result Initialize(u8 scanNum, nn::Handle eventHandle, void* pBuffer, const size_t bufferSize); 61 62 63 /*!--------------------------------------------------------------------------* 64 @brief クライアントを終了します。 65 66 @return 処理の結果が返ってきます。 67 68 *--------------------------------------------------------------------------*/ 69 static nn::Result Finalize(); 70 71 72 /*!--------------------------------------------------------------------------* 73 @brief 到着しているイベントをキューから取得します。 74 75 現在のキューのサイズはイベント32個分です。キューがいっぱいになると、古いイベントから消去され新しいイベントが追加されます。<BR> 76 イベントがない場合、本API はブロックせず ResultNoData() の返すエラーコードを 返します。<BR> 77 なお、 イベントを取得しなくても各種状態取得 API を利用すれば処理を行えます。 78 79 @param[out] pEventDesc イベントを読み込み先を指定します。 80 81 @return イベントの読み込み結果を返します。 82 *--------------------------------------------------------------------------*/ 83 static nn::Result GetEventDesc(EventDesc* pEventDesc); 84 85 86 /*!--------------------------------------------------------------------------* 87 @brief スキャンで使用できるチャンネルのビットマップを返します。 88 89 @param[out] pChannels チャンネルのビットマップを返します。 最下位 bit が 1ch になります。 90 91 @return 処理の結果が返ってきます。 92 *--------------------------------------------------------------------------*/ 93 static nn::Result GetChannels(bit16* pChannels); 94 95 96 /*!--------------------------------------------------------------------------* 97 @brief サーバのスキャンを開始します。 98 99 前回のスキャン結果をクリアしてスキャンを行います。 StopScan() が呼ばれるまでスキャンを行います。<BR> 100 スキャン中も GetServerInfo()、GetTitleInfo() でスキャン結果を取得できます。 101 102 @param[in] channels スキャンするチャンネルをビットマップで指定します。スキャンできるチャンネルは GetChannels() で取得してください。 103 @param[in] programId スキャン結果を絞り込むプログラムID を指定します。 0 を指定すると プログラム ID で絞込みを行いません。 104 @param[in] pMac スキャン結果を絞り込むサーバの MAC アドレスを指定します。 NULL を指定すると MAC ID で絞込みを行いません。 105 106 @return 処理結果を返します。 107 *--------------------------------------------------------------------------*/ 108 static nn::Result StartScan(bit16 channels, nn::ProgramId programId = 0, const u8* pMac = NULL); 109 110 111 /*!--------------------------------------------------------------------------* 112 @brief サーバのスキャンを停止します。 113 114 スキャン結果は StartScan() を呼ぶまで保持されています。 115 116 @return 処理結果を返します。 117 *--------------------------------------------------------------------------*/ 118 static nn::Result StopScan(); 119 120 121 /*!--------------------------------------------------------------------------* 122 @brief スキャン結果からサーバ情報を取得します。 123 124 linkLevel、nodeNum、nodeInfo の サーバ で動的に変化する情報はスキャン中(CLIENT_STATE_SCANNING)しか更新されません<BR> 125 サーバに接続している間(CLIENT_STATE_WAITING_INVITE から CLIENT_STATE_REBOOTING)、これらの情報は GetConnectingNodes()、 <BR> 126 GetNodeInfo()、GetLinkLevel() で取得してください。 127 128 @param[out] pServerInfo サーバー情報を返します。 129 @param[in] pMac サーバの MAC アドレスを指定します。 130 131 @return 処理結果を返します。 132 *--------------------------------------------------------------------------*/ 133 static nn::Result GetServerInfo(ServerInfo* pServerInfo, const u8* pMac); 134 135 136 /*!--------------------------------------------------------------------------* 137 @brief スキャン結果からタイトル情報を取得します。 138 139 @param[out] pTitleInfo タイトルの情報を返します。 140 @param[in] pMac タイトルを配信しているサーバの MAC アドレスを指定します。 141 @param[in] programId タイトルのプログラム ID を指定します。 142 143 @return 処理結果を返します。 144 *--------------------------------------------------------------------------*/ 145 static nn::Result GetTitleInfo(TitleInfo* pTitleInfo, const u8* pMac, nn::ProgramId programId); 146 147 148 /*!--------------------------------------------------------------------------* 149 @brief スキャン結果のリストからタイトル情報を取得します。 150 151 先頭から順にタイトルの情報を取得します。取得の際にリストの末尾に到達しているかタイトルの情報がない場合<BR> 152 ブロックせずに ResultNoData() の返すエラーコードを返します。<BR> 153 ただし、スキャン中の場合は新しくタイトルを発見するとリストの最後尾にタイトル情報が追加されます。<BR> 154 先頭を取得する場合は、isReset を true にします。 155 156 @param[out] pTitleInfo タイトルの情報を返します。 157 @param[in] isReset 先頭を取得する場合、 true にします。 158 159 @return 処理結果を返します。 160 *--------------------------------------------------------------------------*/ 161 static nn::Result GetTitleInfo(TitleInfo* pTitleInfo, bool isReset = false); 162 163 164 /*!--------------------------------------------------------------------------* 165 @brief ダウンロードセッションへダウンロードなしで参加します。 166 167 @param[in] pMac 参加するセッションを持つサーバの MAC アドレスを指定します。 168 @param[in] programId セッションに参加するタイトルのプログラムIDを指定します。 169 170 @return 処理結果を返します。 171 172 *--------------------------------------------------------------------------*/ 173 static nn::Result StartFakeSession(const u8* pMac, nn::ProgramId programId); 174 175 176 /*!--------------------------------------------------------------------------* 177 @brief 参加中のセッションを終了します。 178 179 @return 処理結果を返します。 180 *--------------------------------------------------------------------------*/ 181 static nn::Result StopFakeSession(); 182 183 184 /*!--------------------------------------------------------------------------* 185 @brief 自身の状態を取得します。 186 187 @param[out] pStatus 状態、ダウンロードの進捗などを返します。 188 189 @return 処理結果を返します。 190 *--------------------------------------------------------------------------*/ 191 static nn::Result GetMyStatus(ClientStatus* pStatus); 192 193 194 /*!--------------------------------------------------------------------------* 195 @brief 接続中のノードIDを取得します。 196 197 本 API は、 サーバに接続している状態(CLIENT_STATE_WAITING_INVITE から CLIENT_STATE_REBOOTING)で使用してください。 198 199 @param[out] pNum pNodeIds に格納されたノード ID の数を返します。 200 @param[out] pNodeIds ノードIDを返します。 201 @param[in] size pNodeIds の配列の個数を指定します。 202 203 @return 処理結果を返します。 204 *--------------------------------------------------------------------------*/ 205 static nn::Result GetConnectingNodes(u8* pNum, u16* pNodeIds, u16 size); 206 207 208 /*!--------------------------------------------------------------------------* 209 @brief 接続しているノードの情報を取得します。 210 211 本 API は、 サーバに接続している状態(CLIENT_STATE_WAITING_INVITE から CLIENT_STATE_REBOOTING)で使用してください。 212 213 @param[out] pNodeInfo ノードの情報を返します。 214 @param[in] nodeId ノードIDを指定します。 215 216 @return 処理結果を返します。 217 *--------------------------------------------------------------------------*/ 218 static nn::Result GetNodeInfo(NodeInfo* pNodeInfo, u16 nodeId); 219 220 221 /*!--------------------------------------------------------------------------* 222 @brief リンクレベルを取得します。 223 224 本 API は、 サーバに接続している状態(CLIENT_STATE_WAITING_INVITE から CLIENT_STATE_REBOOTING)で使用してください。 225 226 @param[out] pLinkLevel リンクレベルを返します。 227 228 @return 処理結果を返します。 229 230 *--------------------------------------------------------------------------*/ 231 static nn::Result GetLinkLevel(nn::uds::LinkLevel* pLinkLevel); 232 233 234 }; 235 236 } // namespace CTR 237 } // namespace dlp 238 } // namespace nn 239 240 #endif // __cplusplus 241 #endif // ifndef NN_DLP_CTR_DLP_FAKE_CLIENT_H_ 242