1 /*---------------------------------------------------------------------------*
2   Project:  Horizon
3   File:     boss_TaskPolicy.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_POLICY_H_
17 #define NN_BOSS_BOSS_TASK_POLICY_H_
18 
19 #include <nn/boss/boss_Const.h>
20 #include <nn/boss/boss_Result.h>
21 #include <nn/boss/boss_Types.h>
22 
23 #ifdef __cplusplus
24 
25 namespace nn {
26 namespace boss {
27 
28 /*!
29   @brief        タスクポリシーを表すクラスです。タスクを登録する際のポリシー情報設定などに利用します。
30 */
31 class TaskPolicy
32 {
33 public:
34 /*!
35   @brief        コンストラクタです。
36 */
37     explicit TaskPolicy(void);
38 
39 /*!
40   @brief        デストラクタです。
41 */
42     virtual ~TaskPolicy(void);
43 
44 /*!
45   @brief        ポリシーの設定を行います。
46   @param[in]    interval    タスクの実行間隔を指定します。単位は時間です。
47   @param[in]    count       タスクの実行回数を指定します。
48   @return       処理の結果が返ります。<BR>
49 */
Initialize(u32 interval,u32 count)50     inline nn::Result Initialize(u32 interval, u32 count){return InitializeWithSecInterval(interval*60*60, count);}
51 
52     /*!
53       @brief        ポリシーの設定を行います。実行間隔は秒で指定します。
54       @param[in]    intervalSec タスクの実行間隔を指定します。単位は秒です。
55       @param[in]    count       タスクの実行回数を指定します。
56       @return       処理の結果が返ります。<BR>
57     */
58     nn::Result InitializeWithSecInterval(u32 intervalSec, u32 count);
59 
60 /*!
61   @brief        ポリシーの設定を行います。
62   @param[in]    priority    タスク実行の優先度を指定します。
63   @param[in]    interval    タスクの実行間隔を指定します。単位は時間です。
64   @param[in]    count       タスクの実行回数を指定します。
65   @return       処理の結果が返ります。<BR>
66 */
Initialize(TaskPriority priority,u32 interval,u32 count)67     inline nn::Result Initialize(TaskPriority priority, u32 interval, u32 count){return InitializeWithSecInterval(priority, interval*60*60, count);}
68 
69 /*!
70   @brief        ポリシーの設定を行います。実行間隔は秒で指定します。
71   @param[in]    priority    タスク実行の優先度を指定します。
72   @param[in]    intervalSec タスクの実行間隔を指定します。単位は秒です。
73   @param[in]    count       タスクの実行回数を指定します。
74   @return       処理の結果が返ります。<BR>
75 */
76     nn::Result InitializeWithSecInterval(TaskPriority priority, u32 intervalSec, u32 count);
77 
78 /*!
79   @brief        1回の実行時間の目安を設定します。(将来的にサポート予定です)
80   @param[in]    duration        1回の実行時間の目安を指定します。
81   @return       処理の結果が返ります。<BR>
82 */
83     nn::Result SetDuration(u32 duration);
84 
85 /*!
86   @brief        タスク実行の優先度を設定します。
87                 タスク実行の優先度は、状況およびサーバからの設定に従いスケジューラによって適切に変更されます。
88   @param[in]    priority    タスク実行の優先度を指定します。
89   @return       処理の結果が返ります。<BR>
90 */
91     nn::Result SetPriority(TaskPriority priority);
92 
93 
94 /*!
95   @brief        クラス内のプロパティの値を設定します。
96                 下記のプロパティを使用できます。\n
97         識別子                 型 \n
98         TASK_PRIORITY          TaskPriority \n
99         TASK_SCHEDULING_POLICY SchedulingPolicy \n
100         TASK_TARGET_DURATION   u32 (sec.) \n
101         TASK_EXEC_INTERVAL     u32 (min.) \n
102         TASK_EXEC_COUNT        u32 \n
103         TASK_PERMISSION        TaskPermission \n
104   @param[in]    type    プロパティの識別子を指定します。
105   @param[in]    pValue  値を指定します。
106   @param[in]    size    値のサイズを指定します。
107   @return       処理の結果が返ります。<BR>
108   @retval       Description== @ref ER_INVALID_PROPERTYVALUE 「プロパティ値のポインタがNULLです。」を表すエラー
109   @retval       Description== @ref ER_INVALID_PROPERTYTYPE  「プロパティタイプがサポート外です。」を表すエラー
110 */
111     nn::Result SetProperty(PropertyType type, void* pValue, size_t size);
112 
113 /*!
114   @brief        クラス内のプロパティの値を取得します。
115                 下記のプロパティを使用できます。\n
116         識別子              型 \n
117         TASK_PRIORITY          TaskPriority \n
118         TASK_SCHEDULING_POLICY SchedulingPolicy \n
119         TASK_TARGET_DURATION   u32 (sec.) \n
120         TASK_EXEC_INTERVAL     u32 (min.) \n
121         TASK_EXEC_COUNT        u32 \n
122         TASK_PERMISSION        TaskPermission \n
123   @param[in]    type    プロパティの識別子を指定します。
124   @param[out]   pValue  値を指定します。
125   @param[in]    size    値のサイズを指定します。
126   @return       処理の結果が返ります。<BR>
127   @retval       Description== @ref ER_INVALID_PROPERTYVALUE 「プロパティ値のポインタがNULLです。」を表すエラー
128   @retval       Description== @ref ER_INVALID_PROPERTYTYPE  「プロパティタイプがサポート外です。」を表すエラー
129 */
130     nn::Result GetProperty(PropertyType type, void* pValue, size_t size);
131 
132 protected:
133     friend class AccessConfig;
134     TaskPolicyConfig    m_Policy;
135   private:
136 };
137 
138 }
139 }
140 
141 #endif
142 
143 #endif /* NN_BOSS_BOSS_TASK_POLICY_H_ */
144