1 /*---------------------------------------------------------------------------*
2   Project:  Horizon
3   File:     dlp_Type.h
4 
5   Copyright (C)2009-2012 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: 47023 $
14  *---------------------------------------------------------------------------*/
15 
16 #ifndef NN_DLP_CTR_DLP_TYPE_H_
17 #define NN_DLP_CTR_DLP_TYPE_H_
18 
19 #include <nn/Handle.h>
20 #include <nn/Result.h>
21 #include <nn/types.h>
22 #include <nn/cfg.h>
23 #include <nn/uds.h>
24 
25 namespace nn {
26 namespace dlp {
27 namespace CTR {
28 /*
29 
30 
31   */
32 const size_t    MAX_CHILD_IMPORT_SIZE           = 32 * 1024 * 1024;         //
33 const s32       SHORT_TITLE_NAME_LENGTH         = 64;                       //
34 const s32       LONG_TITLE_NAME_LENGTH          = 128;                      //
35 const s32       ICON_HEIGHT_PIXEL               = 48;                       //
36 const s32       ICON_WIDTH_PIXEL                = 48;                       //
37 const s32       ICON_PIXEL_COUNT                = ICON_WIDTH_PIXEL * ICON_HEIGHT_PIXEL; //
38 const s32       RATING_INFO_SIZE                = 16;                       //
39 const u16       MAX_NODE_NUM                    = nn::uds::CTR::NODE_MAX;   //
40 const u16       MAX_CLIENT_NUM                  = MAX_NODE_NUM - 1;         //
41 const u8        MAX_SCAN_NUM                    = 16;                       //
42 const size_t    MIN_NETWORK_BLOCK_BUFFER_NUM    = 2;                        //
43 const size_t    MAX_NETWORK_BLOCK_BUFFER_NUM    = 4;                        //
44 const size_t    MIN_NETWORK_BLOCK_BUFFER_SIZE   = 128*1024;                 //
45 const size_t    MAX_NETWORK_BLOCK_BUFFER_SIZE   = 512*1024;                 //
46 const size_t    MAX_CHILD_UDS_PASSPHRASE_LENGTH = 9;                        //
47 
48 /*
49 
50 */
51 
52 
53 enum SessionType
54 {
55     SESSION_TYPE_INVALID            = 0,
56     SESSION_TYPE_TITLE              = 1,        // Download session for the child device program
57     SESSION_TYPE_SYSTEM             = 2         // Download session of the system required to run the title
58 };
59 
60 
61 /*
62 
63  */
64 enum ClientState
65 {
66     CLIENT_STATE_INVALID                        = 0x00,    //
67     CLIENT_STATE_DISCONNECTED_NETWORK           = 0x01,    //
68     CLIENT_STATE_SCANNING                       = 0x02,    //
69     CLIENT_STATE_WAITING_CONNECT                = 0x03,    //
70     CLIENT_STATE_WAITING_INVITE                 = 0x04,    //
71     CLIENT_STATE_JOINED_SESSION                 = 0x05,    //
72     CLIENT_STATE_DOWNLOADING                    = 0x06,    //
73     CLIENT_STATE_DOWNLOAD_COMPLETE              = 0x07,    //
74     CLIENT_STATE_REBOOTING                      = 0x09,    //
75     CLIENT_STATE_ERROR                          = 0x80,    //
76     CLIENT_STATE_WAITING_ACCEPT                 = 0x40,    //
77 
78 
79     // Do not use the following. State for the system application
80     CLIENT_STATE_CONFIRMING_DOWNLOAD_PROGRESS   = 0x41,    //
81     CLIENT_STATE_RECONNECTING_NETWORK           = 0x08     //
82 };
83 
84 
85 /*
86 
87 
88 
89 
90 
91 
92 
93 
94  */
95 enum ServerState
96 {
97     SERVER_STATE_INVALID = 0,                           //
98     SERVER_STATE_INITIALIZED = 1,                       //
99     SERVER_STATE_OPENED_SESSIONS = 2,                   //
100     SERVER_STATE_DISTRIBUTING = 11,                     //
101     SERVER_STATE_COMPLETE_DISTRIBUTION = 8,             //
102     SERVER_STATE_REBOOTING_CLIENTS = 9,                 //
103     SERVER_STATE_ERROR = 10,                            //
104 
105     // Below is a state that can be used only in the SDK
106     SERVER_STATE_PREPARING_FOR_SYSTEM_DISTRIBUTION = 3, //
107     SERVER_STATE_DISTRIBUTING_SYSTEM = 4,               //
108     SERVER_STATE_WAITING_RECONNECT = 5,                 //
109     SERVER_STATE_PREPARING_FOR_TITLE_DISTRIBUTION = 6,  //
110     SERVER_STATE_DISTRIBUTING_TITLE = 7                 //
111 };
112 
113 
114 /*
115 
116  */
117 enum EventType
118 {
119     EVENT_TYPE_INVALID = 0,
120     // SERVER
121     EVENT_TYPE_SERVER_STATE_DISTRIBUTING = 19,                      //
122     EVENT_TYPE_SERVER_STATE_COMPLETE_DISTRIBUTION = 6,              //
123     EVENT_TYPE_SERVER_STATE_ERROR = 7,                              //
124 
125     // CLIENT
126     EVENT_TYPE_CLIENT_DISCOVERED_SERVER = 8,                        //
127     EVENT_TYPE_CLIENT_SCAN_BUFFER_FULL = 9,                         //
128     EVENT_TYPE_CLIENT_DISCOVERED_TITLE = 10,                        //
129     EVENT_TYPE_CLIENT_STATE_WAITING_INVITE = 11,                    //
130     EVENT_TYPE_CLIENT_STATE_JOINED_SESSION = 12,                    //
131     EVENT_TYPE_CLIENT_STATE_DOWNLOADING = 13,                       //
132     EVENT_TYPE_CLIENT_STATE_DOWNLOAD_COMPLETE = 14,                 //
133     EVENT_TYPE_CLIENT_STATE_REBOOTING = 16,                         //
134     EVENT_TYPE_CLIENT_STATE_DISCONNECTED_NETWORK = 17,              //
135     EVENT_TYPE_CLIENT_STATE_ERROR = 18,                             //
136 
137     // Do not use the following. Event for the system application
138     EVENT_TYPE_CLIENT_STATE_RECONNECTING_NETWORK = 15,              //
139 
140 
141     // Do not use the following. For compatibility with previous SDK versions
142     EVENT_TYPE_SERVER_STATE_PREPARING_FOR_SYSTEM_DISTRIBUTION = 1,  //
143     EVENT_TYPE_SERVER_STATE_DISTRIBUTING_SYSTEM = 2,                //
144     EVENT_TYPE_SERVER_STATE_WAITING_RECONNECT = 3,                  //
145     EVENT_TYPE_SERVER_STATE_PREPARING_FOR_TITLE_DISTRIBUTION = 4,   //
146     EVENT_TYPE_SERVER_STATE_DISTRIBUTING_TITLE = 5                  //
147 };
148 
149 
150 /*
151 
152  */
153 typedef struct
154 {
155     u8 mac[6];                                  //
156     NN_PADDING2;
157 } ClientDiscoveredServer;
158 
159 
160 /*
161 
162  */
163 typedef struct
164 {
165     u32             uniqueId;                   //
166     u8              childIndex;                 //
167     NN_PADDING3;
168     u8              mac[6];                     //
169     u16             programVersion;             //
170 } ClientDiscoveredTitle;
171 
172 
173 /*
174 
175  */
176 typedef struct
177 {
178     u16 nodeId;                                 //
179     NN_PADDING2;
180 } ClientStateWaitingInvite;
181 
182 
183 /*
184 
185  */
186 typedef struct
187 {
188     nn::util::SizedEnum1<EventType> type;       //
189     NN_PADDING3;
190     NN_PADDING4;
191     union{
192         // Client
193         ClientDiscoveredServer      clientDiscoveredServer;     //
194         ClientDiscoveredTitle       clientDiscoveredTitle;      //
195         ClientStateWaitingInvite    clientStateWaitingInvite;   //
196 
197         u8 placeHolder[16]; // For IPC
198     } ;
199 } EventDesc;
200 
201 
202 /*
203 
204  */
205 typedef nn::uds::NodeInformation NodeInfo;
206 
207 
208 /*
209 
210  */
211 typedef struct
212 {
213     u16                                 nodeId;                   //
214     nn::util::SizedEnum1<SessionType>   sessionType;              //   Do not use Member for the system application.
215     nn::util::SizedEnum1<ClientState>   state;                    //
216     size_t                              totalNum;                 //   Do not use Member for the system application.
217     size_t                              downloadedNum;            //   Do not use Member for the system application.
218 } ClientStatus;
219 
220 /*
221 
222  */
223 typedef struct
224 {
225    bit16                            image[ICON_PIXEL_COUNT];    //
226 } IconInfo;
227 
228 
229 /*
230 
231  */
232 typedef struct
233 {
234     u32                                             uniqueId;                                   //
235     u8                                              childIndex;                                 //
236     NN_PADDING3;
237     u8                                              mac[6];                                     //
238     u16                                             programVersion;                             //
239     bit8                                            ratingInfo[RATING_INFO_SIZE];               //
240     wchar_t                                         shortTitleName[SHORT_TITLE_NAME_LENGTH];    //
241     wchar_t                                         longTitleName[LONG_TITLE_NAME_LENGTH];      //
242     IconInfo                                        icon;                                       //
243     u32                                             importSize;                                 //
244     nn::util::SizedEnum1<nn::cfg::CfgRegionCode>    region;                                     //
245     bool                                            ulcd;                                       //
246     NN_PADDING2;
247 } TitleInfo;
248 
249 
250 /*
251 
252  */
253 typedef struct
254 {
255     u8                                          mac[6];                         //
256     u8                                          channel;                        //
257     nn::util::SizedEnum1<nn::uds::LinkLevel>    linkLevel;                      //
258     u8                                          maxNodeNum;                     //
259     u8                                          nodeNum;                        //
260     bit16                                       dlpVersion;                     //
261     NN_PADDING4;
262     NodeInfo                                    nodeInfo[MAX_NODE_NUM];         //
263     nn::os::Tick                                lastUpdateTick;                 //
264 } ServerInfo;
265 
266 
267 /*
268 
269  */
270 typedef struct
271 {
272     u8                                  bssid[6];                       //
273     char                                passphrase[MAX_CHILD_UDS_PASSPHRASE_LENGTH]; //
274     NN_PADDING1;
275 } RebootInfo;
276 
277 } // end of namespace CTR
278 } // end of namespace dlp
279 } // end of namespace nn
280 
281 #endif  // ifndef NN_DLP_CTR_DLP_TYPE_H_
282