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