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: 31623 $
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   @brief        BOSSライブラリの初期化を実施します。BOSSライブラリをリンクしているプロセスは、ライブラリ利用前に一度呼び出す必要があります。
44   @attention    @ref Initialize 以外のI/Fは、@ref Initialize 成功前に実行した場合は、 「初期化されていない」を表すエラー(ResultIpcNotSessionInitialized)を返します。
45   @return       関数の実行結果を返します。以下に挙げる Result を返します。
46   @retval       ResultSuccess               初期化に成功しました。
47   @retval       ResultAlreadyInitialized    すでに初期化済みです。
48   @retval       上記以外                    想定外のエラー(エラー内容については、@ref boss_Result.h を参照)。
49 */
50     nn::Result Initialize(void);
51 
52 /*!
53   @brief        BOSSライブラリの終了処理を実施します。BOSSライブラリをリンクしているプロセスは、ライブラリ利用終了後に一度呼び出す必要があります。
54   @return       関数の実行結果を返します。以下に挙げる Result を返します。
55   @retval       ResultSuccess                   終了処理に成功しました。
56   @retval       ResultIpcNotSessionInitialized  セッションが初期化されていないか、権限不適合です。
57   @retval       上記以外                        想定外のエラー(エラー内容については、@ref boss_Result.h を参照)。
58 */
59     nn::Result Finalize(void);
60 
61 /*!
62   @brief        https通信で使用することができる独自ルート証明書をライブラリに登録します。
63                 登録された証明書をタスクで使用するためには、DownloadActionクラスまたは、NsaDownloadActionクラスのSetPrivateRootCa()を使用してください。
64                 1ルート証明書のみを登録できます。重複登録した場合は、後で登録した内容が有効になります。
65   @param[in]    pCertData           ルート証明書データ。データフォーマットは、ASN.1フォーマットです。
66   @param[in]    certDataSize        クライアント証明書データのサイズを指定します。
67   @return       関数の実行結果を返します。以下に挙げる Result を返します。
68   @retval       ResultSuccess                   登録に成功しました。
69   @retval       ResultIpcNotSessionInitialized  セッションが初期化されていないか、権限不適合です。@ref Initialize もしくは @ref InitailizePriviledged の呼び出し前に本関数が呼び出されると、このResultが返ります。BOSSライブラリを利用する際には、必ず初めに@ref Initialize もしくは @ref InitailizePriviledged の呼び出してください。
70   @retval       上記以外                        想定外のエラー(エラー内容については、@ref boss_Result.h を参照)。
71 */
72     nn::Result RegisterPrivateRootCa(const u8* pCertData, size_t certDataSize);
73 
74 /*!
75   @brief        https通信で使用することができる独自クライアント証明書および、プライベートキーをライブラリに登録します。
76                 登録された証明書をタスクで使用するためには、DownloadActionクラスまたは、NsaDownloadActionクラスのSetPrivateClientCert()を使用してください。
77                 1クライアント証明書のみを登録できます。重複登録した場合は、後で登録した内容が有効になります。
78   @param[in]    pCertData           クライアント証明書のデータ。データフォーマットは、ASN.1フォーマットです。
79   @param[in]    certDataSize        クライアント証明書データデータのサイズを指定します。
80   @param[in]    pPrivateKeyData     プライベート秘密鍵のデータ。データフォーマットは、ASN.1フォーマットです。
81   @param[in]    privateKeyDataSize  プライベート秘密鍵のデータデータのサイズを指定します。
82   @return       関数の実行結果を返します。以下に挙げる Result を返します。
83   @retval       ResultSuccess                   登録に成功しました。
84   @retval       ResultIpcNotSessionInitialized  セッションが初期化されていないか、権限不適合です。@ref Initialize もしくは @ref InitailizePriviledged の呼び出し前に本関数が呼び出されると、このResultが返ります。BOSSライブラリを利用する際には、必ず初めに@ref Initialize もしくは @ref InitailizePriviledged の呼び出してください。
85   @retval       上記以外                        想定外のエラー(エラー内容については、@ref boss_Result.h を参照)。
86 */
87     nn::Result RegisterPrivateClientCert(const u8* pCertData, size_t certDataSize
88                                         , const u8* pPrivateKeyData, size_t privateKeyDataSize);
89 
90 /*!
91   @brief        タスクをライブラリに登録します。
92                 登録できるタスクの種類は、RawダウンロードタスクとNSAダウンロードタスクの2種類があります。
93                 タスク登録には、@ref TaskPolicy クラス、TaskActionクラスのサブクラスの @ref DownloadAction クラスまたは、@ref NsaDownloadActionクラス、
94                 省略可能な @ref TaskOptionタスクを用意する必要があります。設定が必要な属性は、各クラスを参照してください。
95                 タスクを登録が終わった後は、それぞれのインスタンスは、必要に応じ Initilize() を行うことにより再利用ができます。
96                 なお、登録したタスクは、@ref Task クラスのStart()を呼び出すことによって、スケジューリング・実行がされます。
97          <BR>
98                 よくあるタスク登録時のエラーについて <BR>
99                 ①NSAダウンロードタスクの登録でストレージが未登録の場合 <BR>
100                   @ref ResultStorageNotFound <BR>
101                   @ref RegisterStorage でNSAダウンロードタスク用のストレージを登録してください。
102                 ②すでに同名のタスクが登録済である場合 <BR>
103                   @ref ResultTaskIdAlreadyExist <BR>
104                   @ref UnregisterTask で該当のタスクを削除するか、すでに登録されているタスクを再利用してください。
105                 ③削除可能なタスクを削除してもデータベースに空きがないためタスク登録ができない場合 <BR>
106                   @ref ResultDatabaseFull <BR>
107                   消尽回数がゼロのタスクは、空きがない場合、自動削除されますが、消尽回数がゼロでないタスクは、削除されません。
108                   削除可能なタスクを @ref UnregisterTask で削除してから再度登録をしてください。
109          <BR>
110   @param[in]    pTask           タスク名を指定したタスクを指定します。最大7文字の名前を使用できます。
111   @param[in]    pPolicy         タスクポリシーを指定します。
112   @param[in]    pAction         タスクアクションを指定します。 (現在、@ref NsaDownloadAction または、 @ref DownloadActionを指定可)
113   @param[in]    pOption         タスクオプションを指定します。(省略可能)
114   @param[in]    taskStep        タスクステップのIDを指定します。 (1つのタスク実行ステップしかない場合は、省略可)
115   @return       関数の実行結果を返します。以下に挙げる Result を返します。
116   @retval       ResultSuccess                       登録に成功しました。
117   @retval       ResultInvalidTaskId                 タスクIDのポインタがNULLまたは0文字列です。
118   @retval       ResultInvalidPolicy                 ポリシィ情報のポインタがNULLです。
119   @retval       ResultInvalidAction                 タスクアクションのポインタがNULLです。
120   @retval       ResultInvalidTaskPriolity           タスクプライオリティの指定が範囲外です。@ref TaskPriority の範囲か確認してください。
121   @retval       ResultTaskPermissionOutOfRange      タスク許可情報が範囲外です。@ref TaskPermission の範囲か確認してください。
122   @retval       ResultSchedulingPolicyOutOfRange    スケジュールポリシィが範囲外です。@ref SchedulingPolicy の範囲か確認してください。
123   @retval       ResultInvalidTaskTargetDuration     タスク継続時間が範囲外です。(将来的な拡張用です)
124   @retval       ResultActionCodeOutOfRange          タスクアクションコードが範囲外です。@ref Action の範囲か確認してください。
125   @retval       ResultInvalidUrl                    URL文字列のポインタがNULLまたは0文字列です。
126   @retval       ResultApInfoTypeOutOfRange          AP情報タイプが範囲外です。@ref ApInfoType の範囲か確認してください。
127   @retval       ResultInvalidFilePath               ファイルパス文字列のポインタがNULLまたは0文字列です。
128   @retval       ResultInvalidOption                 タスクオプションのポインタがNULL,またはoptionコードが範囲外です。@ref ExecOption の範囲か確認してください。
129   @retval       ResultStorageNotFound               該当のアプリIDに対応したストレージ登録がされていません。
130   @retval       ResultTaskIdAlreadyExist            既に同名タスクが登録されています。
131   @retval       ResultDatabaseFull                  アプリID・タスク登録数が上限に達し、ストレージ登録やタスク登録ができません。
132   @retval       ResultIpcNotSessionInitialized  セッションが初期化されていないか、権限不適合です。@ref Initialize もしくは @ref InitailizePriviledged の呼び出し前に本関数が呼び出されると、このResultが返ります。BOSSライブラリを利用する際には、必ず初めに@ref Initialize もしくは @ref InitailizePriviledged の呼び出してください。
133   @retval       上記以外                            想定外のエラー(エラー内容については、@ref boss_Result.h を参照)。
134 */
135     nn::Result RegisterTask(Task* pTask, TaskPolicy* pPolicy  , TaskAction* pAction
136                             , TaskOption* pOption=NULL
137                             , u8 taskStep=DEFAULT_STEP_ID);
138 
139 /*!
140   @brief        ライブラリに登録済のタスクを削除します。
141                 実行待ちまたは、実行中のタスクは、削除できませんので、必要に応じて @ref Task クラスのCancel()を呼び出した後、削除をしてください。
142   @param[in]    pTask           登録済のタスクを指定します。
143   @param[in]    taskStep        タスクステップのIDを指定します。(1つのタスク実行ステップしかない場合は、省略可)
144   @return       関数の実行結果を返します。以下に挙げる Result を返します。
145   @retval       ResultSuccess                   削除に成功しました。
146   @retval       ResultInvalidTaskId             タスクIDのポインタがNULLまたは0文字列です。
147   @retval       ResultTaskNotExist              指定されたタスクIDが見つかりません。登録済であるか確認ください。
148   @retval       ResultCantUnregisterTask        タスク状態(たとえば、実行中・スケジュール済み)により、タスクの削除ができません。@ref Task クラスのCancel()を呼び出した後、再度削除をしてください。
149   @retval       ResultIpcNotSessionInitialized  セッションが初期化されていないか、権限不適合です。@ref Initialize もしくは @ref InitailizePriviledged の呼び出し前に本関数が呼び出されると、このResultが返ります。BOSSライブラリを利用する際には、必ず初めに@ref Initialize もしくは @ref InitailizePriviledged の呼び出してください。
150   @retval       上記以外                        想定外のエラー(エラー内容については、@ref boss_Result.h を参照)。
151 */
152     nn::Result UnregisterTask(Task* pTask, u8 taskStep=DEFAULT_STEP_ID);
153 
154 /*!
155   @brief        ライブラリに登録済のタスクのポリシーを更新します。
156   @param[in]    pTask           登録済のタスクを指定します。
157   @param[in]    pPolicy         変更内容が入ったタスクポリシーを指定します。
158   @param[in]    taskStep        タスクステップのIDを指定します。(1つのタスク実行ステップしかない場合は、省略可)
159   @return       関数の実行結果を返します。以下に挙げる Result を返します。
160   @retval       ResultSuccess                       更新に成功しました。
161   @retval       ResultInvalidTaskId                 タスクIDのポインタがNULLまたは0文字列です。
162   @retval       ResultInvalidPolicy                 ポリシィ情報のポインタがNULLです。
163   @retval       ResultInvalidTaskPriolity           タスクプライオリティの指定が範囲外です。@ref TaskPriority の範囲か確認してください。
164   @retval       ResultTaskPermissionOutOfRange      タスク許可情報が範囲外です。@ref TaskPermission の範囲か確認してください。
165   @retval       ResultSchedulingPolicyOutOfRange    スケジュールポリシィが範囲外です。@ref SchedulingPolicy の範囲か確認してください。
166   @retval       ResultInvalidTaskTargetDuration     タスク継続時間が範囲外です。(将来的な拡張用です)
167   @retval       ResultTaskNotExist                  指定されたタスクIDが見つかりません。登録済であるか確認ください。
168   @retval       ResultIpcNotSessionInitialized      セッションが初期化されていないか、権限不適合です。@ref Initialize もしくは @ref InitailizePriviledged の呼び出し前に本関数が呼び出されると、このResultが返ります。BOSSライブラリを利用する際には、必ず初めに@ref Initialize もしくは @ref InitailizePriviledged の呼び出してください。
169   @retval       上記以外                            想定外のエラー(エラー内容については、@ref boss_Result.h を参照)。
170 */
171     nn::Result ReconfigureTask(Task* pTask, TaskPolicy* pPolicy, u8 taskStep=DEFAULT_STEP_ID);
172 
173 /*!
174   @brief        登録済のタスクのID覧取得を取得します。
175                 あらかじめ、@ref TaskIdList クラスのインスタンスを作成しておく必要があります。
176                 また、このインスタンスは、一覧を取得するために1KB程度のメモリを必要としますのでご注意ください。
177   @param[out]   pTaskIdList     タスクID一覧を格納するオブジェクトを指定します。
178   @return       関数の実行結果を返します。以下に挙げる Result を返します。
179   @retval       ResultSuccess                   取得に成功しました。
180   @retval       ResultInvalidTaskIdList         タスクID一覧取得用のポインタがNULLです。
181   @retval       ResultIpcNotSessionInitialized  セッションが初期化されていないか、権限不適合です。@ref Initialize もしくは @ref InitailizePriviledged の呼び出し前に本関数が呼び出されると、このResultが返ります。BOSSライブラリを利用する際には、必ず初めに@ref Initialize もしくは @ref InitailizePriviledged の呼び出してください。
182   @retval       上記以外                        想定外のエラー(エラー内容については、@ref boss_Result.h を参照)。
183 */
184     nn::Result GetTaskIdList(TaskIdList* pTaskIdList);
185 
186 /*!
187   @brief        登録済の指定したタスクの各ステップ一覧を取得します。
188                 あらかじめ、@ref StepIdList クラスのインスタンスを作成しておく必要があります。
189                 また、このインスタンスは、一覧を取得するために256B程度のメモリを必要としますのでご注意ください。
190   @param[in]    pTaskId         登録済のタスクを指定します。
191   @param[out]   pStepIdList     タスクステップID一覧を格納するオブジェクトを指定します。
192   @return       関数の実行結果を返します。以下に挙げる Result を返します。
193   @retval       ResultSuccess                   取得に成功しました。
194   @retval       ResultInvalidTaskId             タスクIDのポインタがNULLまたは0文字列です。
195   @retval       ResultInvalidStepIdList         ステップID一覧取得用のポインタがNULLです。
196   @retval       ResultAppNotExist               タスク、ストレージおよび、独自証明書のいずれも登録がされていない場合に発生します。
197   @retval       ResultTaskNotExist              指定されたタスクIDが見つかりません。
198   @retval       ResultIpcNotSessionInitialized  セッションが初期化されていないか、権限不適合です。@ref Initialize もしくは @ref InitailizePriviledged の呼び出し前に本関数が呼び出されると、このResultが返ります。BOSSライブラリを利用する際には、必ず初めに@ref Initialize もしくは @ref InitailizePriviledged の呼び出してください。
199   @retval       上記以外                        想定外のエラー(エラー内容については、@ref boss_Result.h を参照)。
200 */
201     nn::Result GetStepIdList(const char* pTaskId, StepIdList* pStepIdList);
202 
203 /*!
204   @brief        NSAタスクなどでBOSSDが利用するBOSSストレージを登録します。<BR/>
205                 登録に先立ち、あらかじめ、拡張セーブデータ領域を作成する必要があります。
206                 このとき、size で指定する使用可能な合計サイズが確保できる容量を確保ください。
207                 また、格納したいシリアルの総数以上のファイル数を指定して作成が必要になります。
208                 アプリケーションがアクセス権を持たない拡張セーブデータIDを指定した場合は、エラーが返ります。
209                 この登録をしないと、NSデータは、ダウンロードされません。<BR/>
210         <BR/>
211                 1)アプリがタスク登録しないが、NSデータを取得したい場合<BR/>
212                   この登録をしておくと、管理者がダウンロードしたNSAフォーマットの中に
213                   アプリ宛のNSデータがあれば、自動的に登録済ストレージにコピーしてもらえます。<BR/>
214         <BR/>
215                 2)アプリがタスク登録して、アプリ宛のNSデータをダウンロードしたい場合<BR/>
216                   この登録をして、タスク登録・実行すると、タスク登録時のストレージにアプリ宛のNSデータをダウンロードできます。
217                   また、1)と同様に、管理者がダウンロードしたNSAフォーマットの中に<BR/>
218                   アプリ宛のNSデータがあれば、自動的に登録済ストレージにコピーしてもらえます。<BR/>
219         <BR/>
220                 3)他のアプリのNSデータを共有したい場合<BR/>
221                   他のアプリと同じストレージ領域を登録を行っておくと、<BR/>
222                   他のアプリ宛にダウンロードされたNSデータを取得できます。<BR/>
223                   また、自分宛のNSデータをダウンロードした場合も、他のアプリからも取得が可能になります。<BR/>
224                   この操作については、@ref GetNsDataIdList @ref GetNewDataNsDataIdList を参照ください。<BR/>
225         <BR/>
226                 NSデータのダウンロード時に、領域サイズが不足して最大の合計サイズに収まらない場合、
227                 シリアルIDが古い(小さな値のID)が自動削除されます。
228                 この機能により合計サイズを最大データサイズ以下保ちますが、削除しても入りきらない場合はエラーとなりますので、適切な容量を設定ください。
229   @param[in]    storageId       ストレージ(追加データ)の識別子を指定します。
230   @param[in]    size            ストレージ領域内で使用可能な最大の合計サイズを指定します。
231   @param[in]    storageType     ストレージ領域の種類を指定します。(通常はデフォルトの「ユーザ拡張セーブデータ領域のBOSSストレージ」を使用するので、省略してください。)
232   @return       関数の実行結果を返します。以下に挙げる Result を返します。
233   @retval       ResultSuccess                   登録に成功しました。
234   @retval       ResultStorageAccessPermission   ストレージのアクセス権がありません。アクセス権の再確認をしてください。
235   @retval       ResultIpcNotSessionInitialized  セッションが初期化されていないか、権限不適合です。@ref Initialize もしくは @ref InitailizePriviledged の呼び出し前に本関数が呼び出されると、このResultが返ります。BOSSライブラリを利用する際には、必ず初めに@ref Initialize もしくは @ref InitailizePriviledged の呼び出してください。
236   @retval       上記以外                        想定外のエラー(エラー内容については、@ref boss_Result.h を参照)。
237 */
238     nn::Result RegisterStorage(bit32 storageId, size_t size, nn::boss::StorageType storageType=nn::boss::USER_EXT_SAVEDATA_STORAGE);
239 
240 /*!
241   @brief        登録済のBOSSストレージを削除します。
242   @return       関数の実行結果を返します。以下に挙げる Result を返します。
243   @retval       ResultSuccess                   削除に成功しました。
244   @retval       ResultStorageNotFound           該当のアプリIDに対応したストレージ登録がされていません。ストレージ登録が済んでいるか確認ください。
245   @retval       ResultIpcNotSessionInitialized  セッションが初期化されていないか、権限不適合です。@ref Initialize もしくは @ref InitailizePriviledged の呼び出し前に本関数が呼び出されると、このResultが返ります。BOSSライブラリを利用する際には、必ず初めに@ref Initialize もしくは @ref InitailizePriviledged の呼び出してください。
246   @retval       上記以外                        想定外のエラー(エラー内容については、@ref boss_Result.h を参照)。
247 */
248     nn::Result UnregisterStorage(void);
249 
250 
251 /*!
252   @brief        登録済のBOSSストレージの領域サイズを取得します。ストレージ登録が済んでいるか確認できます。
253   @param[out]   pStorageSize    BOSSストレージの領域サイズが返ります。(省略可)
254   @return       関数の実行結果を返します。以下に挙げる Result を返します。
255   @retval       ResultSuccess                   取得に成功しました。
256   @retval       ResultStorageNotFound           該当のアプリIDに対応したストレージ登録がされていません。ストレージ登録が済んでいるか確認ください。
257   @retval       ResultIpcNotSessionInitialized  セッションが初期化されていないか、権限不適合です。@ref Initialize もしくは @ref InitailizePriviledged の呼び出し前に本関数が呼び出されると、このResultが返ります。BOSSライブラリを利用する際には、必ず初めに@ref Initialize もしくは @ref InitailizePriviledged の呼び出してください。
258   @retval       上記以外                        想定外のエラー(エラー内容については、@ref boss_Result.h を参照)。
259 */
260     nn::Result GetStorageInfo(size_t* pStorageSize=NULL);
261 
262 
263 /*!
264   @brief        ダウンロードされた新着NSコンテンツがあるか確認します。但し、新着フラグを立てないNSデータをダウンロードした場合は、新着フラグは変化しません。
265                 ストレージを共有していない場合、GetNewDataNsDataIdList でNSデータ一覧取得ができます。
266                 ストレージ共有している場合、GetOwnNewDataNsDataIdList で自分のアプリ宛のみのNSデータ一覧取得ができます。
267                 上記の一覧取得を行うとこの新着フラグは落ちます。
268   @param[out]   pFlag           新着NSコンテンツがあればtrueが返ります。
269   @return       関数の実行結果を返します。以下に挙げる Result を返します。
270   @retval       ResultSuccess                   取得に成功しました。
271   @retval       ResultInvalidNewArrivalFlag     新着フラグのポインタがNULLです。
272   @retval       ResultStorageNotFound           該当のアプリIDに対応したストレージ登録がされていません。ストレージ登録が済んでいるか確認ください。
273   @retval       ResultIpcNotSessionInitialized  セッションが初期化されていないか、権限不適合です。@ref Initialize もしくは @ref InitailizePriviledged の呼び出し前に本関数が呼び出されると、このResultが返ります。BOSSライブラリを利用する際には、必ず初めに@ref Initialize もしくは @ref InitailizePriviledged の呼び出してください。
274   @retval       上記以外                        想定外のエラー(エラー内容については、@ref boss_Result.h を参照)。
275 */
276     nn::Result GetNewArrivalFlag(bool* pFlag);
277 
278 /*!
279   @brief        新着NSコンテンツがあった場合にシグナルされるイベントを登録します。
280                 初期化したnn::os::Eventのインスタンスを登録してください。
281                 なお、NSデータをダウンロードしてもバージョンが新しくなっていないと、NSデータが更新されないため、
282                 本イベントは、シグナルされませんので、ご注意ください。
283   @param[in]    event         イベントクラスを指定します。
284   @return       関数の実行結果を返します。以下に挙げる Result を返します。
285   @retval       ResultSuccess                   登録に成功しました。
286   @retval       ResultInvalidNewArrivalFlag     新着フラグのポインタがNULLです。
287   @retval       ResultIpcNotSessionInitialized  セッションが初期化されていないか、権限不適合です。@ref Initialize もしくは @ref InitailizePriviledged の呼び出し前に本関数が呼び出されると、このResultが返ります。BOSSライブラリを利用する際には、必ず初めに@ref Initialize もしくは @ref InitailizePriviledged の呼び出してください。
288   @retval       上記以外                        想定外のエラー(エラー内容については、@ref boss_Result.h を参照)。
289 */
290     nn::Result RegisterNewArrivalEvent(nn::os::Event* event);
291 
292 /*!
293   @brief        @ref nn::boss::RegisterNewArrivalEvent の旧名です。
294                  互換性のために残しているものですので、新規利用は避けてください。
295 */
296     nn::Result GetNewArrivalEvent(nn::os::Event* event) NN_ATTRIBUTE_DEPRECATED;
297 
298 /*!
299   @brief        OptoutFlagを設定します。
300                 このフラグを有効に設定すると、NSAダウンロードタスクの実行時に、管理者用NSデータが受信されても、管理者用ストレージ領域に書き込みません。
301   @param[in]    flag            OptoutFlagを指定します。
302   @return       関数の実行結果を返します。以下に挙げる Result を返します。
303   @retval       ResultSuccess                   設定に成功しました。
304   @retval       ResultStorageNotFound           該当のアプリIDに対応したストレージ登録がされていません。ストレージ登録が済んでいるか確認ください。
305   @retval       ResultIpcNotSessionInitialized  セッションが初期化されていないか、権限不適合です。@ref Initialize もしくは @ref InitailizePriviledged の呼び出し前に本関数が呼び出されると、このResultが返ります。BOSSライブラリを利用する際には、必ず初めに@ref Initialize もしくは @ref InitailizePriviledged の呼び出してください。
306   @retval       上記以外                        想定外のエラー(エラー内容については、@ref boss_Result.h を参照)。
307 */
308     nn::Result SetOptoutFlag(bool flag);
309 
310 /*!
311   @brief        OptoutFlagを取得します。
312   @param[out]   pFlag           OptoutFlagが返ります。
313   @return       関数の実行結果を返します。以下に挙げる Result を返します。
314   @retval       ResultSuccess                   取得に成功しました。
315   @retval       ResultInvalidOptoutFlag         OPTOUTフラグのポインタがNULLです。
316   @retval       ResultStorageNotFound           該当のアプリIDに対応したストレージ登録がされていません。ストレージ登録が済んでいるか確認ください。
317   @retval       ResultIpcNotSessionInitialized  セッションが初期化されていないか、権限不適合です。@ref Initialize もしくは @ref InitailizePriviledged の呼び出し前に本関数が呼び出されると、このResultが返ります。BOSSライブラリを利用する際には、必ず初めに@ref Initialize もしくは @ref InitailizePriviledged の呼び出してください。
318   @retval       上記以外                        想定外のエラー(エラー内容については、@ref boss_Result.h を参照)。
319 */
320     nn::Result GetOptoutFlag(bool* pFlag);
321 
322 /*!
323   @brief        データタイプを指定して、ストレージを登録された拡張セーブ領域からNSコンテンツの一覧を取得します。
324                 すべての一覧が取得できなかった場合は、@ref ER_NSDATA_LIST_SIZE_SHORTAGE が返ります。
325                 また、継続して取得したとき、新たなダウンロードなどで、一覧内容の変更が検出された場合、
326                 @ref ER_NSDATA_LIST_UPDATED が返りますので、先頭から取り直しが必要になります。
327                 この場合は、@ref NsDataIdList のインスタンスを初期化後、本関数を呼び直してください。
328   @param[in]    dataType        データタイプを指定します。 (DATA_TYPE_ALLで全データタイプを指定可)
329   @param[out]   pNsDataId       コンテンツデータ一覧を格納するオブジェクトを指定します。
330   @return       関数の実行結果を返します。以下に挙げる Result を返します。
331   @retval       ResultSuccess                   取得に成功しました。
332   @retval       ResultNsDataListSizeShortage    NsDataIdListのサイズ不足(すべてのNSDシリアルIDを格納できなかった) 継続して全てのNSDシリアルIDを取り終えるまで繰り返し呼び出しててください。
333   @retval       ResultNsDataListUpdated         前回のリスト取得時以降に、BOSSストレージの対象NSD群が更新されました。
334   @retval       ResultInvalidNsDataIdList       NSデータリスト情報のポインタがNULLです。
335   @retval       ResultStorageNotFound           該当のアプリIDに対応したストレージ登録がされていません。ストレージ登録が済んでいるか確認ください。
336   @retval       ResultIpcNotSessionInitialized  セッションが初期化されていないか、権限不適合です。@ref Initialize もしくは @ref InitailizePriviledged の呼び出し前に本関数が呼び出されると、このResultが返ります。BOSSライブラリを利用する際には、必ず初めに@ref Initialize もしくは @ref InitailizePriviledged の呼び出してください。
337   @retval       上記以外                        想定外のエラー(エラー内容については、@ref boss_Result.h を参照)。
338 */
339     nn::Result GetNsDataIdList(u32 dataType, NsDataIdList* pNsDataId);
340 
341 /*!
342   @brief        共有NSデータを除外して、ストレージを登録された拡張セーブ領域から自分宛のNSコンテンツの一覧を取得します。つまり共有NSデータが存在しても、呼び出したアプリ自身のNSデータのみ一覧に含まれます。
343                 すべての一覧が取得できなかった場合は、@ref ER_NSDATA_LIST_SIZE_SHORTAGE が返ります。
344                 また、継続して取得した場合、新たなダウンロードなどで、一覧内容の変更が検出された場合、
345                 @ref ER_NSDATA_LIST_UPDATED が返りますので、取り直しが必要になります。
346                 この場合は、@ref NsDataIdList のインスタンスを初期化後、本関数を呼び直してください。
347   @param[in]    dataType        データタイプを指定します。 (DATA_TYPE_ALLで全データタイプを指定可)
348   @param[out]   pNsDataId       コンテンツデータ一覧を格納するオブジェクトを指定します。
349   @return       関数の実行結果を返します。以下に挙げる Result を返します。
350   @retval       ResultSuccess                   取得に成功しました。
351   @retval       ResultNsDataListSizeShortage    NsDataIdListのサイズ不足(すべてのNSDシリアルIDを格納できなかった) 継続して全てのNSDシリアルIDを取り終えるまで繰り返し呼び出しててください。
352   @retval       ResultNsDataListUpdated         前回のリスト取得時以降に、BOSSストレージの対象NSD群が更新されました。
353   @retval       ResultInvalidNsDataIdList       NSデータリスト情報のポインタがNULLです。
354   @retval       ResultStorageNotFound           該当のアプリIDに対応したストレージ登録がされていません。ストレージ登録が済んでいるか確認ください。
355   @retval       ResultIpcNotSessionInitialized  セッションが初期化されていないか、権限不適合です。@ref Initialize もしくは @ref InitailizePriviledged の呼び出し前に本関数が呼び出されると、このResultが返ります。BOSSライブラリを利用する際には、必ず初めに@ref Initialize もしくは @ref InitailizePriviledged の呼び出してください。
356   @retval       上記以外                        想定外のエラー(エラー内容については、@ref boss_Result.h を参照)。
357 */
358     nn::Result GetOwnNsDataIdList(u32 dataType, NsDataIdList* pNsDataId);
359 
360 /*!
361   @brief        データタイプを指定して、ストレージを登録された拡張セーブ領域からNS新着コンテンツの一覧を取得します。
362                 この操作で、すべての一覧を取得すると、新着フラグは落ちます。
363                 すべての一覧が取得できなかった場合は、@ref ER_NSDATA_LIST_SIZE_SHORTAGE が返ります。
364                 また、継続して取得した場合、新たなダウンロードなどで、一覧内容の変更が検出された場合、
365                 @ref ER_NSDATA_LIST_UPDATED が返りますので、取り直しが必要になります。
366                 この場合は、@ref NsDataIdList のインスタンスを初期化後、本関数を呼び直してください。
367   @param[in]    dataType        データタイプを指定します。 (DATA_TYPE_ALLで全データタイプを指定可)
368   @param[out]   pNsDataId       コンテンツデータ一覧を格納するオブジェクトを指定します。
369   @return       関数の実行結果を返します。以下に挙げる Result を返します。
370   @retval       ResultSuccess                   取得に成功しました。
371   @retval       ResultNsDataListSizeShortage    NsDataIdListのサイズ不足(すべてのNSDシリアルIDを格納できなかった) 継続して全てのNSDシリアルIDを取り終えるまで繰り返し呼び出しててください。
372   @retval       ResultNsDataListUpdated         前回のリスト取得時以降に、BOSSストレージの対象NSD群が更新されました。
373   @retval       ResultInvalidNsDataIdList       NSデータリスト情報のポインタがNULLです。
374   @retval       ResultStorageNotFound           該当のアプリIDに対応したストレージ登録がされていません。ストレージ登録が済んでいるか確認ください。
375   @retval       ResultIpcNotSessionInitialized  セッションが初期化されていないか、権限不適合です。@ref Initialize もしくは @ref InitailizePriviledged の呼び出し前に本関数が呼び出されると、このResultが返ります。BOSSライブラリを利用する際には、必ず初めに@ref Initialize もしくは @ref InitailizePriviledged の呼び出してください。
376   @retval       上記以外                        想定外のエラー(エラー内容については、@ref boss_Result.h を参照)。
377 */
378     nn::Result GetNewDataNsDataIdList(u32 dataType, NsDataIdList* pNsDataId);
379 
380 /*!
381   @brief        共有NSデータを除外して、ストレージを登録された拡張セーブ領域から自分宛のNS新着コンテンツの一覧を取得します。つまり共有NSデータが存在しても、呼び出したアプリ自身のNSデータのみ一覧に含まれます。
382                 この操作で、すべての一覧を取得すると、新着フラグは落ちます。
383                 すべての一覧が取得できなかった場合は、@ref ER_NSDATA_LIST_SIZE_SHORTAGE が返ります。
384                 また、継続して取得した場合、新たなダウンロードなどで、一覧内容の変更が検出された場合、
385                 @ref ER_NSDATA_LIST_UPDATED が返りますので、取り直しが必要になります。
386                 この場合は、@ref NsDataIdList のインスタンスを初期化後、本関数を呼び直してください。
387   @param[in]    dataType        データタイプを指定します。 (DATA_TYPE_ALLで全データタイプを指定可)
388   @param[out]   pNsDataId       コンテンツデータ一覧を格納するオブジェクトを指定します。
389   @return       関数の実行結果を返します。以下に挙げる Result を返します。
390   @retval       ResultSuccess                   取得に成功しました。
391   @retval       ResultNsDataListSizeShortage    NsDataIdListのサイズ不足(すべてのNSDシリアルIDを格納できなかった) 継続して全てのNSDシリアルIDを取り終えるまで繰り返し呼び出しててください。
392   @retval       ResultNsDataListUpdated         前回のリスト取得時以降に、BOSSストレージの対象NSD群が更新されました。
393   @retval       ResultInvalidNsDataIdList       NSデータリスト情報のポインタがNULLです。
394   @retval       ResultStorageNotFound           該当のアプリIDに対応したストレージ登録がされていません。ストレージ登録が済んでいるか確認ください。
395   @retval       ResultIpcNotSessionInitialized  セッションが初期化されていないか、権限不適合です。@ref Initialize もしくは @ref InitailizePriviledged の呼び出し前に本関数が呼び出されると、このResultが返ります。BOSSライブラリを利用する際には、必ず初めに@ref Initialize もしくは @ref InitailizePriviledged の呼び出してください。
396   @retval       上記以外                        想定外のエラー(エラー内容については、@ref boss_Result.h を参照)。
397 */
398     nn::Result GetOwnNewDataNsDataIdList(u32 dataType, NsDataIdList* pNsDataId);
399 
400 
401 } // end of namespace boss
402 } // end of namespace nn
403 
404 #endif // __cplusplus
405 
406 #endif /* NN_BOSS_BOSS_LIB_H_ */
407