1 /*---------------------------------------------------------------------------* 2 Project: Horizon 3 File: uds_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: 47441 $ 14 *---------------------------------------------------------------------------*/ 15 16 /* Please see man pages for details 17 18 */ 19 20 #ifndef NN_UDS_CTR_UDS_TYPE_H_ 21 #define NN_UDS_CTR_UDS_TYPE_H_ 22 23 #include <nn/cfg.h> 24 25 namespace nn { 26 namespace uds { 27 namespace CTR { 28 29 namespace 30 { 31 const char PORT_NAME_UDS[] = "nwm::UDS"; 32 } 33 34 const u16 BROADCAST_NODE_ID = 0xffff; //!< Node ID representing all node address of the network. Data sent to BROADCAST_NODE_ID can be retrieved by Spectators. 35 36 const u8 NODE_MAX = 16; // 37 const u8 ENDPOINT_MAX = 16; // 38 39 40 /* Please see man pages for details 41 42 43 */ 44 const u8 NET_DESC_APPDATA_SIZE_MAX = 200; // 45 const u16 UDS_PACKET_PAYLOAD_MAX_SIZE = 1478; // 46 const size_t ATTACH_BUFFER_SIZE_MIN = (UDS_PACKET_PAYLOAD_MAX_SIZE + 128); // 47 const size_t ATTACH_BUFFER_SIZE_DEFAULT = (UDS_PACKET_PAYLOAD_MAX_SIZE * 8); // 48 /* 49 50 */ 51 /* Please see man pages for details 52 53 54 */ 55 const size_t UDS_PASSPHRASE_LENGTH_MIN = 8; // 56 const size_t UDS_PASSPHRASE_LENGTH_MAX = 255; // 57 /* Please see man pages for details 58 59 */ 60 61 /* Please see man pages for details 62 63 64 */ 65 const bit8 NO_WAIT = 0x01; // 66 const bit8 FORCE_DIRECT_BC = 0x02; // 67 /* 68 69 */ 70 71 const u8 MAC_ADDRESS_SIZE = 6; 72 const u8 OUI_SIZE = 3; 73 74 /* Please see man pages for details 75 76 */ 77 enum State 78 { 79 STATE_NONE = 0, // 80 STATE_PROCESSING_INITIALIZE, // 81 STATE_PROCESSING_FINALIZE, // 82 STATE_DISCONNECTED, // 83 STATE_CREATING_NETWORK, // 84 STATE_DESTROYING_NETWORK, // 85 STATE_MASTER, // 86 STATE_CONNECTING_NETWORK, // 87 STATE_DISCONNECTING_NETWORK, // 88 STATE_CLIENT, // 89 STATE_SPECTATOR, // 90 STATE_ERROR, // 91 STATE_MAX, 92 STATE_MAX_BIT = (1u << 31) 93 94 }; 95 96 const State STATE_AUDIENCE = STATE_SPECTATOR; 97 98 /* Please see man pages for details 99 100 */ 101 enum DisconnectReason 102 { 103 BEFORE_COMMUNICATION = 0, // 104 NETWORK_IS_AVAILABLE, // 105 REQUEST_FROM_MYSELF, // 106 REQUEST_FROM_SYSTEM, // 107 DISCARDED_FROM_NETWORK, // 108 CONNECTION_LOST, // 109 UNKNOWN_DISCONNECT_REASON, // 110 DISCONNECT_REASON_MAX, 111 DISCONNECT_REASON_MAX_BIT = (1u << 31) 112 }; 113 114 /* Please see man pages for details 115 116 */ 117 enum ConnectType 118 { 119 CONNECT_AS_CLIENT = 1, // 120 CONNECT_AS_SPECTATOR, // 121 CONNECT_AS_MASTER // 122 }; 123 124 const ConnectType CONNECT_AS_AUDIENCE = CONNECT_AS_SPECTATOR ; 125 126 /* Please see man pages for details 127 128 */ 129 enum PowerSaveMode 130 { 131 ALWAYS_ACTIVE, // 132 POWERSAVE_NORMAL, // 133 POWERSAVE_HIGH, // 134 POWERSAVE_MODE_MAX 135 }; 136 137 /* Please see man pages for details 138 139 */ 140 enum LinkLevel 141 { 142 LINK_LEVEL_0 = 0, // 143 LINK_LEVEL_1, // 144 LINK_LEVEL_2, // 145 LINK_LEVEL_3 // 146 }; 147 148 149 150 /* Please see man pages for details 151 152 */ 153 struct ConnectionStatus 154 { 155 State nowState; // 156 DisconnectReason disconnectReason; // 157 u16 myNodeId; // 158 bit16 updateNodeBitmap; // 159 u16 nodeIdList[NODE_MAX]; // 160 u8 nowEntry; // 161 u8 maxEntry; // 162 bit16 slotBitmap; // 163 }; 164 165 /* Please see man pages for details 166 167 168 */ 169 enum DataFrameIndex 170 { 171 UNICAST_DATAFRAME = 0, // 172 BROADCAST_DATAFRAME, // 173 NUM_OF_DATAFRAME 174 }; 175 176 static const size_t SCRAMBLED_LOCAL_FRINED_CODE_SIZE = 12; // 177 178 /* Please see man pages for details 179 180 181 182 183 184 185 186 187 188 */ 189 struct ScrambledLocalFriendCode 190 { 191 bit16 value[SCRAMBLED_LOCAL_FRINED_CODE_SIZE/sizeof(bit16)]; // 192 }; 193 194 /* Please see man pages for details 195 196 */ 197 struct NodeInformation 198 { 199 ScrambledLocalFriendCode scrambledLocalFriendCode; // 200 nn::cfg::CTR::UserName userName; // 201 u16 nodeId; // 202 NN_PADDING2; 203 }; 204 205 const u8 NODE_INFORMATION_SIZE = sizeof(NodeInformation); 206 207 /* Please see man pages for details 208 209 210 211 */ 212 struct EndpointDescriptor 213 { 214 u32 id; // 215 }; 216 217 218 //Below are the definitions used by internal processes. 219 namespace detail{ 220 221 /* Please see man pages for details 222 223 224 */ 225 struct RadioStrength 226 { 227 s8 rssi; 228 bool isValid; 229 }; 230 231 /* Please see man pages for details 232 233 234 235 236 */ 237 class RadioStrengthInfo 238 { 239 public: RadioStrengthInfo()240 RadioStrengthInfo(){m_IsInitialized = false;} 241 void Initialize( const RadioStrength& masterLink, const RadioStrength directLink[NODE_MAX] ); ~RadioStrengthInfo()242 ~RadioStrengthInfo(){m_IsInitialized = false;} 243 244 s8 GetAverage(); // 245 s8 GetMinimum(); // 246 s8 GetMaximum(); // 247 s8 GetMasterLink(); // 248 249 private: 250 bool m_IsInitialized; 251 void GetRawData(s8 rawLink[NODE_MAX] ); // 252 253 RadioStrength m_MasterLink; 254 RadioStrength m_DirectLink[NODE_MAX]; 255 }; 256 257 // Received result for each Endpoint that could be obtained by DestroyEndpoint. 258 struct ReceiveReport 259 { 260 u32 id; // 261 u16 targetNodeId; // 262 u16 port; // 263 u32 receiveCount; // 264 u32 lostCount; // 265 }; 266 UDS_BE2LE16(u16 value)267 inline u16 UDS_BE2LE16( u16 value ) 268 { 269 return static_cast<u16>( (((value) & 0xFF00UL) >> 8UL) | (((value) & 0x00FFUL) << 8UL)); 270 } 271 UDS_BE2LE32(u32 value)272 inline u32 UDS_BE2LE32( u32 value ) 273 { 274 return static_cast<u32>( (((value) & 0xFF000000UL) >> 24UL) | (((value) & 0x00FF0000UL) >> 8UL) | (((value) & 0x0000FF00UL) << 8UL) | (((value) & 0x000000FFUL) << 24UL)); 275 } 276 UDS_BE2LE64(u64 value)277 inline u64 UDS_BE2LE64( u64 value ) 278 { 279 u64 returnValue; 280 u32* tmpA = reinterpret_cast<u32*>(&(returnValue)); 281 u32* tmpB = reinterpret_cast<u32*>(&(value)); 282 283 tmpA[0] = UDS_BE2LE32(tmpB[1]); 284 tmpA[1] = UDS_BE2LE32(tmpB[0]); 285 286 return returnValue; 287 } 288 UDS_LE2BE32(u32 value)289 inline u32 UDS_LE2BE32( u32 value) 290 { 291 return static_cast<u32>( (((value) & 0xFF000000UL) >> 24UL) | (((value) & 0x00FF0000UL) >> 8UL) | (((value) & 0x0000FF00UL) << 8UL) | (((value) & 0x000000FFUL) << 24UL)); 292 } 293 UDS_LE2BE16(u16 value)294 inline u16 UDS_LE2BE16( u16 value ) 295 { 296 return static_cast<u16>( (((value) & 0xFF00UL) >> 8UL) | (((value) & 0x00FFUL) << 8UL)); 297 } 298 UDS_LE2BE64(u64 value)299 inline u64 UDS_LE2BE64( u64 value ) 300 { 301 u64 returnValue; 302 u32* tmpA = reinterpret_cast<u32*>(&(returnValue)); 303 u32* tmpB = reinterpret_cast<u32*>(&(value)); 304 305 tmpA[0] = UDS_LE2BE32(tmpB[1]); 306 tmpA[1] = UDS_LE2BE32(tmpB[0]); 307 308 return returnValue; 309 } 310 311 // UDS versions 312 // 1.0: Initial version 313 // 2.0: Revised the return values of ConnectNetwork() in CTR-SDK 2.X series (ctr-support:1415). Now sends Deauth at Eject(). 314 // 3.0: Resolved the latency issue in Finalize() in CTR-SDK 3.X series (+100 msec prior to version 3.0) (ctr-net:1631). 315 // 4.0: ResultInvalidState(ctr-net:1667) for Initialize() during sleep in CTR-SDK 4.X series 316 #define NN_UDS_DEFINE_UDS_VERSION(major, minor) ((bit16)major<<8 | (bit16)minor&0x00FF) 317 const bit16 UDS_SDK_VERSION = NN_UDS_DEFINE_UDS_VERSION(4, 0); 318 319 /* 320 inline u32 UDS_LE2BE32( u32 value) 321 { 322 NN_ASM("rev value, value"); 323 return value; 324 } 325 */ 326 327 } //end of namespace detail 328 } // end of namespace CTR 329 } // end of namespace uds 330 } // end of namespace nn 331 332 #endif /* NN_UDS_CTR_UDS_TYPE_H_ */ 333