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