1 /*---------------------------------------------------------------------------*
2   Project:  Horizon
3   File:     boss_Task.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: 34507 $
14  *---------------------------------------------------------------------------*/
15 
16 #ifndef NN_BOSS_BOSS_TASK_H_
17 #define NN_BOSS_BOSS_TASK_H_
18 
19 #include <nn/fnd/fnd_TimeSpan.h>
20 #include <nn/boss/boss_Const.h>
21 #include <nn/boss/boss_Result.h>
22 #include <nn/boss/boss_Types.h>
23 #include <nn/boss/boss_TaskAction.h>
24 #include <nn/boss/boss_TaskPolicy.h>
25 #include <nn/boss/boss_TaskStatus.h>
26 #include <nn/boss/boss_TaskError.h>
27 #include <nn/boss/boss_TaskOption.h>
28 
29 
30 #ifdef __cplusplus
31 
32 namespace nn {
33 namespace boss {
34 
35 /*!
36   @brief        タスクを表すクラスです。タスクの登録や登録解除、タスクの操作の際などに利用します。
37 */
38 class Task
39 {
40 public:
41 /*!
42   @brief        コンストラクタです。
43 */
44     explicit Task(void);
45 
46 /*!
47   @brief        デストラクタです。
48 */
49     virtual ~Task(void);
50 
51 /*!
52   @brief        タスク登録済のタスクIDを指定して初期化します。この初期化によってオブジェクトの再利用が可能になります。
53 
54   @param[in]    pTaskId         タスクIDを指定します。 TaskId[TASK_ID_LENGTH]
55   @return       関数の実行結果を返します。以下に挙げる Result を返します。
56   @retval       ResultSuccess           初期化に成功しました。
57   @retval       ResultInvalidTaskId     タスクIDのポインタがNULLまたは0文字列です。
58   @retval       上記以外                想定外のエラー(エラー内容については、@ref boss_Result.h を参照)。
59 */
60     nn::Result Initialize(const char* pTaskId);
61 
62 /*!
63   @brief        タスク登録後、実行間隔を更新します。タスクの実行開始指示後でも変更が可能です。
64 
65                 有効な実行間隔は、1~3時間です。
66 
67   @param[in]    interval        実行間隔を指定します。単位は時間です。
68   @return       関数の実行結果を返します。以下に挙げる Result を返します。
69   @retval       ResultSuccess                   実行間隔の更新に成功しました。
70   @retval       ResultInvalidTaskId             タスクIDのポインタがNULLまたは0文字列です。
71   @retval       ResultTaskNotExist              指定されたタスクIDが見つかりません。登録済であるか確認ください。
72   @retval       ResultIpcNotSessionInitialized  セッションが初期化されていません。@ref Initialize の呼び出し前に本関数が呼び出されると、このResultが返ります。BOSSライブラリを利用する際には、必ず初めに@ref Initialize を呼び出してください。
73   @retval       上記以外                        想定外のエラー(エラー内容については、@ref boss_Result.h を参照)。
74 */
UpdateInterval(u32 interval)75     inline nn::Result UpdateInterval(u32 interval){return UpdateIntervalWithSec(interval*60*60);}
76 
77 /*!
78   @brief        タスク登録後、実行間隔を更新します。単位は秒です。タスクの実行開始指示後でも変更が可能です。
79 
80   @param[in]    intervalSec        実行間隔を指定します。単位は秒です。
81   @return       関数の実行結果を返します。以下に挙げる Result を返します。
82   @retval       ResultSuccess                   実行間隔の更新に成功しました。
83   @retval       ResultInvalidTaskId             タスクIDのポインタがNULLまたは0文字列です。
84   @retval       ResultTaskNotExist              指定されたタスクIDが見つかりません。登録済であるか確認ください。
85   @retval       ResultIpcNotSessionInitialized  セッションが初期化されていません。@ref Initialize の呼び出し前に本関数が呼び出されると、このResultが返ります。BOSSライブラリを利用する際には、必ず初めに@ref Initialize を呼び出してください。
86   @retval       上記以外                        想定外のエラー(エラー内容については、@ref boss_Result.h を参照)。
87 */
88     nn::Result UpdateIntervalWithSec(u32 intervalSec);
89 
90 /*!
91   @brief  タスク登録後、消尽回数を更新します。タスクの実行開始指示後でも変更が可能です。
92 
93   @param[in]    count           実行回数を指定します。
94   @return       関数の実行結果を返します。以下に挙げる Result を返します。
95   @retval       ResultSuccess                   消尽回数の更新に成功しました。
96   @retval       ResultInvalidTaskId             タスクIDのポインタがNULLまたは0文字列です。
97   @retval       ResultTaskNotExist              指定されたタスクIDが見つかりません。登録済であるか確認ください。
98   @retval       ResultIpcNotSessionInitialized  セッションが初期化されていません。@ref Initialize の呼び出し前に本関数が呼び出されると、このResultが返ります。BOSSライブラリを利用する際には、必ず初めに@ref Initialize を呼び出してください。
99   @retval       上記以外                        想定外のエラー(エラー内容については、@ref boss_Result.h を参照)。
100 */
101     nn::Result UpdateCount(u32 count);
102 
103 /*!
104   @brief        実行間隔を取得します。単位は時間です。タスクの実行開始指示後でも変更が可能です。
105 
106   @retval       実行間隔が返ります。<BR>
107 */
GetInterval(void)108     inline u32 GetInterval(void)
109     {
110         const u32 intervalSec = GetIntervalSec();
111         if(intervalSec > 0)
112         {
113             return (intervalSec / (60*60));
114         }
115         else
116         {
117             return 0;
118         }
119     }
120 
121 /*!
122   @brief        実行間隔を取得します。単位は秒です。
123 
124   @retval       実行間隔が返ります。<BR>
125 */
126     u32 GetIntervalSec(void);
127 
128 /*!
129   @brief        消尽回数を取得します。
130 
131   @return       消尽回数が返ります。<BR>
132   @retval       U32_CANNOT_GET_DATA データが取得できません。
133 */
134     u32 GetCount(void);
135 
136 /*!
137   @brief        タスクのサービスステータス取得します。
138 
139                 サービスステータスは、サーバからサービス終了の通知を検出した場合、そのステータスを確認できます。
140                 但し、タスク登録後、一度もサーバへアクセスしていない状態では、@ref SERVICE_UNKNOWN となりますので、ご注意ください。
141 
142   @return       タスクのサービスステータスが返ります。<BR>
143 */
144     TaskServiceStatus GetServiceStatus(void);
145 
146 /*!
147   @brief        タスクの開始指示します。
148 
149                 インフラ接続可能な状態になると、スケジューリングされたタスクがバックグラウンドで自動実行されます。
150                 タスクの実行が終了すると、実行結果がエラーかどうかに関わらず、タスクの属性で指定した消尽回数が1差し引かれます。
151                 その結果、消尽回数がゼロでない限り、タスクの属性で指定しました実行間隔時間後に、再度タスクが実行されます。
152                 なお、消尽回数がゼロになったタスクは、内部データベースの容量の上限に達した場合、自動的に削除されることがありますので、ご注意ください。
153                 以下の場合は、タスク開始指示を行ってもタスク実行のスケジューリングされませんので、ご注意ください。
154                 ・消尽回数がゼロのタスク<BR>
155                 ・タスクの実行優先順位が@ref PRIORITY_STOPPED のタスク<BR>
156                 ・ペアレンタルコントロールが有効で、タスク属性でペアレンタルコントロールの解除がされていない場合<BR>
157                 ・EULA同意がされていない状態で、タスク属性でEULA同意の解除がされていない場合<BR>
158                 ・ゾーンAPからダウンロードされたポリシーリストで、タスク実行が停止された場合<BR>
159                 ・ダウンロードサービスを行うサーバからサービス停止の提示されていた場合<BR>
160                 ・管理者が全タスクを一時的に停止中の場合<BR>
161                 良くあるケースの確認方法として、消尽回数の確認は、@ref GetCount 関数によって可能です。
162                 ペアレンタルコントロールおよび、EULA同意については、Configツールなどで設定が可能です。
163                 管理者が全タスクを一時的に停止した場合、実行中のタスクについては、@ref GetState 関数によって @ref TASK_PAUSED が返されますので識別が可能です。
164          <BR>
165                 タスク完了待機の方法は、下記のような方法があります。
166                 ・@ref WaitFinish 関数による実行完了を待つ方法
167                 ・最大の時間待ち時間を指定して @ref WaitFinish 関数による実行完了を待つ方法
168                 ・@ref GetState 関数による実行完了タスク状態のポーリングも使用可能
169                 ・@ref RegisterNewArrivalEvent 関数で登録した Event による新着イベント待ちを方法
170                 なお、完了を検知後、@ref GetState でタスクの状態、@ref GetResult でタスクの実行結果コード、
171                 @ref GetHttpStatusCode でhttp通信の結果コードが確認できます。
172                 なお、その他詳細情報は、@ref GetStateDetail で取得可能です。
173          <BR>
174 
175   @return       関数の実行結果を返します。以下に挙げる Result を返します。
176   @retval       ResultSuccess                   タスクの開始指示に成功しました。
177   @retval       ResultInvalidTaskId             タスクIDのポインタがNULLまたは0文字列です。
178   @retval       ResultTaskNotExist              指定されたタスクIDが見つかりません。登録済であるか確認ください。
179   @retval       ResultIpcNotSessionInitialized  セッションが初期化されていません。@ref Initialize の呼び出し前に本関数が呼び出されると、このResultが返ります。BOSSライブラリを利用する際には、必ず初めに@ref Initialize を呼び出してください。
180   @retval       上記以外                        想定外のエラー(エラー内容については、@ref boss_Result.h を参照)。
181 */
182     nn::Result Start(void);
183 
184 /*!
185   @brief        タスクの即時開始指示します。あらかじめ、インフラ接続可能な状態にした後に呼び出す必要があります。
186 
187                 スケジュールされた時間に先駆けタスク実行が可能になりますので、バックグラウンドで動作するタスクを必要応じて即実行する用途に向いています。
188                 この即時開始指示を行いますと、実行中の他のタスクがあった場合でも、そのタスクを中断して最優先で対象のタスクを実行することができます。
189                 @ref Start との違いは、すでに実行時刻がきている状態である点、通信が中断した場合は、リジューム状態には至らず、タスク実行結果がエラーとなります。
190                 また、注意点として、対象のタスクのみ1回だけ実行したい場合は、消尽回数を「1」に設定をしてください。
191                 「1」以上設定しますと通常のタスクと同じように消尽回数がゼロになるまでバックグラウンドでタスクが自動実行されます。
192                 インフラ接続可能にするためには、nn::ac::Connect()を参照ください。
193 
194   @return       関数の実行結果を返します。以下に挙げる Result を返します。
195   @retval       ResultSuccess                   タスクの即時開始指示に成功しました。
196   @retval       ResultInvalidTaskId             タスクIDのポインタがNULLまたは0文字列です。
197   @retval       ResultTaskNotExist              指定されたタスクIDが見つかりません。登録済であるか確認ください。
198   @retval       ResultIpcNotSessionInitialized  セッションが初期化されていません。@ref Initialize の呼び出し前に本関数が呼び出されると、このResultが返ります。BOSSライブラリを利用する際には、必ず初めに@ref Initialize を呼び出してください。
199   @retval       上記以外                        想定外のエラー(エラー内容については、@ref boss_Result.h を参照)。
200 */
201     nn::Result StartImmediate(void);
202 
203 /*!
204   @brief        タスクの実行中止指示します。
205 
206                 一度中止指示を行ったタスクは、@ref Start で再度開始指示ができます。
207                 中止状態のタスクは、@ref GetState 関数を呼び出すとタスクの状態として @ref TASK_STOPPED が返ります。
208                 対象のタスクが実行中であった場合は、タスクの実行は中止され、タスクの実行結果として @ref TASK_CANCELED が返ります。
209 
210   @return       関数の実行結果を返します。以下に挙げる Result を返します。
211   @retval       ResultSuccess                   タスクの実行中止指示に成功しました。
212   @retval       ResultInvalidTaskId             タスクIDのポインタがNULLまたは0文字列です。
213   @retval       ResultTaskNotExist              指定されたタスクIDが見つかりません。登録済であるか確認ください。
214   @retval       ResultIpcNotSessionInitialized  セッションが初期化されていません。@ref Initialize の呼び出し前に本関数が呼び出されると、このResultが返ります。BOSSライブラリを利用する際には、必ず初めに@ref Initialize を呼び出してください。
215   @retval       上記以外                        想定外のエラー(エラー内容については、@ref boss_Result.h を参照)。
216 */
217     nn::Result Cancel(void);
218 
219 /*!
220   @brief        指定時間内にタスクの完了待ちを行います。タイムアウト機能がついた、@ref WaitFinish です。
221 
222                 URLの更新日時が以前と同じ日時の場合、ダウンロードはされずタスクの完了にはなりませんので、ご注意ください。
223 
224   @param[in]    timeout      タイムアウト時間を指定します。
225   @return       関数の実行結果を返します。以下に挙げる Result を返します。
226   @retval       ResultSuccess                   @ref TASK_DONE または、@ref TASK_ERROR でタスクが完了しました。
227   @retval       ResultWaitFinishTaskNotDone     タスクの開始指示されていないか(@ref TASK_REGISTERED 状態)、タスク実行が停止中(@ref TASK_STOPPED 状態)です。再度タスクの開始指示を行ってからタスクの完了待ちをしてください。
228   @retval       ResultWaitFinishTimeout         WaitFinish関数でタイムアウトになりました。再度完了待ちを行うなどの対応を行ってください。
229   @retval       ResultInvalidTaskId             タスクIDのポインタがNULLまたは0文字列です。
230   @retval       ResultTaskNotExist              指定されたタスクIDが見つかりません。登録済であるか確認ください。
231   @retval       ResultIpcNotSessionInitialized  セッションが初期化されていません。@ref Initialize の呼び出し前に本関数が呼び出されると、このResultが返ります。BOSSライブラリを利用する際には、必ず初めに@ref Initialize を呼び出してください。
232   @retval       上記以外                        想定外のエラー(エラー内容については、@ref boss_Result.h を参照)。
233 */
234     nn::Result WaitFinish(const nn::fnd::TimeSpan& timeout);
235 
236 /*!
237   @brief        タスクの完了待ち指示します。
238 
239                 URLの更新日時が以前と同じ日時の場合、ダウンロードはされずタスクの完了にはなりませんので、ご注意ください。
240 
241   @return       関数の実行結果を返します。以下に挙げる Result を返します。
242   @retval       ResultSuccess                   @ref TASK_DONE または、@ref TASK_ERROR でタスクが完了しました。
243   @retval       ResultWaitFinishTaskNotDone     タスクの開始指示されていないか(@ref TASK_REGISTERED 状態)、タスク実行が停止中(@ref TASK_STOPPED 状態)です。再度タスクの開始指示を行ってからタスクの完了待ちをしてください。
244   @retval       ResultInvalidTaskId             タスクIDのポインタがNULLまたは0文字列です。
245   @retval       ResultTaskNotExist              指定されたタスクIDが見つかりません。登録済であるか確認ください。
246   @retval       ResultIpcNotSessionInitialized  セッションが初期化されていません。@ref Initialize の呼び出し前に本関数が呼び出されると、このResultが返ります。BOSSライブラリを利用する際には、必ず初めに@ref Initialize を呼び出してください。
247   @retval       上記以外                        想定外のエラー(エラー内容については、@ref boss_Result.h を参照)。
248 */
249     nn::Result WaitFinish(void);
250 
251 /*!
252   @brief        タスク状態の取得します。
253 
254                 通常、タスクの状態は、下記の①から⑤までを遷移します。
255                 ①TASK_REGISTERED(登録済み)<BR>
256                 ②TASK_WAITING_TIMER(Start()後、時間待ち)<BR>
257                 ③TASK_WAITING(実行待ち)<BR>
258                 ④TASK_RUNNINGまたは、TASK_RETRY(実行中)<BR>
259                 ⑤TASK_DONEまたは、TASK_ERROR(実行終了状態)<BR>
260                 特殊な状態として、TASK_PAUSED(一時停止中)、TASK_STOPPED(Cancel()による停止中)があります。
261                 また、短時間で状態が変わる場合もあり、すべての状態を捕捉できない場合があることにご注意ください。
262 
263   @param[in]    acknowledge  タスク実行が終わると、実行結果を確認できるように実行終了状態を保持します。
264                              このフラグをtrueにして呼び出しますと、実行終了状態を保持を解除します。
265                              仮に消尽回数がゼロでないタスクの場合は、前回のタスク実行完了直後に再スケジューリングされますので、
266                              次回の返り値は、@ref TASK_WAITING_TIMER に切り替わることになります。 (省略可能)
267   @param[out]   pCount       消尽回数が返ります。 (省略可能)
268   @param[out]   pStepID      タスクステップIDが返ります。(省略可能)
269   @return       タスクの状態を示すコードが返ります。<BR>
270 */
271     TaskStateCode GetState(bool acknowledge=false, u32* pCount=NULL, u8* pStepID=NULL);
272 
273 /*!
274   @brief        通信エラーコードを取得します。
275 
276                 下記は、よくあるhttp通信におけるレスポンスコードの例です。<BR>
277                 200	正常なhttp通信結果です。<BR>
278                 206	正常なhttp通信結果ですが、まだ継続データがある状態です。<BR>
279                 401	Basic認証結果が正しくありません。Basic認証には対応していませんので、使用しないでください。<BR>
280                 404	URLコンテンツが見つかりません。URLが正しいか、コンテンツが削除されていないか確認ください。<BR>
281                 403	アクセスが認められていないURLが指定されました。URLが正しいか確認ください。<BR>
282                 500	サーバ側の問題でエラーが発生しました。サーバの運用者に連絡ください。<BR>
283 
284   @param[out]   pCount       消尽回数が返ります。 (省略可能)
285   @param[out]   pStepID      タスクステップIDが返ります。(省略可能)
286   @return       通信エラーコードが返ります。<BR>
287         @retval U32_CANNOT_GET_DATA データが取得できません。
288 */
289     u32 GetHttpStatusCode(u32* pCount=NULL, u8* pStepID=NULL);
290 
291 /*!
292   @brief        @ref nn::boss::GetHttpStatusCode の旧名です。
293                  互換性のために残しているものですので、新規利用は避けてください。
294 */
295     u32 GetCommErrorCode(u32* pCount=NULL, u8* pStepID=NULL) NN_ATTRIBUTE_DEPRECATED;
296 
297 /*!
298   @brief        タスク結果コードを取得します。
299 
300                 タスク結果コードについては、@ref TaskResultCode を参照してください。
301          <BR>
302                 よくあるタスク実行中のエラーについて <BR>
303                 ①インフラ通信が切断された場合 <BR>
304                   @ref HTTP_ERROR_RECV <BR>
305                   @ref HTTP_ERROR_CONNECT <BR>
306                 ②サーバへの接続が失敗した場合(URLが示すサーバが見つからない場合) <BR>
307                   @ref HTTP_ERROR_DNS <BR>
308                   @ref HTTP_ERROR_CONNECT <BR>
309                 ③サーバへの接続が失敗した場合(HTTPSのネゴシエーションに失敗した場合) <BR>
310                   @ref SSL_ERROR_FAILED <BR>
311                   @ref SSL_ERROR_VERIFY_COMMON_NAME <BR>
312                   @ref SSL_ERROR_VERIFY_ROOT_CA <BR>
313                   @ref SSL_ERROR_VERIFY_CHAIN <BR>
314                   @ref SSL_ERROR_VERIFY_DATE <BR>
315                 ④NSAダウンロードが失敗した場合( NSAストレージ領域が不足した場合)<BR>
316                   @ref NSA_ERROR_STORAGE_INSUFFICIENCY <BR>
317                 ⑤NSAダウンロードが失敗した場合( NSAフォーマット以外か、通信エラーで内容が壊れたファイルをダウンロードした場合)<BR>
318                   @ref NSA_ERROR_INVALID_FORMAT <BR>
319                   @ref NSA_ERROR_VERIFY_HASH <BR>
320                   @ref NSA_ERROR_VERIFY_SIGNATURE <BR>
321                   @ref NSA_NSD_ERROR_VERIFY_HASH <BR>
322                   @ref NSA_NSD_ERROR_VERIFY_SIGNATURE <BR>
323                   @ref NSA_NSD_ERROR_INVALID_FORMAT <BR>
324          <BR>
325 
326   @param[out]   pCount       消尽回数が返ります。 (省略可能)
327   @param[out]   pStepID      タスクステップIDが返ります。(省略可能)
328   @return       タスク結果コードが返ります。<BR>
329 */
330     TaskResultCode GetResult(u32* pCount=NULL, u8* pStepID=NULL);
331 
332 /*!
333   @brief        タスク状態を取得します。
334 
335                 あらかじめ、@ref TaskStatus のインスタンスを用意ください。また、このインスタンスは、128B程度のメモリを必要としますのでご注意ください。
336                 それぞれの属性値の取得については、@ref TaskStatus のGetProperty()を参照ください。
337 
338   @param[out]   pStatus      タスクステータスが返ります。
339   @param[in]    acknowledge  タスク実行が終わると、実行結果を確認できるように、@ref TaskStatus 内のタスクの実行終了状態を
340                              示すコード @ref TaskStateCode を保持します。このフラグをtrueにして呼び出しますと、
341                              この実行終了状態の保持を解除します。
342                              仮に消尽回数がゼロでないタスクの場合は、前回のタスク実行完了直後に再スケジューリングされますので、
343                              次回からタスクの状態は、@ref TASK_WAITING_TIMER に切り替わることになります。 (省略可能)
344   @param[out]   pStepID      タスクステップIDが返ります。
345   @param[in]    taskStep     タスクステップIDを指定します。 (省略時はカレントステップ)
346   @return       関数の実行結果を返します。以下に挙げる Result を返します。
347   @retval       ResultSuccess                   タスク状態を取得に成功しました。
348   @retval       ResultInvalidTaskStatus         タスクステータスのポインタがNULLです。
349   @retval       ResultInvalidTaskId             タスクIDのポインタがNULLまたは0文字列です。
350   @retval       ResultTaskNotExist              指定されたタスクIDが見つかりません。登録済であるか確認ください。
351   @retval       ResultIpcNotSessionInitialized  セッションが初期化されていません。@ref Initialize の呼び出し前に本関数が呼び出されると、このResultが返ります。BOSSライブラリを利用する際には、必ず初めに@ref Initialize を呼び出してください。
352   @retval       上記以外                        想定外のエラー(エラー内容については、@ref boss_Result.h を参照)。
353 */
354     nn::Result GetStateDetail(TaskStatus* pStatus, bool acknowledge=false, u8* pStepID=NULL, u8 taskStep=CURRENT_STEP_ID);
355 
356 /*!
357   @brief        @ref nn::boss::GetStateDetail の旧名です。
358                  互換性のために残しているものですので、新規利用は避けてください。
359 */
360     nn::Result GetStatus(TaskStatus* pStatus, u8* pStepID=NULL, u8 taskStep=CURRENT_STEP_ID) NN_ATTRIBUTE_DEPRECATED;
361 
362 /*!
363   @brief        タスクエラー状態を取得します。
364 
365                 あらかじめ、@ref TaskError のインスタンスを用意ください。また、このインスタンスは、136B程度のメモリを必要としますのでご注意ください。
366 
367   @param[out]   pTaskError    タスクエラー状態が返ります。
368   @param[out]   pStepID      タスクステップIDが返ります。
369   @param[in]    taskStep     タスクステップIDを指定します。 (省略時はカレントステップ)
370   @return       関数の実行結果を返します。以下に挙げる Result を返します。
371   @retval       ResultSuccess                   取得に成功しました。
372   @retval       ResultInvalidTaskError          タスクエラー情報のポインタがNULLです。
373   @retval       ResultInvalidTaskId             タスクIDのポインタがNULLまたは0文字列です。
374   @retval       ResultTaskNotExist              指定されたタスクIDが見つかりません。登録済であるか確認ください。
375   @retval       ResultIpcNotSessionInitialized  セッションが初期化されていません。@ref Initialize の呼び出し前に本関数が呼び出されると、このResultが返ります。BOSSライブラリを利用する際には、必ず初めに@ref Initialize を呼び出してください。
376   @retval       上記以外                        想定外のエラー(エラー内容については、@ref boss_Result.h を参照)。
377 */
378     nn::Result GetError(TaskError* pTaskError, u8* pStepID=NULL, u8 taskStep=CURRENT_STEP_ID);
379 
380 /*!
381   @brief        登録済のタスク情報を取得します。
382 
383                 あらかじめ、@ref TaskPolicy のインスタンス、@ref TaskAction のインスタンス、
384                 @ref TaskOptionのインスタンスを用意ください。
385                 それぞれの属性値の取得については、各クラスのGetProperty()を参照ください。
386 
387   @param[out]   pPolicy      タスクポリシーを指定します。
388   @param[out]   pAction      タスクアクションを指定します。
389   @param[out]   pOption      タスクオプションを指定します。
390   @param[in]    taskStep     タスクステップID指定 (省略時はカレントステップ)
391   @return       関数の実行結果を返します。以下に挙げる Result を返します。
392   @retval       ResultSuccess                   取得に成功しました。
393   @retval       ResultInvalidTaskId             タスクIDのポインタがNULLまたは0文字列です。
394   @retval       ResultInvalidPolicy             ポリシィ情報のポインタがNULLです。
395   @retval       ResultInvalidAction             タスクアクションのポインタがNULLです。
396   @retval       ResultInvalidOption             タスクオプションのポインタがNULL,またはoptionコードが範囲外です。
397   @retval       ResultTaskNotExist              指定されたタスクIDが見つかりません。登録済であるか確認ください。
398   @retval       ResultIpcNotSessionInitialized  セッションが初期化されていません。@ref Initialize の呼び出し前に本関数が呼び出されると、このResultが返ります。BOSSライブラリを利用する際には、必ず初めに@ref Initialize を呼び出してください。
399   @retval       上記以外                        想定外のエラー(エラー内容については、@ref boss_Result.h を参照)。
400 */
401     nn::Result GetInfo(TaskPolicy* pPolicy, TaskAction* pAction, TaskOption* pOption, u8 taskStep=CURRENT_STEP_ID);
402 
403 /*!
404   @brief  タスクIDを取得します。
405 
406   @return タスクIDの文字列が返ります。<BR>
407 */
408     char*               GetTaskId(void);
409 
410 protected:
411     friend class AccessConfig;
412     TaskConfig          m_Task;
413 private:
414     bool                CheckTaskId(void);
415 
416 };
417 
418 } // end of namespace boss
419 } // end of namespace nn
420 
421 #endif // __cplusplus
422 
423 #endif /* NN_BOSS_BOSS_TASK_H_ */
424