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