1 /*---------------------------------------------------------------------------* 2 Project: Horizon 3 File: friends_Types.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 $Rev: 30610 $ 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 /*! 23 @defgroup nn_friends friends 24 @{ 25 */ 26 27 #define NN_FRIENDS_INVALID_PRINCIPAL_ID (0) //!< 無効な PrincipalId です。 28 #define NN_FRIENDS_INVALID_LOCAL_FRIEND_CODE (0ULL) //!< 無効な LocalFriendCode です。 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 36 #define NN_FRIENDS_INVALID_GAME_ID (0) 37 38 /*! 39 @brief プラットフォームの種類を表す列挙体です。 40 */ 41 enum nnfriendsPlatformCode 42 { 43 NN_FRIENDS_PLATFORM_CTR = 2 //!< CTR を表すプラットフォームコードです。 44 }; 45 typedef enum nnfriendsPlatformCode nnfriendsPlatformCode; 46 47 /*! 48 @brief フレンドとの関係を属性のフラグで表す列挙体です。 49 */ 50 enum nnfriendsAttributeFlag 51 { 52 NN_FRIENDS_ATTRIBUTE_FLAG_ESTABLISHED = 1 << 0, //!< フレンド関係が成立したことがあることを表すビットです。 53 NN_FRIENDS_ATTRIBUTE_FLAG_REMOTE_ACCESSIBLE = 1 << 1 //!< オンライン上のフレンドのリソースにアクセスしてよいことを表すビットです。 54 }; 55 typedef enum nnfriendsAttributeFlag nnfriendsAttributeFlag; 56 57 /*! 58 @brief 通知の種類を表す列挙体です。 59 */ 60 enum nnfriendsNotificationType 61 { 62 NN_FRIENDS_NOTIFICATION_NONE = 0, //!< 無効な通知です。 63 NN_FRIENDS_NOTIFICATION_ONLINE, //!< 自分がオンラインになったことを表します。 64 NN_FRIENDS_NOTIFICATION_OFFLINE, //!< 自分がオフラインになったことを表します。 65 NN_FRIENDS_NOTIFICATION_FRIEND_ONLINE, //!< フレンドがオンラインになったことを表します。 66 NN_FRIENDS_NOTIFICATION_FRIEND_PRESENCE, //!< フレンドのプレゼンスが変更されたことを表します。 67 NN_FRIENDS_NOTIFICATION_FRIEND_MII, //!< フレンドの Mii が変更されたことを表します。 68 NN_FRIENDS_NOTIFICATION_FRIEND_PROFILE, //!< フレンドのプロフィールが変更されたことを表します。 69 NN_FRIENDS_NOTIFICATION_FRIEND_OFFLINE, //!< フレンドがオフラインになったことを表します。 70 NN_FRIENDS_NOTIFICATION_BECOME_FRIEND, //!< フレンドとフレンド関係が成立したことを表します。 71 NN_FRIENDS_NOTIFICATION_INVITATION //!< フレンドからお誘いが来たことを表します。 72 }; 73 typedef enum nnfriendsNotificationType nnfriendsNotificationType; 74 75 /*! 76 @brief 通知のビットマスクを表す列挙体です。 77 */ 78 enum nnfriendsNotificationMask 79 { 80 NN_FRIENDS_NOTIFICATION_MASK_ONLINE = 1 << 0, //!< 自分がオンラインになった通知を受け取るための通知マスクです。 81 NN_FRIENDS_NOTIFICATION_MASK_OFFLINE = 1 << 1, //!< 自分がオフラインになった通知を受け取るための通知マスクです。 82 NN_FRIENDS_NOTIFICATION_MASK_FRIEND_ONLINE = 1 << 2, //!< フレンドがオンラインになった通知を受け取るための通知マスクです。 83 NN_FRIENDS_NOTIFICATION_MASK_FRIEND_PRESENCE = 1 << 3, //!< フレンドのプレゼンス変更通知を受け取るための通知マスクです。 84 NN_FRIENDS_NOTIFICATION_MASK_FRIEND_MII = 1 << 4, //!< フレンドの Mii 変更通知を受け取るための通知マスクです。 85 NN_FRIENDS_NOTIFICATION_MASK_FRIEND_PROFILE = 1 << 5, //!< フレンドのプロフィール変更通知を受け取るための通知マスクです。 86 NN_FRIENDS_NOTIFICATION_MASK_FRIEND_OFFLINE = 1 << 6, //!< フレンドがオフラインになった通知を受け取るための通知マスクです。 87 NN_FRIENDS_NOTIFICATION_MASK_BECOME_FRIEND = 1 << 7, //!< フレンドとのフレンド関係成立通知を受け取るための通知マスクです。 88 NN_FRIENDS_NOTIFICATION_MASK_INVITATION = 1 << 8, //!< フレンドからのお誘い通知を受け取るための通知マスクです。。 89 90 NN_FRIENDS_NOTIFICATION_MASK_DEFAULT = NN_FRIENDS_NOTIFICATION_MASK_ONLINE | 91 NN_FRIENDS_NOTIFICATION_MASK_OFFLINE | 92 NN_FRIENDS_NOTIFICATION_MASK_FRIEND_ONLINE | 93 NN_FRIENDS_NOTIFICATION_MASK_FRIEND_MII | 94 NN_FRIENDS_NOTIFICATION_MASK_FRIEND_PROFILE | 95 NN_FRIENDS_NOTIFICATION_MASK_FRIEND_OFFLINE | 96 NN_FRIENDS_NOTIFICATION_MASK_BECOME_FRIEND //!< デフォルトの通知マスクです。 97 }; 98 typedef enum nnfriendsNotificationMask nnfriendsNotificationMask; 99 100 enum nnfriendsFontRegion 101 { 102 NN_FRIENDS_FONT_REGION_JP_US_EU, 103 NN_FRIENDS_FONT_REGION_CHINA, 104 NN_FRIENDS_FONT_REGION_KOREA, 105 NN_FRIENDS_FONT_REGION_TAIWAN, 106 107 NN_FRIENDS_FONT_REGION_UNKNOWN = 255 108 }; 109 typedef enum nnfriendsFontRegion nnfriendsFontRegion; 110 111 ///////////////////////////////////////////////////////////////////////// 112 113 /*! @brief プリンシパル ID を表します。 */ 114 typedef u32 nnfriendsPrincipalId; 115 /*! @brief ローカルフレンドコードを表します。 */ 116 typedef u64 nnfriendsLocalFriendCode; 117 118 /*! 119 @brief ユーザのプリンシパル ID とローカルフレンドコードを包括的に扱うための構造体です。 120 */ 121 struct nnfriendsFriendKey 122 { 123 nnfriendsPrincipalId principalId; //!< プリンシパル ID が入っています。 124 NN_PADDING4; //!< 125 nnfriendsLocalFriendCode localFriendCode; //!< ローカルフレンドコードが入っています。 126 127 #ifdef __cplusplus initializennfriendsFriendKey128 inline void initialize() 129 { 130 this->principalId = NN_FRIENDS_INVALID_PRINCIPAL_ID; 131 this->localFriendCode = NN_FRIENDS_INVALID_LOCAL_FRIEND_CODE; 132 } 133 initializennfriendsFriendKey134 inline void initialize( nnfriendsPrincipalId principalId ) 135 { 136 this->principalId = principalId; 137 this->localFriendCode = NN_FRIENDS_INVALID_LOCAL_FRIEND_CODE; 138 } 139 initializennfriendsFriendKey140 inline void initialize( nnfriendsLocalFriendCode localFriendCode ) 141 { 142 this->principalId = NN_FRIENDS_INVALID_PRINCIPAL_ID; 143 this->localFriendCode = localFriendCode; 144 } 145 initializennfriendsFriendKey146 inline void initialize( nnfriendsPrincipalId principalId, nnfriendsLocalFriendCode localFriendCode ) 147 { 148 this->principalId = principalId; 149 this->localFriendCode = localFriendCode; 150 } 151 nnfriendsFriendKeynnfriendsFriendKey152 inline nnfriendsFriendKey() {} nnfriendsFriendKeynnfriendsFriendKey153 inline nnfriendsFriendKey( nnfriendsPrincipalId principalId ) { initialize(principalId); } nnfriendsFriendKeynnfriendsFriendKey154 inline nnfriendsFriendKey( nnfriendsLocalFriendCode localFriendCode ) { initialize(localFriendCode); } nnfriendsFriendKeynnfriendsFriendKey155 inline nnfriendsFriendKey( nnfriendsPrincipalId principalId, nnfriendsLocalFriendCode localFriendCode ) { initialize(principalId, localFriendCode); } 156 #endif 157 }; 158 typedef struct nnfriendsFriendKey nnfriendsFriendKey; 159 160 /*! 161 @brief ユーザのプロフィール情報が格納された構造体です。 162 */ 163 struct nnfriendsProfile 164 { 165 u8 region; //!< 本体仕向地のリージョンコードです。 166 u8 country; //!< 国コードです。 167 u8 area; //!< 地域コードです。 168 u8 language; //!< 言語コードです。 169 u8 platform; //!< プラットフォームコードです。 CTR では常に @ref nn::friends::CTR::PLATFORM_CTR が入ります。 170 NN_PADDING3; //!< 171 }; 172 typedef struct nnfriendsProfile nnfriendsProfile; 173 174 /*! 175 @brief Mii のデータが格納された構造体です。 176 177 この構造体の内容を利用するには、別途「似顔絵ライブラリ」が必要です。 178 */ 179 struct nnfriendsMiiData 180 { 181 union { 182 u8 data[NN_FRIENDS_MII_SIZE]; //!< Mii のバイナリデータです。フレンド関係が成立するまでは無効なデータが入ります。 183 u32 value32[NN_FRIENDS_MII_SIZE / sizeof(u32)]; //!< 184 }; 185 }; 186 typedef struct nnfriendsMiiData nnfriendsMiiData; 187 188 /*! 189 @brief フレンドが合流するために必要な、自分がプレイ中のゲームに関する情報を格納する構造体です。 190 191 ローンチではこの構造体を使用する機能は提供されません。 192 */ 193 struct nnfriendsGameMode 194 { 195 u32 joinAvailabilityFlag; //!< 自分の参加しているマッチメイクグループにフレンドが合流可能かどうかを示します。 196 u32 matchmakeSystemType; //!< 自分の参加しているマッチメイクの種類です。 197 u32 joinGameId; //!< 合流可能なゲームタイトルを識別するための ID です。合流可能なゲームタイトル間では、いずれかのタイトルコードを共用します。 198 u32 joinGameMode; //!< 合流可能なゲームモードを識別するための値です。 0 から 63 までが指定可能です。 199 nnfriendsPrincipalId ownerPrincipalId; //!< 自分が参加しているマッチメイクグループのオーナーのプリンシパル ID を指定します。 200 u32 joinGroupId; //!< 自分が参加しているマッチメイクグループの ID を指定します。 201 u8 applicationArg[NN_FRIENDS_APPLICATION_ARG_SIZE]; //!< アプリケーションが任意に定義できる情報です。 202 }; 203 typedef struct nnfriendsGameMode nnfriendsGameMode; 204 205 /*! 206 @brief 自分のプレゼンス情報が格納された構造体です。 207 */ 208 struct nnfriendsMyPresence 209 { 210 nnfriendsGameMode gameMode; //!< 自分がフレンドに公開しているゲームモード情報が入っています。 211 char16 modeDescription[NN_FRIENDS_MODE_DESCRIPTION_SIZE]; //!< 自分がフレンドに公開しているゲームモード説明文字列が入っています。 212 }; 213 typedef struct nnfriendsMyPresence nnfriendsMyPresence; 214 215 /*! 216 @brief フレンドのプレゼンス情報が格納された構造体です。 217 */ 218 struct nnfriendsFriendPresence 219 { 220 nnfriendsGameMode gameMode; //!< フレンドが公開しているゲームモード情報が入っています。 221 bool isOnline; //!< フレンドがオンラインであれば true 、そうでなければ false が入っています。 222 bool isInvitingMe; //!< フレンドが自分をお誘い中であれば true 、そうでなければ false が入っています。ローンチではこの値を使用する機能は提供されません。 223 bool isValid; //!< 取得した構造体のデータが有効であれば true 、無効であれば false が入っています。 224 NN_PADDING1; //!< 225 }; 226 typedef struct nnfriendsFriendPresence nnfriendsFriendPresence; 227 228 /*! 229 @brief 自分のオンライン状態や、フレンドの状態変更の通知が格納された構造体です。 230 */ 231 struct nnfriendsEventNotification 232 { 233 u8 type; //!< 通知の種類が入っています。 @ref nn::friends::CTR::NotificationType の値が入ります。 234 NN_PADDING3; //!< 235 NN_PADDING4; //!< 236 nnfriendsFriendKey friendKey; //!< 変更のあったフレンドのフレンドキーが入っています。フレンドに関係のない通知の場合は無効なフレンドキーが入っています。 237 }; 238 typedef struct nnfriendsEventNotification nnfriendsEventNotification; 239 240 /*! 241 @} 242 */ 243 244 #ifdef __cplusplus 245 246 namespace nn { 247 namespace friends { 248 namespace CTR { 249 250 namespace detail { 251 252 } // end of namespace detail 253 254 /*! @brief プリンシパル ID を表します。 */ 255 typedef ::nnfriendsPrincipalId PrincipalId; 256 /*! @brief ローカルフレンドコードを表します。 */ 257 typedef ::nnfriendsLocalFriendCode LocalFriendCode; 258 259 static const PrincipalId INVALID_PRINCIPAL_ID = NN_FRIENDS_INVALID_PRINCIPAL_ID; //!< 無効な PrincipalId です。 260 static const LocalFriendCode INVALID_LOCAL_FRIEND_CODE = NN_FRIENDS_INVALID_LOCAL_FRIEND_CODE; //!< 無効な LocalFriendCode です。 261 262 static const u32 SCREEN_NAME_SIZE = NN_FRIENDS_SCREEN_NAME_SIZE; 263 static const u32 MODE_DESCRIPTION_SIZE = NN_FRIENDS_MODE_DESCRIPTION_SIZE; 264 static const u32 MII_SIZE = NN_FRIENDS_MII_SIZE; 265 static const u32 APPLICATION_ARG_SIZE = NN_FRIENDS_APPLICATION_ARG_SIZE; 266 static const u32 FRIEND_LIST_SIZE = NN_FRIENDS_FRIEND_LIST_SIZE; 267 268 static const u32 INVALID_GAME_ID = NN_FRIENDS_INVALID_GAME_ID; 269 270 ///////////////////////////////////////////////////////////////////////// 271 272 /*! 273 @brief プラットフォームの種類を表す列挙体です。 274 */ 275 enum PlatformCode 276 { 277 PLATFORM_CTR = 2 //!< CTR を表すプラットフォームコードです。 278 }; 279 typedef enum PlatformCode PlatformCode; 280 281 /*! 282 @brief フレンドとの関係を属性のフラグで表す列挙体です。 283 */ 284 enum AttributeFlag 285 { 286 ATTRIBUTE_FLAG_ESTABLISHED = 1 << 0, //!< フレンド関係が成立したことがあることを表すビットです。 287 ATTRIBUTE_FLAG_REMOTE_ACCESSIBLE = 1 << 1 //!< オンライン上のフレンドのリソースにアクセスしてよいことを表すビットです。 288 }; 289 typedef enum AttributeFlag AttributeFlag; 290 291 /*! 292 @brief 通知の種類を表す列挙体です。 293 */ 294 enum NotificationType 295 { 296 NOTIFICATION_NONE = 0, //!< 無効な通知です。 297 NOTIFICATION_ONLINE, //!< 自分がオンラインになったことを表します。 298 NOTIFICATION_OFFLINE, //!< 自分がオフラインになったことを表します。 299 NOTIFICATION_FRIEND_ONLINE, //!< フレンドがオンラインになったことを表します。 300 NOTIFICATION_FRIEND_PRESENCE, //!< フレンドのプレゼンスが変更されたことを表します。 301 NOTIFICATION_FRIEND_MII, //!< フレンドの Mii が変更されたことを表します。 302 NOTIFICATION_FRIEND_PROFILE, //!< フレンドのプロフィールが変更されたことを表します。 303 NOTIFICATION_FRIEND_OFFLINE, //!< フレンドがオフラインになったことを表します。 304 NOTIFICATION_BECOME_FRIEND, //!< フレンドとフレンド関係が成立したことを表します。 305 NOTIFICATION_INVITATION //!< フレンドからお誘いが来たことを表します。 306 }; 307 typedef enum NotificationType NotificationType; 308 309 /*! 310 @brief 通知のビットマスクを表す列挙体です。 311 */ 312 enum NotificationMask 313 { 314 NOTIFICATION_MASK_ONLINE = 1 << 0, //!< 自分がオンラインになった通知を受け取るための通知マスクです。 315 NOTIFICATION_MASK_OFFLINE = 1 << 1, //!< 自分がオフラインになった通知を受け取るための通知マスクです。 316 NOTIFICATION_MASK_FRIEND_ONLINE = 1 << 2, //!< フレンドがオンラインになった通知を受け取るための通知マスクです。 317 NOTIFICATION_MASK_FRIEND_PRESENCE = 1 << 3, //!< フレンドのプレゼンス変更通知を受け取るための通知マスクです。 318 NOTIFICATION_MASK_FRIEND_MII = 1 << 4, //!< フレンドの Mii 変更通知を受け取るための通知マスクです。 319 NOTIFICATION_MASK_FRIEND_PROFILE = 1 << 5, //!< フレンドのプロフィール変更通知を受け取るための通知マスクです。 320 NOTIFICATION_MASK_FRIEND_OFFLINE = 1 << 6, //!< フレンドがオフラインになった通知を受け取るための通知マスクです。 321 NOTIFICATION_MASK_BECOME_FRIEND = 1 << 7, //!< フレンドとのフレンド関係成立通知を受け取るための通知マスクです。 322 NOTIFICATION_MASK_INVITATION = 1 << 8, //!< フレンドからのお誘い通知を受け取るための通知マスクです。 323 324 NOTIFICATION_MASK_DEFAULT = NOTIFICATION_MASK_ONLINE | 325 NOTIFICATION_MASK_OFFLINE | 326 NOTIFICATION_MASK_FRIEND_ONLINE | 327 NOTIFICATION_MASK_FRIEND_MII | 328 NOTIFICATION_MASK_FRIEND_PROFILE | 329 NOTIFICATION_MASK_FRIEND_OFFLINE | 330 NOTIFICATION_MASK_BECOME_FRIEND //!< デフォルトの通知マスクです。 331 }; 332 typedef enum NotificationMask NotificationMask; 333 334 enum FontRegion 335 { 336 FONT_REGION_JP_US_EU, 337 FONT_REGION_CHINA, 338 FONT_REGION_KOREA, 339 FONT_REGION_TAIWAN, 340 341 FONT_REGION_UNKNOWN = 255 342 }; 343 typedef enum FontRegion FontRegion; 344 345 /*! @brief ユーザのプリンシパル ID とローカルフレンドコードを包括的に扱うための構造体です。 */ 346 typedef ::nnfriendsFriendKey FriendKey; 347 /*! @brief ユーザのプロフィール情報が格納された構造体です。 */ 348 typedef ::nnfriendsProfile Profile; 349 /*! @brief Mii のデータが格納された構造体です。 350 351 この構造体の内容を利用するには、別途「似顔絵ライブラリ」が必要です。 */ 352 typedef ::nnfriendsMiiData MiiData; 353 354 /*! @brief フレンドが合流するために必要な、自分がプレイ中のゲームに関する情報を格納する構造体です。 355 356 ローンチではこの構造体を使用する機能は提供されません。 357 */ 358 typedef ::nnfriendsGameMode GameMode; 359 /*! @brief 自分のプレゼンス情報が格納された構造体です。 */ 360 typedef ::nnfriendsMyPresence MyPresence; 361 /*! @brief フレンドのプレゼンス情報が格納された構造体です。 */ 362 typedef ::nnfriendsFriendPresence FriendPresence; 363 364 /*! @brief 自分のオンライン状態や、フレンドの状態変更の通知が格納された構造体です。 */ 365 typedef ::nnfriendsEventNotification EventNotification; 366 367 } // end of namespace CTR 368 } // end of namespace friends 369 } // end of namespace nn 370 371 #endif // __cplusplus 372 373 #endif // NN_FRIENDS_CTR_FRIENDS_TYPES_H_ 374