1 /*---------------------------------------------------------------------------* 2 Project: Horizon 3 File: friends_Types.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: 46347 $ 14 *---------------------------------------------------------------------------*/ 15 16 #ifndef NN_FRIENDS_CTR_FRIENDS_TYPES_H_ 17 #define NN_FRIENDS_CTR_FRIENDS_TYPES_H_ 18 19 #include <nn/types.h> 20 #include <nn/fnd.h> 21 22 /* Please see man pages for details 23 24 25 */ 26 27 #define NN_FRIENDS_INVALID_PRINCIPAL_ID (0) // 28 #define NN_FRIENDS_INVALID_LOCAL_FRIEND_CODE (0ULL) // 29 30 #define NN_FRIENDS_SCREEN_NAME_SIZE (11) // 31 #define NN_FRIENDS_MODE_DESCRIPTION_SIZE (128) // 32 #define NN_FRIENDS_MII_SIZE (96) // 33 #define NN_FRIENDS_APPLICATION_ARG_SIZE (20) 34 #define NN_FRIENDS_FRIEND_LIST_SIZE (100) // 35 #define NN_FRIENDS_APPROACH_CONTEXT_SIZE (512) 36 37 #define NN_FRIENDS_INVALID_GAME_ID (0) 38 #define NN_FRIENDS_INVALID_GROUP_ID (0) 39 40 #define NN_FRIENDS_JOIN_AVAILABILITY_NOT_JOINABLE_BIT (0x80000000U) 41 42 /* Please see man pages for details 43 44 */ 45 enum nnfriendsPlatformCode 46 { 47 NN_FRIENDS_PLATFORM_CTR = 2 // 48 }; 49 typedef enum nnfriendsPlatformCode nnfriendsPlatformCode; 50 51 /* Please see man pages for details 52 53 */ 54 enum nnfriendsAttributeFlag 55 { 56 NN_FRIENDS_ATTRIBUTE_FLAG_ESTABLISHED = 1 << 0, // 57 NN_FRIENDS_ATTRIBUTE_FLAG_REMOTE_ACCESSIBLE = 1 << 1 // 58 }; 59 typedef enum nnfriendsAttributeFlag nnfriendsAttributeFlag; 60 61 /* Please see man pages for details 62 63 */ 64 enum nnfriendsNotificationType 65 { 66 NN_FRIENDS_NOTIFICATION_NONE = 0, // 67 NN_FRIENDS_NOTIFICATION_ONLINE, // 68 NN_FRIENDS_NOTIFICATION_OFFLINE, // 69 NN_FRIENDS_NOTIFICATION_FRIEND_ONLINE, // 70 NN_FRIENDS_NOTIFICATION_FRIEND_PRESENCE, // 71 NN_FRIENDS_NOTIFICATION_FRIEND_MII, // 72 NN_FRIENDS_NOTIFICATION_FRIEND_PROFILE, // 73 NN_FRIENDS_NOTIFICATION_FRIEND_OFFLINE, // 74 NN_FRIENDS_NOTIFICATION_BECOME_FRIEND, // 75 NN_FRIENDS_NOTIFICATION_INVITATION // 76 }; 77 typedef enum nnfriendsNotificationType nnfriendsNotificationType; 78 79 /* Please see man pages for details 80 81 */ 82 enum nnfriendsNotificationMask 83 { 84 NN_FRIENDS_NOTIFICATION_MASK_ONLINE = 1 << 0, // 85 NN_FRIENDS_NOTIFICATION_MASK_OFFLINE = 1 << 1, // 86 NN_FRIENDS_NOTIFICATION_MASK_FRIEND_ONLINE = 1 << 2, // 87 NN_FRIENDS_NOTIFICATION_MASK_FRIEND_PRESENCE = 1 << 3, // 88 NN_FRIENDS_NOTIFICATION_MASK_FRIEND_MII = 1 << 4, // 89 NN_FRIENDS_NOTIFICATION_MASK_FRIEND_PROFILE = 1 << 5, // 90 NN_FRIENDS_NOTIFICATION_MASK_FRIEND_OFFLINE = 1 << 6, // 91 NN_FRIENDS_NOTIFICATION_MASK_BECOME_FRIEND = 1 << 7, // 92 NN_FRIENDS_NOTIFICATION_MASK_INVITATION = 1 << 8, // 93 94 NN_FRIENDS_NOTIFICATION_MASK_DEFAULT = NN_FRIENDS_NOTIFICATION_MASK_ONLINE | 95 NN_FRIENDS_NOTIFICATION_MASK_OFFLINE | 96 NN_FRIENDS_NOTIFICATION_MASK_FRIEND_ONLINE | 97 NN_FRIENDS_NOTIFICATION_MASK_FRIEND_MII | 98 NN_FRIENDS_NOTIFICATION_MASK_FRIEND_PROFILE | 99 NN_FRIENDS_NOTIFICATION_MASK_FRIEND_OFFLINE | 100 NN_FRIENDS_NOTIFICATION_MASK_BECOME_FRIEND // 101 }; 102 typedef enum nnfriendsNotificationMask nnfriendsNotificationMask; 103 104 enum nnfriendsFontRegion 105 { 106 NN_FRIENDS_FONT_REGION_JP_US_EU, 107 NN_FRIENDS_FONT_REGION_CHINA, 108 NN_FRIENDS_FONT_REGION_KOREA, 109 NN_FRIENDS_FONT_REGION_TAIWAN, 110 111 NN_FRIENDS_FONT_REGION_UNKNOWN = 255 112 }; 113 typedef enum nnfriendsFontRegion nnfriendsFontRegion; 114 115 /* Please see man pages for details 116 117 */ 118 enum nnfriendsJoinAvailability 119 { 120 NN_FRIENDS_JOIN_AVAILABILITY_JOINABLE = 0, // 121 NN_FRIENDS_JOIN_AVAILABILITY_JOINABLE_APP_ONLY = 1, // 122 NN_FRIENDS_JOIN_AVAILABILITY_NOT_JOINABLE = (NN_FRIENDS_JOIN_AVAILABILITY_NOT_JOINABLE_BIT | 0) // 123 }; 124 typedef enum nnfriendsJoinAvailability nnfriendsJoinAvailability; 125 126 /* Please see man pages for details 127 128 */ 129 enum nnfriendsMatchmakeSystemType 130 { 131 NN_FRIENDS_MATCHMAKE_SYSTEM_TYPE_INVALID = 0, // 132 NN_FRIENDS_MATCHMAKE_SYSTEM_TYPE_ANYBODY, // 133 NN_FRIENDS_MATCHMAKE_SYSTEM_TYPE_FRIEND, // 134 NN_FRIENDS_MATCHMAKE_SYSTEM_TYPE_FRIEND_INVITED, // 135 NN_FRIENDS_MATCHMAKE_SYSTEM_TYPE_INVITED // 136 }; 137 typedef enum nnfriendsMatchmakeSystemType nnfriendsMatchmakeSystemType; 138 139 ///////////////////////////////////////////////////////////////////////// 140 141 /* Please see man pages for details */ 142 typedef u32 nnfriendsPrincipalId; 143 /* Please see man pages for details */ 144 typedef u64 nnfriendsLocalFriendCode; 145 146 /* Please see man pages for details 147 148 */ 149 struct nnfriendsFriendKey 150 { 151 nnfriendsPrincipalId principalId; // 152 NN_PADDING4; // 153 nnfriendsLocalFriendCode localFriendCode; // 154 155 #ifdef __cplusplus initializennfriendsFriendKey156 inline void initialize() 157 { 158 this->principalId = NN_FRIENDS_INVALID_PRINCIPAL_ID; 159 this->localFriendCode = NN_FRIENDS_INVALID_LOCAL_FRIEND_CODE; 160 } 161 initializennfriendsFriendKey162 inline void initialize( nnfriendsPrincipalId principalId ) 163 { 164 this->principalId = principalId; 165 this->localFriendCode = NN_FRIENDS_INVALID_LOCAL_FRIEND_CODE; 166 } 167 initializennfriendsFriendKey168 inline void initialize( nnfriendsLocalFriendCode localFriendCode ) 169 { 170 this->principalId = NN_FRIENDS_INVALID_PRINCIPAL_ID; 171 this->localFriendCode = localFriendCode; 172 } 173 initializennfriendsFriendKey174 inline void initialize( nnfriendsPrincipalId principalId, nnfriendsLocalFriendCode localFriendCode ) 175 { 176 this->principalId = principalId; 177 this->localFriendCode = localFriendCode; 178 } 179 nnfriendsFriendKeynnfriendsFriendKey180 inline nnfriendsFriendKey() {} nnfriendsFriendKeynnfriendsFriendKey181 inline nnfriendsFriendKey( nnfriendsPrincipalId principalId ) { initialize(principalId); } nnfriendsFriendKeynnfriendsFriendKey182 inline nnfriendsFriendKey( nnfriendsLocalFriendCode localFriendCode ) { initialize(localFriendCode); } nnfriendsFriendKeynnfriendsFriendKey183 inline nnfriendsFriendKey( nnfriendsPrincipalId principalId, nnfriendsLocalFriendCode localFriendCode ) { initialize(principalId, localFriendCode); } 184 #endif 185 }; 186 typedef struct nnfriendsFriendKey nnfriendsFriendKey; 187 188 /* Please see man pages for details 189 190 */ 191 struct nnfriendsProfile 192 { 193 u8 region; // 194 u8 country; // 195 u8 area; // 196 u8 language; // 197 u8 platform; // 198 NN_PADDING3; // 199 }; 200 typedef struct nnfriendsProfile nnfriendsProfile; 201 202 /* Please see man pages for details 203 204 205 206 */ 207 struct nnfriendsMiiData 208 { 209 union { 210 u8 data[NN_FRIENDS_MII_SIZE]; // 211 u32 value32[NN_FRIENDS_MII_SIZE / sizeof(u32)]; // 212 }; 213 }; 214 typedef struct nnfriendsMiiData nnfriendsMiiData; 215 216 /* Please see man pages for details 217 218 */ 219 struct nnfriendsGameMode 220 { 221 u32 joinAvailabilityFlag; // 222 u32 matchmakeSystemType; // 223 u32 joinGameId; // 224 u32 joinGameMode; // 225 nnfriendsPrincipalId ownerPrincipalId; // 226 u32 joinGroupId; // 227 u8 applicationArg[NN_FRIENDS_APPLICATION_ARG_SIZE]; // 228 }; 229 typedef struct nnfriendsGameMode nnfriendsGameMode; 230 231 /* Please see man pages for details 232 233 */ 234 struct nnfriendsMyPresence 235 { 236 nnfriendsGameMode gameMode; // 237 char16 modeDescription[NN_FRIENDS_MODE_DESCRIPTION_SIZE]; // 238 }; 239 typedef struct nnfriendsMyPresence nnfriendsMyPresence; 240 241 /* Please see man pages for details 242 243 */ 244 struct nnfriendsFriendPresence 245 { 246 nnfriendsGameMode gameMode; // 247 bool isOnline; // 248 bool isInvitingMe; // 249 bool isValid; // 250 NN_PADDING1; // 251 252 #ifdef __cplusplus 253 /* Please see man pages for details 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 */ 269 bool IsJoinable( bit64 joinGameModeMask ) const; 270 271 /* Please see man pages for details 272 273 274 275 276 277 278 279 280 281 282 283 */ 284 bool IsJoinable( u32 joinGameId, bit64 joinGameModeMask ) const; 285 #endif 286 }; 287 typedef struct nnfriendsFriendPresence nnfriendsFriendPresence; 288 289 /* Please see man pages for details 290 291 */ 292 struct nnfriendsEventNotification 293 { 294 u8 type; // 295 NN_PADDING3; // 296 NN_PADDING4; // 297 nnfriendsFriendKey friendKey; // 298 }; 299 typedef struct nnfriendsEventNotification nnfriendsEventNotification; 300 301 /* Please see man pages for details 302 303 */ 304 struct nnfriendsApproachContext 305 { 306 union 307 { 308 u8 data[NN_FRIENDS_APPROACH_CONTEXT_SIZE]; // 309 u32 data32[NN_FRIENDS_APPROACH_CONTEXT_SIZE / sizeof(u32)]; // 310 }; 311 }; 312 typedef struct nnfriendsApproachContext nnfriendsApproachContext; 313 314 /* 315 316 */ 317 318 #ifdef __cplusplus 319 320 namespace nn { 321 namespace friends { 322 namespace CTR { 323 324 namespace detail { 325 326 } // end of namespace detail 327 328 /* Please see man pages for details */ 329 typedef ::nnfriendsPrincipalId PrincipalId; 330 /* Please see man pages for details */ 331 typedef ::nnfriendsLocalFriendCode LocalFriendCode; 332 333 static const PrincipalId INVALID_PRINCIPAL_ID = NN_FRIENDS_INVALID_PRINCIPAL_ID; // 334 static const LocalFriendCode INVALID_LOCAL_FRIEND_CODE = NN_FRIENDS_INVALID_LOCAL_FRIEND_CODE; // 335 336 static const u32 SCREEN_NAME_SIZE = NN_FRIENDS_SCREEN_NAME_SIZE; // 337 static const u32 MODE_DESCRIPTION_SIZE = NN_FRIENDS_MODE_DESCRIPTION_SIZE; // 338 static const u32 MII_SIZE = NN_FRIENDS_MII_SIZE; // 339 static const u32 APPLICATION_ARG_SIZE = NN_FRIENDS_APPLICATION_ARG_SIZE; 340 static const u32 FRIEND_LIST_SIZE = NN_FRIENDS_FRIEND_LIST_SIZE; // 341 static const u32 APPROACH_CONTEXT_SIZE = NN_FRIENDS_APPROACH_CONTEXT_SIZE; 342 343 static const u32 INVALID_GAME_ID = NN_FRIENDS_INVALID_GAME_ID; 344 static const u32 INVALID_GROUP_ID = NN_FRIENDS_INVALID_GROUP_ID; 345 346 static const u32 JOIN_AVAILABILITY_NOT_JOINABLE_BIT = NN_FRIENDS_JOIN_AVAILABILITY_NOT_JOINABLE_BIT; 347 348 ///////////////////////////////////////////////////////////////////////// 349 350 /* Please see man pages for details 351 352 */ 353 enum PlatformCode 354 { 355 PLATFORM_CTR = 2 // 356 }; 357 typedef enum PlatformCode PlatformCode; 358 359 /* Please see man pages for details 360 361 */ 362 enum AttributeFlag 363 { 364 ATTRIBUTE_FLAG_ESTABLISHED = 1 << 0, // 365 ATTRIBUTE_FLAG_REMOTE_ACCESSIBLE = 1 << 1 // 366 }; 367 typedef enum AttributeFlag AttributeFlag; 368 369 /* Please see man pages for details 370 371 */ 372 enum NotificationType 373 { 374 NOTIFICATION_NONE = 0, // 375 NOTIFICATION_ONLINE, // 376 NOTIFICATION_OFFLINE, // 377 NOTIFICATION_FRIEND_ONLINE, // 378 NOTIFICATION_FRIEND_PRESENCE, // 379 NOTIFICATION_FRIEND_MII, // 380 NOTIFICATION_FRIEND_PROFILE, // 381 NOTIFICATION_FRIEND_OFFLINE, // 382 NOTIFICATION_BECOME_FRIEND, // 383 NOTIFICATION_INVITATION // 384 }; 385 typedef enum NotificationType NotificationType; 386 387 /* Please see man pages for details 388 389 */ 390 enum NotificationMask 391 { 392 NOTIFICATION_MASK_ONLINE = 1 << 0, // 393 NOTIFICATION_MASK_OFFLINE = 1 << 1, // 394 NOTIFICATION_MASK_FRIEND_ONLINE = 1 << 2, // 395 NOTIFICATION_MASK_FRIEND_PRESENCE = 1 << 3, // 396 NOTIFICATION_MASK_FRIEND_MII = 1 << 4, // 397 NOTIFICATION_MASK_FRIEND_PROFILE = 1 << 5, // 398 NOTIFICATION_MASK_FRIEND_OFFLINE = 1 << 6, // 399 NOTIFICATION_MASK_BECOME_FRIEND = 1 << 7, // 400 NOTIFICATION_MASK_INVITATION = 1 << 8, // 401 402 NOTIFICATION_MASK_DEFAULT = NOTIFICATION_MASK_ONLINE | 403 NOTIFICATION_MASK_OFFLINE | 404 NOTIFICATION_MASK_FRIEND_ONLINE | 405 NOTIFICATION_MASK_FRIEND_MII | 406 NOTIFICATION_MASK_FRIEND_PROFILE | 407 NOTIFICATION_MASK_FRIEND_OFFLINE | 408 NOTIFICATION_MASK_BECOME_FRIEND // 409 }; 410 typedef enum NotificationMask NotificationMask; 411 412 enum FontRegion 413 { 414 FONT_REGION_JP_US_EU, 415 FONT_REGION_CHINA, 416 FONT_REGION_KOREA, 417 FONT_REGION_TAIWAN, 418 419 FONT_REGION_UNKNOWN = 255 420 }; 421 typedef enum FontRegion FontRegion; 422 423 /* Please see man pages for details 424 425 */ 426 enum JoinAvailability 427 { 428 JOIN_AVAILABILITY_JOINABLE = 0, // 429 JOIN_AVAILABILITY_JOINABLE_APP_ONLY = 1, // 430 JOIN_AVAILABILITY_NOT_JOINABLE = (JOIN_AVAILABILITY_NOT_JOINABLE_BIT | 0) // 431 }; 432 typedef enum JoinAvailability JoinAvailability; 433 434 /* Please see man pages for details 435 436 */ 437 enum MatchmakeSystemType 438 { 439 MATCHMAKE_SYSTEM_TYPE_INVALID = 0, // 440 MATCHMAKE_SYSTEM_TYPE_ANYBODY, // 441 MATCHMAKE_SYSTEM_TYPE_FRIEND, // 442 MATCHMAKE_SYSTEM_TYPE_FRIEND_INVITED, // 443 MATCHMAKE_SYSTEM_TYPE_INVITED // 444 }; 445 typedef enum MatchmakeSystemType MatchmakeSystemType; 446 447 /* Please see man pages for details */ 448 typedef ::nnfriendsFriendKey FriendKey; 449 /* Please see man pages for details */ 450 typedef ::nnfriendsProfile Profile; 451 /* Please see man pages for details 452 453 */ 454 typedef ::nnfriendsMiiData MiiData; 455 456 /* Please see man pages for details */ 457 typedef ::nnfriendsGameMode GameMode; 458 /* Please see man pages for details */ 459 typedef ::nnfriendsMyPresence MyPresence; 460 /* Please see man pages for details */ 461 typedef ::nnfriendsFriendPresence FriendPresence; 462 463 /* Please see man pages for details */ 464 typedef ::nnfriendsEventNotification EventNotification; 465 466 /* Please see man pages for details */ 467 typedef ::nnfriendsApproachContext ApproachContext; 468 469 } // end of namespace CTR 470 } // end of namespace friends 471 } // end of namespace nn 472 473 #endif // __cplusplus 474 475 #endif // NN_FRIENDS_CTR_FRIENDS_TYPES_H_ 476