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