1 /*---------------------------------------------------------------------------*
2   Project:  Horizon
3   File:     boss_Types.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: 31985 $
14  *---------------------------------------------------------------------------*/
15 
16 #ifndef NN_BOSS_BOSS_TYPES_H_
17 #define NN_BOSS_BOSS_TYPES_H_
18 
19 #include <nn/types.h>
20 #include <nn/os/os_Event.h>
21 #include <nn/Handle.h>
22 #include <nn/http/http_Types.h>
23 #include <nn/fs/fs_Parameters.h>
24 #include <nn/boss/boss_Const.h>
25 #include <nn/boss/boss_Result.h>
26 
27 /*=======================================================================*
28     型定義
29  *=======================================================================*/
30 
31 #ifdef __cplusplus
32 
33 namespace nn {
34 namespace boss {
35 
36 typedef nn::fs::TitleId         AppIdType;
37 typedef nn::fs::ExtSaveDataId   BossStorageId;
38 
39 /*!
40     @brief TaskPolicyクラスの属性情報を保持する内部構造体定義です。
41 */
42 typedef struct TaskPolicyConfig {
43     u8                  priority;               //!< タスク登録時のタスク実行優先順位。
44     SchedulingPolicy    schedulingPolicy;       //!< タスクのスケジューリングポリシー。
45     TaskPermission      taskPermission;         //!< タスク実行に伴うペアレンタルコントロール・EULAパーミッションの制御設定。
46     NN_PADDING1;
47     u32                 targetDuration;         //!< 目標とするタスク実行時間。(将来的な拡張用ですので使用できません)
48     u32                 execInterval;           //!< タスクの実行間隔。単位は、(秒)です。
49     u32                 execCount;              //!< タスクの消尽回数。
50 } TaskPolicyConfig;
51 
52 
53 /*!
54     @brief TaskOptionクラスの属性情報を保持する内部構造体定義です。
55 */
56 typedef struct TaskOptionConfig {
57     ExecOption      option;               //!< タスク実行オプション。
58     u8              step;                 //!< タスクステップのID番号。
59     u8              targetStep;           //!< タスクステップのオプションID番号。(将来的な拡張用ですので使用できません)
60     NN_PADDING1;
61     u32             param1;               //!< タスクステップ実行のオプションパラメータ1。(将来的な拡張用ですので使用できません)
62     u32             param2;               //!< タスクステップ実行のオプションパラメータ2。(将来的な拡張用ですので使用できません)
63 } TaskOptionConfig;
64 
65 //------------------------------------------------------------
66 //  TASK ACTION   1st BOSS版についての注意
67 //      (1) ACTIONは、DownloadとNsaDownload をサポートしており
68 //                    UploadとSignalについては未実装であるがパラメータは仮で定義している
69 //
70 //      (2) SIGNAL ACTION で使用する「nn::os::Event* event;」については
71 //          2nd BOSS以降の開発で検討を要する。
72 //          Event* を構造体に持ち、それがBOSSデータベースに登録されて使うことが問題になる。
73 //
74 //
75 /*!
76     @brief TaskActionクラスの属性情報を保持する内部構造体定義です。
77 */
78 typedef struct TaskActionConfig {
79     Action              action;                                 //!< タスクの種別コード。
80     u8                  privateRootCA;                          //!< プライベートルート証明書の有効フラグ。
81     u8                  privateClientCert;                      //!< プライベートクライアント証明書の有効フラグ。
82     ApInfoType          infoAP;                                 //!< HTTPクエリーへAP情報付与のためのアクセスポイント情報種別。
83     FileDescriptor      fDsec;                                  //!< ファイル識別子のタイプ。
84     NN_PADDING3;
85     u32                 execSerialID;                           //!< 起動タスク用のイベント。(将来的な拡張用ですので使用できません)
86     u32                 offset;                                 //!< URLで指定したデータの先頭位置オフセット。
87     nn::os::Event*      event;                                  //!< 起動タスク用のイベント。(将来的な拡張用ですので使用できません)
88     nn::Handle          fileHandle;                             //!< ダウンロード先のファイルハンドル。
89     union File {
90         char            filePath[MAX_FILEPATH_LENGTH];          //!< ダウンロード先のファイルパス。
91         wchar_t         filePathW[MAX_FILEPATH_LENGTH];         //!< ダウンロード先のファイルパス。
92     } file;
93     char                url[MAX_URL_LENGTH];                    //!< 対象のURL。
94 
95     struct HhttpRequestHeader{
96         char            label[MAX_HTTP_HEADER_LABEL];           //!< URLのオプションリクエストヘッダのラベル部。
97         char            value[MAX_HTTP_HEADER_VALUE];           //!< URLのオプションリクエストヘッダのバリュー部。
98     } httpRequestHeader[MAX_HTTP_HEADER];                       //!< URLのオプションリクエストヘッダ構造体。
99 
100     nn::http::InternalCaCertId      rootCA[MAX_ROOT_CA];        //!< https通信用の内蔵ルート証明書。
101     nn::http::InternalClientCertId  clientCert[MAX_CLIENT_CERT];//!< https通信用の内蔵クライアント証明書。
102     u32                             rootCANum;                  //!< 内蔵ルート証明書を指定の設定数。
103     u32                             clientCertNum;              //!< 内蔵クライアント証明書の設定数。
104 
105     NN_PADDING4;
106     char lastModified[MAX_LASTMODIFIED_LENGTH];                 //!< HTTPリクエストヘッダに設定する最終更新日時。
107 
108 } TaskActionConfig;
109 
110 /*!
111     @brief TaskActionUploadクラスの属性情報を保持する内部構造体定義です。(将来的な拡張用ですので使用できません)
112 */
113 typedef TaskActionConfig TaskActionUploadConfig;
114 
115 /*!
116     @brief TaskActionDownloadクラスの属性情報を保持する内部構造体定義です。
117 */
118 typedef TaskActionConfig TaskActionDownloadConfig;
119 
120 /*!
121     @brief TaskActionSignalクラスの属性情報を保持する内部構造体定義です。(将来的な拡張用ですので使用できません)
122 */
123 typedef TaskActionConfig TaskActionSignalConfig;
124 
125 /*!
126     @brief TaskActionNsaDownloadクラスの属性情報を保持する内部構造体定義です。
127 */
128 typedef TaskActionConfig TaskActionNsaDownloadConfig;
129 
130 
131 /*!
132     @brief Taskクラスの属性情報を保持する内部構造体定義です。
133 */
134 typedef struct TaskConfig {
135     u32                 execInterval;           //!< タスクの実行間隔。単位は、(秒)です。(内部処理用)
136     u32                 execCount;              //!< タスクの消尽回数。(内部処理用)
137     u8                  taskId[TASK_ID_LENGTH]; //!< タスクID。(内部処理用)
138 } TaskConfig;
139 
140 
141 /*!
142     @brief TaskStatusクラスの属性情報を保持する内部構造体定義です。
143 */
144 typedef struct TaskStatusInfo {
145     s64                 taskStartTime;        //!< 2000/1/1を基点としたタスク実行指示時刻。単位は、(秒) です。
146     s64                 stepStartTime;        //!< 2000/1/1を基点としたタスク実行指示時刻。単位は、(秒) です。(将来的な拡張用ですので使用できません)
147     TaskStateCode       state;                //!< タスクの状態情報。
148     TaskStateCode       taskState;            //!< 内部的なタスクの状態情報。
149     TaskStateCode       stateResume;          //!< 内部的なリジューム時用のタスクの状態情報。
150     TaskServiceStatus   serviceStatus;        //!< タスク属性で指定したURLのサービス利用可能ステータス。
151     bool                serviceTerminated;    //!< タスク属性で指定したURLのサービス利用可能フラグ。
152     TaskResultCode      resultCode;           //!< タスク実行結果コード。
153     NN_PADDING2;
154 
155     u32                 commErrorCode;        //!< タスク実行時の通信エラーコード。
156     u32                 execCount;            //!< タスクの消尽回数。
157     u32                 pendingTime;          //!< タスク実行指示時刻からの経過時間。
158     u32                 remainTime;           //!< タスク実行までの残り時間。(将来的な拡張用ですので使用できません)
159     u32                 progress;             //!< ダウンロード済みバイト数。
160     u32                 dataSize;             //!< ダウンロード対象のURLの総バイト数。
161     u16                 activeRate;           //!< 平均実行率。(将来的な拡張用ですので使用できません)
162     u16                 requestRate;          //!< 平均通信リクエスト率。(将来的な拡張用ですので使用できません)
163     u8                  activeStep;           //!< 実行中のタスクステップID番号。
164     u8                  priority;             //!< 現在のタスク実行の優先順位。
165     NN_PADDING2;
166     char lastModified[MAX_LASTMODIFIED_LENGTH];  //!< HTTPレスポンスヘッダで返された最終更新日時。
167 } TaskStatusInfo;
168 
169 
170 /*!
171     @brief TaskStepStatusInfo内部構造体定義です。(内部処理用)
172 */
173 typedef TaskStatusInfo TaskStepStatusInfo ;
174 
175 /*!
176     @brief TaskErrorクラスの属性情報を保持する内部構造体定義です。
177 */
178 typedef struct TaskErrorInfo {
179     TaskResultCode  errorResultCode;            //!< タスク実行結果コード。
180     NN_PADDING3;
181     u32        errorCode;                       //!< タスク実行時の通信エラーコード。
182     char       message[MAX_ERROR_MESSAGE];      //!< タスク実行時の通信エラーメッセージ。(将来的な拡張用ですので使用できません)
183 } TaskErrorInfo;
184 
185 /*!
186     @brief ApplicationIdListクラスの属性情報を保持する内部構造体定義です。
187 */
188 typedef struct ApplicationIdInfoList {
189     u16       size;                             //!< アプリIDリストの有効なサイズ。
190     NN_PADDING2;
191     NN_PADDING4;
192     AppIdType appId[MAX_APPLICATION_ID];        //!< アプリケーションIDリスト。
193 } ApplicationIdInfoList;
194 
195 /*!
196     @brief TaskIdListクラスの属性情報を保持する内部構造体定義です。
197 */
198 typedef struct TaskIdInfoList {
199     u16     size;                               //!< タスクIDリストの有効なサイズ。
200     NN_PADDING2;
201     NN_PADDING4;
202     u8      taskId[MAX_TASK_ID][TASK_ID_LENGTH];//!< タスクIDリスト。
203 } TaskIdInfoList;
204 
205 /*!
206     @brief StepIdListクラスの属性情報を保持する内部構造体定義です。
207 */
208 typedef struct StepIdInfoList {
209     u16       size;                     //!< タスクステップIDリストの有効なサイズ。
210     NN_PADDING2;
211     u8        StepID[MAX_TASK_ID];      //!< タスクステップIDリスト。
212 } StepIdInfoList;
213 
214 /*!
215     @brief NsDataIdListクラスの属性情報を保持する内部構造体定義です。
216 */
217 typedef struct NsDataIdInfoList {
218     u16       size;                     //!< 有効なシリアルの数。
219     u16       lastIndex;                //!< 最後に取得したインデックス値
220     u32       lastSerial;               //!< 最後に取得したシリアル値
221     u32*      pSerial;                  //!< シリアルIDリストを格納する領域ポインタ
222     size_t    serialSize;               //!< シリアルIDリストを格納する領域の要素数
223 } NsDataIdInfoList;
224 
225 
226 } // end of namespace boss
227 } // end of namespace nn
228 
229 
230 #endif /*__cplusplus*/
231 
232 #endif /* NN_BOSS_BOSS_TYPES_H_ */
233