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: 25661 $
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 #ifdef NN_BOSS_TEST_MODE
34 namespace nn {
35 namespace fs {
36 
37 typedef bit64 TitleId;
38 typedef bit64 ExtSaveDataId;
39 
40 }
41 }
42 #endif /*NN_BOSS_TEST_MODE*/
43 
44 namespace nn {
45 namespace boss {
46 
47 typedef nn::fs::TitleId         AppIdType;
48 typedef nn::fs::ExtSaveDataId   BossStorageId;
49 
50 //$ TASK POLICY
51 typedef struct TaskPolicyConfig {
52     u8                  priority;               /* タスクの優先度値 */
53     SchedulingPolicy    schedulingPolicy;       /* タスクのスケジューリング方法の識別子 */
54     TaskPermission      taskPermission;         /* タスク許可(EULA、ペアレンタルコントロール */
55     NN_PADDING1;
56     u32                 targetDuration;         /* タスクの完了希望時間 */
57     u32                 execInterval;           /* 実行間隔 (秒)  */
58     u32                 execCount;              /* 実行回数 */
59 } TaskPolicyConfig;
60 
61 
62 //$ TASK OPTION
63 typedef struct TaskOptionConfig {
64     ExecOption      option;               /* スキップまたは、ジャンプの条件ID */
65     u8              step;                 /* ステップID */
66     u8              targetStep;           /* ジャンプする場合のステップID */
67     NN_PADDING1;
68     u32             param1;               /* オプションパラメータ1 */
69     u32             param2;               /* オプションパラメータ2 */
70 } TaskOptionConfig;
71 
72 //------------------------------------------------------------
73 //  TASK ACTION   1st BOSS版についての注意
74 //      (1) ACTIONは、DownloadとNsaDownload をサポートしており
75 //                    UploadとSignalについては未実装であるがパラメータは仮で定義している
76 //
77 //      (2) SIGNAL ACTION で使用する「nn::os::Event* event;」については
78 //          2nd BOSS以降の開発で検討を要する。
79 //          Event* を構造体に持ち、それがBOSSデータベースに登録されて使うことが問題になる。
80 //
81 //
82 //$ TASK ACTION = Upload + Download + Signal + NsaDownload のメンバーの合成
83 typedef struct TaskActionConfig {
84     Action              action;                                 /* タスクのスケジューリング方法の識別子 */
85     u8                  privateRootCA;                          /* プライベートルートCA  (true/false) */
86     u8                  privateClientCert;                      /* プライベートクライアントCert (true/false)  */
87     ApInfoType          infoAP;                                 /* AP(アクセスポイント)情報 */
88     FileDescriptor      fDsec;                                  /* ファイル識別子のタイプ指定 */
89     NN_PADDING3;
90     u32                 execSerialID;                           /* 起動対象プログラム  */
91     u32                 offset;                                 /* オフセット指定 */
92     nn::os::Event*      event;                                  /* Signal用 */
93     nn::Handle          fileHandle;                             /* ファイルハンドル */
94     union File {
95         char            filePath[MAX_FILEPATH_LENGTH];          /* ファイルパス */
96         wchar_t         filePathW[MAX_FILEPATH_LENGTH];         /* ファイルパス */
97     } file;
98     char                url[MAX_URL_LENGTH];                    /* URL */
99 
100     struct HhttpRequestHeader{
101         char            label[MAX_HTTP_HEADER_LABEL];           /* HTTPリクエスト ラベル */
102         char            value[MAX_HTTP_HEADER_VALUE];           /* HTTPリクエスト 値 */
103     } httpRequestHeader[MAX_HTTP_HEADER];                       /* HTTPリクエストヘッダ */
104 
105     nn::http::InternalCaCertId      rootCA[MAX_ROOT_CA] ;       /*  */
106     nn::http::InternalClientCertId  clientCert[MAX_CLIENT_CERT]   ;       /*  */
107     u32                             rootCANum           ;       /* rootCA個数 */
108     u32                             clientCertNum       ;       /* clientCert個数 */
109 
110     NN_PADDING4;
111     char lastModified[MAX_LASTMODIFIED_LENGTH];
112 
113 } TaskActionConfig;
114 
115 //$ TASK ACTION1 : Upload
116 typedef TaskActionConfig TaskActionUploadConfig;
117 
118 //$ TASK ACTION2 : Download
119 typedef TaskActionConfig TaskActionDownloadConfig;
120 
121 //$ TASK ACTION3 : Signal
122 typedef TaskActionConfig TaskActionSignalConfig;
123 
124 //$ TASK ACTION4 : NsaDownload
125 typedef TaskActionConfig TaskActionNsaDownloadConfig;
126 
127 
128 //$ TASK
129 typedef struct TaskConfig {
130     u32                 execInterval;           /* 実行間隔 (秒)  */
131     u32                 execCount;              /* 実行回数 */
132     u8                  taskId[TASK_ID_LENGTH];
133 } TaskConfig;
134 
135 
136 typedef struct TaskStatusInfo {
137     s64                 taskStartTime;        /* 開始時刻 */
138     s64                 stepStartTime;        /* タスクステップ実行開始時刻 */
139     TaskStateCode       state;                /* 実行状態 */
140     TaskStateCode       taskState;            /* 内部実行状態 */
141     TaskStateCode       stateResume;          /* BOSS内部用 レジューム用バックアップ */
142     TaskServiceStatus   serviceStatus;        /* サービス状態 */
143     bool                serviceTerminated;    /* サービス終了 */
144     TaskResultCode      resultCode;           /* 結果コード値 */
145     NN_PADDING2;
146 
147     u32                 commErrorCode;        /* 通信エラーコード値 */
148     u32                 execCount;            /* 実行回数 */
149     u32                 pendingTime;          /* ペンディング時刻 */
150     u32                 remainTime;           /* リメイン時刻 */
151     u32                 progress;             /* ステップ内の予想進捗率 */
152     u32                 dataSize;             /* データサイズ値 */
153     u16                 activeRate;           /* 平均実行率 */
154     u16                 requestRate;          /* 平均リクエスト数 */
155     u8                  activeStep;           /* アクティブ(カレント)ステップ */
156     u8                  priority;
157     NN_PADDING2;
158     char lastModified[MAX_LASTMODIFIED_LENGTH];
159 } TaskStatusInfo;
160 
161 
162 typedef TaskStatusInfo TaskStepStatusInfo ;
163 
164 typedef struct TaskErrorInfo {
165     TaskResultCode  errorResultCode;            /* エラー結果コード値 */
166     NN_PADDING3;
167     u32        errorCode;                       /* エラーコード値 */
168     char       message[MAX_ERROR_MESSAGE];      /* エラーメッセージ */
169 } TaskErrorInfo;
170 
171 
172 
173 
174 typedef struct ApplicationIdInfoList {
175     u16       size;                             /* 有効なアプリケーションIDの数 */
176     NN_PADDING2;
177     NN_PADDING4;
178     AppIdType appId[MAX_APPLICATION_ID];        /* アプリケーションID */
179 } ApplicationIdInfoList;
180 
181 
182 typedef struct TaskIdInfoList {
183     u16     size;                                   /* 有効なタスクIDの数 */
184     NN_PADDING2;
185     NN_PADDING4;
186     u8      taskId[MAX_TASK_ID][TASK_ID_LENGTH];    /* タスクID */
187 } TaskIdInfoList;
188 
189 
190 typedef struct StepIdInfoList {
191     u16       size;                     /* 有効なタスクステップIDの数 */
192     NN_PADDING2;
193     u8        StepID[MAX_TASK_ID];      /* タスクステップID */
194 } StepIdInfoList;
195 
196 
197 typedef struct NsDataIdInfoList {
198     u16       size;                     /* 有効なシリアルの数 */
199     u16       lastIndex;                /* 最後に取得したインデックス */
200     u32       lastSerial;               /* 最後に取得したシリアル値 */
201     u32*      pSerial;                  /* シリアルIDリストのポインタ */
202     size_t    serialSize;               /* シリアルIDリストの要素数 */
203 } NsDataIdInfoList;
204 
205 
206 } // end of namespace boss
207 } // end of namespace nn
208 
209 
210 #endif /*__cplusplus*/
211 
212 #endif /* NN_BOSS_BOSS_TYPES_H_ */
213