1 /*---------------------------------------------------------------------------*
2   Project:  Horizon
3   File:     boss_Lib.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: 26265 $
14  *---------------------------------------------------------------------------*/
15 
16 #ifndef NN_BOSS_BOSS_LIB_H_
17 #define NN_BOSS_BOSS_LIB_H_
18 
19 #include <nn/os/os_Event.h>
20 #include <nn/fs/fs_Parameters.h>
21 
22 #include <nn/boss/boss_Const.h>
23 #include <nn/boss/boss_Result.h>
24 #include <nn/boss/boss_Types.h>
25 
26 #include <nn/boss/boss_TaskPolicy.h>
27 #include <nn/boss/boss_TaskStatus.h>
28 #include <nn/boss/boss_TaskOption.h>
29 #include <nn/boss/boss_TaskError.h>
30 #include <nn/boss/boss_TaskAction.h>
31 #include <nn/boss/boss_Task.h>
32 #include <nn/boss/boss_TaskIdList.h>
33 #include <nn/boss/boss_StepIdList.h>
34 #include <nn/boss/boss_NsDataIdList.h>
35 
36 
37 #ifdef __cplusplus
38 
39 namespace nn {
40 namespace boss {
41 
42 //--------------------------------------------------------------
43 /*!
44   @brief        ライブラリを初期化します。
45   @return       処理の結果が返ります。<BR>
46   @retval       Description== @ref ER_ALREADY_INITIALIZED  「初期化済み」を表すエラー
47 */
48     nn::Result Initialize(void);
49 
50 //--------------------------------------------------------------
51 /*!
52   @brief        ライブラリの終了処理を行います。
53   @return       処理の結果が返ります。<BR>
54   @retval       Description== @ref ER_IPC_NOT_SESSION_INITIALIZED  「IPCのセッションが初期化されていない。(権限不適合の場合など)」を表すエラー
55 */
56     nn::Result Finalize(void);
57 
58 //--------------------------------------------------------------
59 /*!
60   @brief        https用の独自ルート証明書をライブラリに登録します。
61                 他ルート証明書がすでに設定されている状況でこのAPIが呼ばれた場合、エラーとなります。
62   @param[in]    pCertData           ルート証明書データ。データフォーマットは、ASN.1フォーマットです。
63   @param[in]    certDataSize        クライアント証明書データのサイズを指定します。
64   @return       処理の結果が返ります。<BR>
65   @retval       Description== @ref ER_FILE_ACCESS  「ファイルアクセスに失敗」を表すエラー
66 */
67     nn::Result RegisterPrivateRootCa(const u8* pCertData, size_t certDataSize);
68 
69 //--------------------------------------------------------------
70 /*!
71   @brief        https用の独自クライアント証明書および、プライベートキーをライブラリに登録します。
72                 他クライアント証明書がすでに設定されている状況でこのAPIが呼ばれた場合、エラーとなります。
73   @param[in]    pCertData           クライアント証明書のデータ。データフォーマットは、ASN.1フォーマットです。
74   @param[in]    certDataSize        クライアント証明書データデータのサイズを指定します。
75   @param[in]    pPrivateKeyData     プライベート秘密鍵のデータ。データフォーマットは、ASN.1フォーマットです。
76   @param[in]    privateKeyDataSize  プライベート秘密鍵のデータデータのサイズを指定します。
77   @return       処理の結果が返ります。<BR>
78   @retval       Description== @ref ER_FILE_ACCESS  「ファイルアクセスに失敗」を表すエラー
79 */
80     nn::Result RegisterPrivateClientCert(const u8* pCertData, size_t certDataSize
81                                         , const u8* pPrivateKeyData, size_t privateKeyDataSize);
82 
83 //--------------------------------------------------------------
84 /*!
85   @brief        タスクをライブラリに登録します。
86   @param[in]    pTask           タスク名を指定したタスクを指定します。
87   @param[in]    pPolicy         タスクポリシーを指定します。
88   @param[in]    pAction         タスクアクションを指定します。 (現在、@ref NsaDownloadAction を指定可)
89   @param[in]    pOption         タスクオプションを指定します。(省略可能)
90   @param[in]    taskStep        タスクステップのIDを指定します。 (1つのタスク実行ステップしかない場合は、省略可)
91   @return       処理の結果が返ります。<BR>
92   @retval       Description== @ref ER_INVALID_TASK_ID  「タスクIDのポインタがNULLまたは0文字列です。」を表すエラー
93   @retval       Description== @ref ER_INVALID_POLICY  「ポリシィ情報のポインタがNULLです。」を表すエラー
94   @retval       Description== @ref ER_INVALID_ACTION  「タスクアクションのポインタがNULLです。」を表すエラー
95   @retval       Description== @ref ER_INVALID_TASK_STEP  「タスク登録でカレントステップIDが指定されました。」を表すエラー
96   @retval       Description== @ref ER_INVALID_TASK_PRIOLITY  「タスクプライオリティの指定が範囲外です。」を表すエラー
97   @retval       Description== @ref ER_TASK_PERMISSION_OUT_OF_RANGE  「タスク許可情報が範囲外です。」を表すエラー
98   @retval       Description== @ref ER_SCHEDULING_POLICY_OUT_OF_RANGE  「スケジュールポリシィが範囲外です」を表すエラー
99   @retval       Description== @ref ER_INVALID_TASK_TARGETDURATION  「タスク継続時間が範囲外です。」を表すエラー
100   @retval       Description== @ref ER_ACTIONCODE_OUT_OF_RANGE  「タスクアクションコードが範囲外です。」を表すエラー
101   @retval       Description== @ref ER_INVALID_URL  「URL文字列のポインタがNULLまたは0文字列です。」を表すエラー
102   @retval       Description== @ref ER_APINFOTYPE_OUT_OF_RANGE  「AP情報タイプが範囲外です。」を表すエラー
103   @retval       Description== @ref ER_INVALID_FILEPATH  「ファイルパス文字列のポインタがNULLまたは0文字列です。」を表すエラー
104   @retval       Description== @ref ER_INVALID_OPTION  「タスクオプションのポインタがNULL,またはoptionコードが範囲外です。」を表すエラー
105   @retval       Description== @ref ER_CANT_DELETE_SDB_DATA  「*****」を表すエラー
106   @retval       Description== @ref ER_INVALID_MEM_ALOCATE  「不正なメモリアロケーション」を表すエラー
107   @retval       Description== @ref ER_FILE_ACCESS  「ファイルアクセスに失敗」を表すエラー
108 */
109     nn::Result RegisterTask(Task* pTask, TaskPolicy* pPolicy  , TaskAction* pAction
110                             , TaskOption* pOption=NULL
111                             , u8 taskStep=DEFAULT_STEP_ID);
112 
113 //--------------------------------------------------------------
114 /*!
115   @brief        ライブラリに登録済のタスクを削除します。
116   @param[in]    pTask           登録済のタスクを指定します。
117   @param[in]    taskStep        タスクステップのIDを指定します。(1つのタスク実行ステップしかない場合は、省略可)
118   @return       処理の結果が返ります。<BR>
119   @retval       Description== @ref ER_INVALID_TASK_ID  「タスクIDのポインタがNULLまたは0文字列です。」を表すエラー
120   @retval       Description== @ref ER_TASK_NOT_EXIST  「指定されたタスクIDが見つからない。」を表すエラー
121   @retval       Description== @ref ER_CANT_UNREGISTER_TASK  「タスク状態により、UnregisterTask 出来ない」を表すエラー
122   @retval       Description== @ref ER_FILE_ACCESS  「ファイルアクセスに失敗」を表すエラー
123 */
124     nn::Result UnregisterTask(Task* pTask, u8 taskStep=DEFAULT_STEP_ID);
125 
126 //--------------------------------------------------------------
127 /*!
128   @brief        ライブラリに登録済のタスクのポリシーを更新します。
129   @param[in]    pTask           登録済のタスクを指定します。
130   @param[in]    pPolicy         変更内容が入ったタスクポリシーを指定します。
131   @param[in]    taskStep        タスクステップのIDを指定します。(1つのタスク実行ステップしかない場合は、省略可)
132   @return       処理の結果が返ります。<BR>
133   @retval       Description== @ref ER_INVALID_TASK_ID  「タスクIDのポインタがNULLまたは0文字列です。 」を表すエラー
134   @retval       Description== @ref ER_INVALID_POLICY  「ポリシィ情報のポインタがNULLです。」を表すエラー
135   @retval       Description== @ref ER_INVALID_TASK_PRIOLITY  「タスクプライオリティの指定が範囲外です。」を表すエラー
136   @retval       Description== @ref ER_TASK_PERMISSION_OUT_OF_RANGE  「タスク許可情報が範囲外です。」を表すエラー
137   @retval       Description== @ref ER_SCHEDULING_POLICY_OUT_OF_RANGE  「スケジュールポリシィが範囲外です」を表すエラー
138   @retval       Description== @ref ER_INVALID_TASK_TARGETDURATION  「タスク継続時間が範囲外です。」を表すエラー
139   @retval       Description== @ref ER_FILE_ACCESS  「ファイルアクセスに失敗」を表すエラー
140 */
141     nn::Result ReconfigureTask(Task* pTask, TaskPolicy* pPolicy, u8 taskStep=DEFAULT_STEP_ID);
142 
143 //--------------------------------------------------------------
144 /*!
145   @brief        登録済のタスクのID覧取得を取得します。
146   @param[out]   pTaskIdList     タスクID一覧を格納するオブジェクトを指定します。
147   @return       処理の結果が返ります。<BR>
148   @retval       Description== @ref ER_INVALID_TASKID_LIST  「タスクID一覧取得用のポインタがNULLです。」を表すエラー
149   @retval       Description== @ref ER_APLI_NOT_EXIST  「指定されたアプリIDが見つからない。」を表すエラー
150   @retval       Description== @ref ER_FILE_ACCESS  「ファイルアクセスに失敗」を表すエラー
151 */
152     nn::Result GetTaskIdList(TaskIdList* pTaskIdList);
153 
154 //--------------------------------------------------------------
155 /*!
156   @brief        登録済の指定したタスクの各ステップ一覧を取得します。
157   @param[in]    pTaskId         登録済のタスクを指定します。
158   @param[out]   pStepIdList     タスクステップID一覧を格納するオブジェクトを指定します。
159   @return       処理の結果が返ります。<BR>
160   @retval       Description== @ref ER_INVALID_TASK_ID  「タスクIDのポインタがNULLまたは0文字列です。」を表すエラー
161   @retval       Description== @ref ER_INVALID_STEPID_LIST  「ステップID一覧取得用のポインタがNULLです。」を表すエラー
162   @retval       Description== @ref ER_APLI_NOT_EXIST  「指定されたアプリIDが見つからない。」を表すエラー
163   @retval       Description== @ref ER_TASK_NOT_EXIST  「指定されたタスクIDが見つからない。」を表すエラー
164   @retval       Description== @ref ER_FILE_ACCESS  「ファイルアクセスに失敗」を表すエラー
165 */
166     nn::Result GetStepIdList(const char* pTaskId, StepIdList* pStepIdList);
167 
168 //--------------------------------------------------------------
169 /*!
170   @brief        NADLタスクなどでBOSSDが利用するBOSSストレージを登録します。
171                 この登録をしないと、NSデータは、ダウンロードされません。
172   @param[in]    storageId       ストレージ(追加データ)の識別子を指定します。
173   @param[in]    size            ストレージ領域内で使用可能な最大の合計サイズを指定します。
174   @return       処理の結果が返ります。<BR>
175   @retval       Description== @ref ER_FILE_ACCESS  「ファイルアクセスに失敗」を表すエラー
176 */
177     nn::Result RegisterStorage(nn::fs::ExtSaveDataId storageId, size_t size);
178 
179 //--------------------------------------------------------------
180 /*!
181   @brief        登録済のBOSSストレージを削除します。
182   @return       処理の結果が返ります。<BR>
183   @retval       Description== @ref ER_INVALID_APPID_STORAGE_NOTFOUND  「APPIDに対応したストレージがない」を表すエラー
184   @retval       Description== @ref ER_FILE_ACCESS  「ファイルアクセスに失敗」を表すエラー
185 */
186     nn::Result UnregisterStorage(void);
187 
188 
189 //--------------------------------------------------------------
190 /*!
191   @brief        ダウンロードされた新着NSコンテンツがあるか確認します。
192   @param[out]   pFlag           新着NSコンテンツがあればtrueが返ります。
193   @return       処理の結果が返ります。<BR>
194   @retval       Description== @ref ER_INVALID_NEWARRIVAL_FLAG  「新着フラグのポインタがNULLです。」を表すエラー
195   @retval       Description== @ref ER_INVALID_APPID_STORAGE_NOTFOUND  「APPIDに対応したストレージがない」を表すエラー
196   @retval       Description== @ref ER_FILE_ACCESS  「ファイルアクセスに失敗」を表すエラー
197 */
198     nn::Result GetNewArrivalFlag(bool* pFlag);
199 
200 //--------------------------------------------------------------
201 /*!
202   @brief        新着NSコンテンツがあった場合にシグナルされるイベントを登録します。
203   @param[in]    event         イベントクラスを指定します。
204   @return       処理の結果が返ります。<BR>
205   @retval       Description== @ref ER_INVALID_NEWARRIVAL_FLAG  「新着フラグのポインタがNULLです。」を表すエラー
206 */
207     nn::Result GetNewArrivalEvent(nn::os::Event* event);
208 
209 //--------------------------------------------------------------
210 /*!
211   @brief        OptoutFlagを設定します。
212   @param[in]    flag            OptoutFlagを指定します。
213   @return       処理の結果が返ります。<BR>
214   @retval       Description== @ref ER_INVALID_APPID_STORAGE_NOTFOUND  「APPIDに対応したストレージがない」を表すエラー
215   @retval       Description== @ref ER_FILE_ACCESS  「ファイルアクセスに失敗」を表すエラー
216 */
217     nn::Result SetOptoutFlag(bool flag);
218 
219 //--------------------------------------------------------------
220 /*!
221   @brief        OptoutFlagを取得します。
222   @param[out]   pFlag           OptoutFlagが返ります。
223   @return       処理の結果が返ります。<BR>
224   @retval       Description== @ref ER_INVALID_OPTOUT_FLAG  「OPTOUTフラグのポインタがNULLです。」を表すエラー
225   @retval       Description== @ref ER_INVALID_APPID_STORAGE_NOTFOUND  「APPIDに対応したストレージがない」を表すエラー
226   @retval       Description== @ref ER_FILE_ACCESS  「ファイルアクセスに失敗」を表すエラー
227 */
228     nn::Result GetOptoutFlag(bool* pFlag);
229 
230 //--------------------------------------------------------------
231 /*!
232   @brief        データタイプを指定して、NSコンテンツの一覧を取得します。
233   @param[in]    dataType        データタイプを指定します。 (DATA_TYPE_ALLで全データタイプを指定可)
234   @param[out]   pNsDataId       コンテンツデータ一覧を格納するオブジェクトを指定します。
235   @return  処理の結果が返ります。<BR>
236   @retval       Description== @ref ER_INVALID_NSDATA_IDLIST  「NSデータリスト情報のポインタがNULLです。」を表すエラー
237   @retval       Description== @ref ER_INVALID_APPID_STORAGE_NOTFOUND  「APPIDに対応したストレージがない」を表すエラー
238   @retval       Description== @ref ER_INVALID_NSDATA_GETHEAD_SIZE  「不正なNSDATAのSIZEパラメータ指定」を表すエラー
239   @retval       Description== @ref ER_NSDATA_INVALID_FORMAT  「NSD Data フォーマット異常」を表すエラー
240   @retval       Description== @ref ER_INVALID_NSDATA_GETHEAD_SIZE  「不正なNSDATAのSIZEパラメータ指定」を表すエラー
241   @retval       Description== @ref ER_FILE_ACCESS  「ファイルアクセスに失敗」を表すエラー
242 */
243     nn::Result GetNsDataIdList(u32 dataType, NsDataIdList* pNsDataId);
244 
245 //--------------------------------------------------------------
246 /*!
247   @brief        共有NSDを除外して、NSコンテンツの一覧を取得します。つまり共有NSDが存在しても、呼び出したアプリ自身のNSDのみ一覧に含まれます。
248   @param[in]    dataType        データタイプを指定します。 (DATA_TYPE_ALLで全データタイプを指定可)
249   @param[out]   pNsDataId       NSDのシリアルID一覧を格納するオブジェクトを指定します。
250   @return       処理の結果が返ります。<BR>
251   @retval       Description== @ref ER_INVALID_NSDATA_IDLIST  「NSデータリスト情報のポインタがNULLです。」を表すエラー
252   @retval       Description== @ref ER_INVALID_APPID_STORAGE_NOTFOUND  「APPIDに対応したストレージがない」を表すエラー
253   @retval       Description== @ref ER_INVALID_NSDATA_GETHEAD_SIZE  「不正なNSDATAのSIZEパラメータ指定」を表すエラー
254   @retval       Description== @ref ER_NSDATA_INVALID_FORMAT  「NSD Data フォーマット異常」を表すエラー
255   @retval       Description== @ref ER_INVALID_NSDATA_GETHEAD_SIZE  「不正なNSDATAのSIZEパラメータ指定」を表すエラー
256   @retval       Description== @ref ER_FILE_ACCESS  「ファイルアクセスに失敗」を表すエラー
257 */
258     nn::Result GetOwnNsDataIdList(u32 dataType, NsDataIdList* pNsDataId);
259 
260 //--------------------------------------------------------------
261 /*!
262   @brief        NS新着コンテンツの一覧を取得します。
263                 この操作で、すべての一覧を取得すると、新着フラグは落ちます。
264   @param[in]    dataType        データタイプを指定します。 (DATA_TYPE_ALLで全データタイプを指定可)
265   @param[out]   pNsDataId       コンテンツデータ一覧を格納するオブジェクトを指定します。
266   @return       処理の結果が返ります。<BR>
267   @retval       Description== @ref ER_INVALID_NSDATA_IDLIST  「NSデータリスト情報のポインタがNULLです。」を表すエラー
268   @retval       Description== @ref ER_INVALID_APPID_STORAGE_NOTFOUND  「APPIDに対応したストレージがない」を表すエラー
269   @retval       Description== @ref ER_INVALID_NSDATA_GETHEAD_SIZE  「不正なNSDATAのSIZEパラメータ指定」を表すエラー
270   @retval       Description== @ref ER_NSDATA_INVALID_FORMAT  「NSD Data フォーマット異常」を表すエラー
271   @retval       Description== @ref ER_INVALID_NSDATA_GETHEAD_SIZE  「不正なNSDATAのSIZEパラメータ指定」を表すエラー
272   @retval       Description== @ref ER_FILE_ACCESS  「ファイルアクセスに失敗」を表すエラー
273 */
274     nn::Result GetNewDataNsDataIdList(u32 dataType, NsDataIdList* pNsDataId);
275 
276 //--------------------------------------------------------------
277 /*!
278   @brief        共有NSDを除外して、NS新着コンテンツの一覧を取得します。つまり共有NSDが存在しても、呼び出したアプリ自身のNSDのみ一覧に含まれます。
279   @param[in]    dataType        データタイプを指定します。 (DATA_TYPE_ALLで全データタイプを指定可)
280   @param[out]   pNsDataId       NSDのシリアルID一覧を格納するオブジェクトを指定します。
281   @return       処理の結果が返ります。<BR>
282   @retval       Description== @ref ER_INVALID_NSDATA_IDLIST  「NSデータリスト情報のポインタがNULLです。」を表すエラー
283   @retval       Description== @ref ER_INVALID_APPID_STORAGE_NOTFOUND  「APPIDに対応したストレージがない」を表すエラー
284   @retval       Description== @ref ER_INVALID_NSDATA_GETHEAD_SIZE  「不正なNSDATAのSIZEパラメータ指定」を表すエラー
285   @retval       Description== @ref ER_NSDATA_INVALID_FORMAT  「NSD Data フォーマット異常」を表すエラー
286   @retval       Description== @ref ER_INVALID_NSDATA_GETHEAD_SIZE  「不正なNSDATAのSIZEパラメータ指定」を表すエラー
287   @retval       Description== @ref ER_FILE_ACCESS  「ファイルアクセスに失敗」を表すエラー
288 */
289     nn::Result GetOwnNewDataNsDataIdList(u32 dataType, NsDataIdList* pNsDataId);
290 
291 
292 } // end of namespace boss
293 } // end of namespace nn
294 
295 #endif // __cplusplus
296 
297 #endif /* NN_BOSS_BOSS_LIB_H_ */
298