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: 26265 $
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   @param[in]    pTaskId         タスクIDを指定します。 TaskId[TASK_ID_LENGTH]
54   @return       処理の結果が返ります。<BR>
55   @retval       Description== @ref ER_INVALID_TASK_ID  「タスクIDのポインタがNULLまたは0文字列です。」を表すエラー
56 */
57     nn::Result Initialize(const char* pTaskId);
58 
59 /*!
60   @brief        タスク登録後、実行間隔を更新します。
61   @param[in]    interval        実行間隔を指定します。単位は時間です。
62   @return       処理の結果が返ります。<BR>
63 */
UpdateInterval(u32 interval)64     inline nn::Result UpdateInterval(u32 interval){return UpdateIntervalWithSec(interval*60*60);}
65 
66 /*!
67   @brief        タスク登録後、実行間隔を更新します。単位は秒です。
68   @param[in]    intervalSec        実行間隔を指定します。単位は秒です。
69   @return       処理の結果が返ります。<BR>
70   @retval       Description== @ref ER_INVALID_TASK_ID  「タスクIDのポインタがNULLまたは0文字列です。」を表すエラー
71   @retval       Description== @ref ER_TASK_NOT_EXIST  「指定されたタスクIDが見つからない。」を表すエラー
72   @retval       Description== @ref ER_FILE_ACCESS  「ファイルアクセスに失敗」を表すエラー
73 */
74     nn::Result UpdateIntervalWithSec(u32 intervalSec);
75 
76 /*!
77   @brief  タスク登録後、実行回数を更新します。
78   @param[in]    count           実行回数を指定します。
79   @return       処理の結果が返ります。<BR>
80   @retval       Description== @ref ER_INVALID_TASK_ID  「タスクIDのポインタがNULLまたは0文字列です。」を表すエラー
81   @retval       Description== @ref ER_TASK_NOT_EXIST  「指定されたタスクIDが見つからない。」を表すエラー
82   @retval       Description== @ref ER_FILE_ACCESS  「ファイルアクセスに失敗」を表すエラー
83 */
84     nn::Result UpdateCount(u32 count);
85 
86 /*!
87   @brief        実行間隔を取得します。単位は時間です。
88   @retval       実行間隔が返ります。<BR>
89 */
GetInterval(void)90     inline u32 GetInterval(void)
91     {
92         const u32 intervalSec = GetIntervalSec();
93         if(intervalSec > 0)
94         {
95             return (intervalSec / (60*60));
96         }
97         else
98         {
99             return 0;
100         }
101     }
102 
103 /*!
104   @brief        実行間隔を取得します。単位は秒です。
105   @retval       実行間隔が返ります。<BR>
106 */
107     u32 GetIntervalSec(void);
108 
109 /*!
110   @brief        実行回数を取得します。
111   @return       実行回数が返ります。<BR>
112         @retval U32_CANNOT_GET_DATA データが取得できません。
113 */
114     u32 GetCount(void);
115 
116 /*!
117   @brief        タスクのサービスステータス取得します。
118   @return       タスクのサービスステータスが返ります。<BR>
119 */
120     TaskServiceStatus GetServiceStatus(void);
121 
122 /*!
123   @brief        タスクの開始指示します。
124   @return       処理の結果が返ります。<BR>
125   @retval       Description== @ref ER_INVALID_TASK_ID  「タスクIDのポインタがNULLまたは0文字列です。」を表すエラー
126   @retval       Description== @ref ER_TASK_NOT_EXIST  「指定されたタスクIDが見つからない。」を表すエラー
127   @retval       Description== @ref ER_TASK_STEP_NOT_EXIST  「指定されたタスクステップが見つからない。」を表すエラー
128 */
129     nn::Result Start(void);
130 
131 /*!
132   @brief        タスクの即時開始指示します。
133   @return       処理の結果が返ります。<BR>
134   @retval       Description== @ref ER_INVALID_TASK_ID  「タスクIDのポインタがNULLまたは0文字列です。」を表すエラー
135   @retval       Description== @ref ER_TASK_NOT_EXIST  「指定されたタスクIDが見つからない。」を表すエラー
136   @retval       Description== @ref ER_TASK_STEP_NOT_EXIST  「指定されたタスクステップが見つからない。」を表すエラー
137 */
138     nn::Result StartImmediate(void);
139 
140 /*!
141   @brief        タスクの実行中止指示します。
142   @return       処理の結果が返ります。<BR>
143   @retval       Description== @ref ER_INVALID_TASK_ID  「タスクIDのポインタがNULLまたは0文字列です。」を表すエラー
144   @retval       Description== @ref ER_TASK_NOT_EXIST  「指定されたタスクIDが見つからない。」を表すエラー
145   @retval       Description== @ref ER_TASK_STEP_NOT_EXIST  「指定されたタスクステップが見つからない。」を表すエラー
146 */
147     nn::Result Cancel(void);
148 
149 /*!
150   @brief        指定時間内にタスクの完了待ちを行います。
151   @param[in]    timeout      タイムアウト時間を指定します。
152   @return       処理の結果が返ります。<BR>
153   @retval       Description== @ref ER_WAITFINISH_TIMEOUT  「WAITFINISHタイムアウト」を表すエラー
154   @retval       Description== @ref ER_INVALID_TASK_ID  「タスクIDのポインタがNULLまたは0文字列です。」を表すエラー
155   @retval       Description== @ref ER_WAITFINISH_TASK_NOT_DONE  「WAITFINISHタスクがDONE以外で終了」を表すエラー
156   @retval       Description== @ref ER_TASK_NOT_EXIST  「指定されたタスクIDが見つからない。」を表すエラー
157   @retval       Description== @ref ER_TASK_STEP_NOT_EXIST  「指定されたタスクステップが見つからない。」を表すエラー
158 */
159     nn::Result WaitFinish(const nn::fnd::TimeSpan& timeout);
160 /*!
161   @brief        タスクの完了待ち指示します。
162   @return       処理の結果が返ります。<BR>
163   @retval       Description== @ref ER_WAITFINISH_TIMEOUT  「WAITFINISHタイムアウト」を表すエラー
164   @retval       Description== @ref ER_INVALID_TASK_ID  「タスクIDのポインタがNULLまたは0文字列です。」を表すエラー
165   @retval       Description== @ref ER_WAITFINISH_TASK_NOT_DONE  「WAITFINISHタスクがDONE以外で終了」を表すエラー
166   @retval       Description== @ref ER_TASK_NOT_EXIST  「指定されたタスクIDが見つからない。」を表すエラー
167   @retval       Description== @ref ER_TASK_STEP_NOT_EXIST  「指定されたタスクステップが見つからない。」を表すエラー
168 */
169     nn::Result WaitFinish(void);
170 
171 /*!
172   @brief        タスク状態の取得します。
173   @param[out]   pCount       残り回数が返ります。 (省略可能)
174   @param[out]   pStepID      タスクステップIDが返ります。(省略可能)
175   @return       タスクの状態を示すコードが返ります。<BR>
176 */
177     TaskStateCode GetState(u32* pCount=NULL, u8* pStepID=NULL);
178 
179 /*!
180   @brief        通信エラーコードを取得します。
181   @param[out]   pCount       残り回数が返ります。 (省略可能)
182   @param[out]   pStepID      タスクステップIDが返ります。(省略可能)
183   @return       通信エラーコードが返ります。<BR>
184         @retval U32_CANNOT_GET_DATA データが取得できません。
185 */
186     u32 GetCommErrorCode(u32* pCount=NULL, u8* pStepID=NULL);
187 
188 /*!
189   @brief        タスク結果コードを取得します。
190   @param[out]   pCount       残り回数が返ります。 (省略可能)
191   @param[out]   pStepID      タスクステップIDが返ります。(省略可能)
192   @return       タスク結果コードが返ります。<BR>
193 */
194     TaskResultCode GetResult(u32* pCount=NULL, u8* pStepID=NULL);
195 
196 /*!
197   @brief        タスク状態を取得します。
198   @param[out]   pStatus      タスクステータスが返ります。
199   @param[out]   pStepID      タスクステップIDが返ります。
200   @param[in]    taskStep     タスクステップIDを指定します。 (省略時はカレントステップ)
201   @return       処理の結果が返ります。<BR>
202   @retval       Description== @ref ER_INVALID_TASKSTATUS  「タスクステータスのポインタがNULLです。」を表すエラー
203   @retval       Description== @ref ER_INVALID_TASK_ID  「タスクIDのポインタがNULLまたは0文字列です。」を表すエラー
204   @retval       Description== @ref ER_TASK_NOT_EXIST  「指定されたタスクIDが見つからない。」を表すエラー
205   @retval       Description== @ref ER_TASK_STEP_NOT_EXIST  「指定されたタスクステップが見つからない。」を表すエラー
206   @retval       Description== @ref ER_FILE_ACCESS  「ファイルアクセスに失敗」を表すエラー
207 */
208     nn::Result GetStatus(TaskStatus* pStatus, u8* pStepID=NULL, u8 taskStep=CURRENT_STEP_ID);
209 
210 /*!
211   @brief        タスクエラー状態を取得します。
212   @param[out]   pTaskError    タスクエラー状態が返ります。
213   @param[out]   pStepID      タスクステップIDが返ります。
214   @param[in]    taskStep     タスクステップIDを指定します。 (省略時はカレントステップ)
215   @return       処理の結果が返ります。<BR>
216   @retval       Description== @ref ER_INVALID_TASKERROR  「タスクエラー情報のポインタがNULLです。」を表すエラー
217   @retval       Description== @ref ER_INVALID_TASK_ID  「タスクIDのポインタがNULLまたは0文字列です。」を表すエラー
218   @retval       Description== @ref ER_TASK_NOT_EXIST  「指定されたタスクIDが見つからない。」を表すエラー
219   @retval       Description== @ref ER_TASK_STEP_NOT_EXIST  「指定されたタスクステップが見つからない。」を表すエラー
220 */
221     nn::Result GetError(TaskError* pTaskError, u8* pStepID=NULL, u8 taskStep=CURRENT_STEP_ID);
222 
223 /*!
224   @brief        タスク情報を取得します。
225   @param[out]   pPolicy      タスクポリシーを指定します。
226   @param[out]   pAction      タスクアクションを指定します。
227   @param[out]   pOption      タスクオプションを指定します。
228   @param[in]    taskStep     タスクステップID指定 (省略時はカレントステップ)
229   @return       処理の結果が返ります。<BR>
230   @retval       Description== @ref ER_INVALID_TASK_ID  「タスクIDのポインタがNULLまたは0文字列です。」を表すエラー
231   @retval       Description== @ref ER_INVALID_POLICY  「タスクアクションのポインタがNULLです。」を表すエラー
232   @retval       Description== @ref ER_INVALID_ACTION  「タスクアクションのポインタがNULLです。」を表すエラー
233   @retval       Description== @ref ER_INVALID_OPTION  「タスクオプションのポインタがNULL,またはoptionコードが範囲外です。」を表すエラー
234   @retval       Description== @ref ER_TASK_NOT_EXIST  「指定されたタスクIDが見つからない。」を表すエラー
235   @retval       Description== @ref ER_TASK_STEP_NOT_EXIST  「指定されたタスクステップが見つからない。」を表すエラー
236   @retval       Description== @ref ER_FILE_ACCESS  「ファイルアクセスに失敗」を表すエラー
237 */
238     nn::Result GetInfo(TaskPolicy* pPolicy, TaskAction* pAction, TaskOption* pOption, u8 taskStep=CURRENT_STEP_ID);
239 
240 /*!
241   @brief  タスクIDを取得します。
242   @return 処理の結果が返ります。<BR>
243 */
244     char*               GetTaskId(void);
245 
246 protected:
247     friend class AccessConfig;
248     TaskConfig          m_Task;
249 private:
250     bool                CheckTaskId(void);
251 
252 };
253 
254 } // end of namespace boss
255 } // end of namespace nn
256 
257 #endif // __cplusplus
258 
259 #endif /* NN_BOSS_BOSS_TASK_H_ */
260