1 /*---------------------------------------------------------------------------*
2   Project:  Horizon
3   File:     boss_Types.h
4   Copyright (C)2009 Nintendo Co., Ltd.  All rights reserved.
5   These coded instructions, statements, and computer programs contain
6   proprietary information of Nintendo of America Inc. and/or Nintendo
7   Company Ltd., and are protected by Federal copyright law. They may
8   not be disclosed to third parties or copied or duplicated in any form,
9   in whole or in part, without the prior written consent of Nintendo.
10   $Rev: 34250 $
11  *---------------------------------------------------------------------------
12 
13 
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     Type Definitions
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 /* Please see man pages for details
40 
41 */
42 typedef struct TaskPolicyConfig {
43     u8                  priority;               //
44     SchedulingPolicy    schedulingPolicy;       //
45     TaskPermission      taskPermission;         //
46     NN_PADDING1;
47     u32                 targetDuration;         //
48     u32                 execInterval;           //
49     u32                 execCount;              //
50 } TaskPolicyConfig;
51 
52 
53 /* Please see man pages for details
54 
55 */
56 typedef struct TaskOptionConfig {
57     ExecOption      option;               //
58     u8              step;                 //
59     u8              targetStep;           //
60     NN_PADDING1;
61     u32             param1;               //
62     u32             param2;               //
63 } TaskOptionConfig;
64 
65 //------------------------------------------------------------
66 //  TASK ACTION   Cautions for 1st BOSS version
67 //      (1) ACTION supports Download and NsaDownload. Upload and Signal are not implemented, but parameters are defined provisionally
68 //
69 //
70  //      (2) "nn::os::Event* event;" used in SIGNAL ACTION needs consideration during the development of 2nd BOSS
71 //
72 //          The problem is putting Event* in a structure, and being registered in BOSS Data to use it.
73 //
74 //
75 /* Please see man pages for details
76 
77 */
78 typedef struct TaskActionConfig {
79     Action              action;                                 //
80     u8                  privateRootCA;                          //
81     u8                  privateClientCert;                      //
82     ApInfoType          infoAP;                                 //
83     FileDescriptor      fDsec;                                  //
84     NN_PADDING3;
85     u32                 execSerialID;                           //
86     u32                 offset;                                 //
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];                    //
94 
95     struct HhttpRequestHeader{
96         char            label[MAX_HTTP_HEADER_LABEL];           //
97         char            value[MAX_HTTP_HEADER_VALUE];           //
98     } httpRequestHeader[MAX_HTTP_HEADER];                       //
99 
100     nn::http::InternalCaCertId      rootCA[MAX_ROOT_CA];        //
101     nn::http::InternalClientCertId  clientCert[MAX_CLIENT_CERT];//
102     u32                             rootCANum;                  //
103     u32                             clientCertNum;              //
104 
105     NN_PADDING4;
106     char lastModified[MAX_LASTMODIFIED_LENGTH];                 //
107 
108 } TaskActionConfig;
109 
110 /* Please see man pages for details
111 
112 */
113 typedef TaskActionConfig TaskActionUploadConfig;
114 
115 /* Please see man pages for details
116 
117 */
118 typedef TaskActionConfig TaskActionDownloadConfig;
119 
120 /* Please see man pages for details
121 
122 */
123 typedef TaskActionConfig TaskActionSignalConfig;
124 
125 /* Please see man pages for details
126 
127 */
128 typedef TaskActionConfig TaskActionNsaDownloadConfig;
129 
130 
131 /* Please see man pages for details
132 
133 */
134 typedef struct TaskConfig {
135     u32                 execInterval;           //
136     u32                 execCount;              //
137     u8                  taskId[TASK_ID_LENGTH]; //
138 } TaskConfig;
139 
140 
141 /* Please see man pages for details
142 
143 */
144 typedef struct TaskStatusInfo {
145     s64                 taskStartTime;        //
146     s64                 stepStartTime;        //
147     TaskStateCode       state;                //
148     TaskStateCode       taskState;            //
149     TaskStateCode       stateResume;          //
150     TaskServiceStatus   serviceStatus;        //
151     bool                serviceTerminated;    //
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;             //
161     u16                 activeRate;           //
162     u16                 requestRate;          //
163     u8                  activeStep;           //
164     u8                  priority;             //
165     NN_PADDING2;
166     char lastModified[MAX_LASTMODIFIED_LENGTH];  //
167 } TaskStatusInfo;
168 
169 
170 /* Please see man pages for details
171 
172 */
173 typedef TaskStatusInfo TaskStepStatusInfo ;
174 
175 /* Please see man pages for details
176 
177 */
178 typedef struct TaskErrorInfo {
179     TaskResultCode  errorResultCode;            //
180     NN_PADDING3;
181     u32        errorCode;                       //
182     char       message[MAX_ERROR_MESSAGE];      //
183 } TaskErrorInfo;
184 
185 /* Please see man pages for details
186 
187 */
188 typedef struct ApplicationIdInfoList {
189     u16       size;                             //
190     NN_PADDING2;
191     NN_PADDING4;
192     AppIdType appId[MAX_APPLICATION_ID];        //
193 } ApplicationIdInfoList;
194 
195 /* Please see man pages for details
196 
197 */
198 typedef struct TaskIdInfoList {
199     u16     size;                               //
200     NN_PADDING2;
201     NN_PADDING4;
202     u8      taskId[MAX_TASK_ID][TASK_ID_LENGTH];//
203 } TaskIdInfoList;
204 
205 /* Please see man pages for details
206 
207 */
208 typedef struct StepIdInfoList {
209     u16       size;                     //
210     NN_PADDING2;
211     u8        StepID[MAX_TASK_ID];      //
212 } StepIdInfoList;
213 
214 /* Please see man pages for details
215 
216 */
217 typedef struct NsDataIdInfoList {
218     u16       size;                     //
219     u16       lastIndex;                //
220     u32       lastSerial;               //
221     u32*      pSerial;                  //
222     size_t    serialSize;               //
223 } NsDataIdInfoList;
224 
225 /* Please see man pages for details
226 
227 */
228 typedef struct NsDataHeaderInfo {
229     s64       titleId;                  //
230     bit32     flags;                    //
231     bit32     dataType;                 //
232     s32       length;                   //
233     u32       serialId;                 //
234     u32       version;                  //
235     NN_PADDING4;
236 } NsDataHeaderInfo;
237 
238 } // end of namespace boss
239 } // end of namespace nn
240 
241 
242 #endif /*__cplusplus*/
243 
244 #endif /* NN_BOSS_BOSS_TYPES_H_ */
245