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: 25525 $ 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 #define NN_FRIENDS_INVALID_FRIEND_CODE (0ULL) //!< 無効なフレンドコードです。 30 31 #define NN_FRIENDS_SCREEN_NAME_SIZE (11) 32 #define NN_FRIENDS_MODE_DESCRIPTION_SIZE (128) 33 #define NN_FRIENDS_MII_SIZE (96) 34 #define NN_FRIENDS_APPLICATION_ARG_SIZE (20) 35 #define NN_FRIENDS_FRIEND_LIST_SIZE (100) 36 37 /*! 38 @brief プラットフォームの種類を表す列挙体です。 39 */ 40 enum nnfriendsPlatformCode 41 { 42 NN_FRIENDS_PLATFORM_CTR = 2 //!< CTR を表すプラットフォームコードです。 43 }; 44 typedef enum nnfriendsPlatformCode nnfriendsPlatformCode; 45 46 /*! 47 @brief フレンドとの関係を属性のフラグで表す列挙体です。 48 */ 49 enum nnfriendsAttributeFlag 50 { 51 NN_FRIENDS_ATTRIBUTE_FLAG_ESTABLISHED = 1 << 0, //!< フレンド関係が成立したことがあることを表すビットです。 52 NN_FRIENDS_ATTRIBUTE_FLAG_REMOTE_ACCESSIBLE = 1 << 1 //!< オンライン上のフレンドのリソースにアクセスしてよいことを表すビットです。 53 }; 54 typedef enum nnfriendsAttributeFlag nnfriendsAttributeFlag; 55 56 /*! 57 @brief 通知の種類を表す列挙体です。 58 */ 59 enum nnfriendsNotificationType 60 { 61 NN_FRIENDS_NOTIFICATION_NONE = 0, //!< 無効な通知です。 62 NN_FRIENDS_NOTIFICATION_ONLINE, //!< 自分がオンラインになったことを表します。 63 NN_FRIENDS_NOTIFICATION_OFFLINE, //!< 自分がオフラインになったことを表します。 64 NN_FRIENDS_NOTIFICATION_FRIEND_ONLINE, //!< フレンドがオンラインになったことを表します。 65 NN_FRIENDS_NOTIFICATION_FRIEND_PRESENCE, //!< フレンドのプレゼンスが変更されたことを表します。 66 NN_FRIENDS_NOTIFICATION_FRIEND_OFFLINE, //!< フレンドがオフラインになったことを表します。 67 NN_FRIENDS_NOTIFICATION_BECOME_FRIEND, //!< フレンドとフレンド関係が成立したことを表します。 68 NN_FRIENDS_NOTIFICATION_INVITATION //!< フレンドからお誘いが来たことを表します。 69 }; 70 typedef enum nnfriendsNotificationType nnfriendsNotificationType; 71 72 ///////////////////////////////////////////////////////////////////////// 73 74 /*! @brief プリンシパル ID を表します。 */ 75 typedef u32 nnfriendsPrincipalId; 76 /*! @brief ローカルフレンドコードを表します。 */ 77 typedef u64 nnfriendsLocalFriendCode; 78 79 /*! 80 @brief ユーザのプリンシパル ID とローカルフレンドコードを包括的に扱うための構造体です。 81 */ 82 struct nnfriendsFriendKey 83 { 84 nnfriendsPrincipalId principalId; //!< プリンシパル ID が入っています。 85 NN_PADDING4; //!< 86 nnfriendsLocalFriendCode localFriendCode; //!< ローカルフレンドコードが入っています。 87 88 #ifdef __cplusplus initializennfriendsFriendKey89 inline void initialize() 90 { 91 this->principalId = NN_FRIENDS_INVALID_PRINCIPAL_ID; 92 this->localFriendCode = NN_FRIENDS_INVALID_LOCAL_FRIEND_CODE; 93 } 94 initializennfriendsFriendKey95 inline void initialize( nnfriendsPrincipalId principalId ) 96 { 97 this->principalId = principalId; 98 this->localFriendCode = NN_FRIENDS_INVALID_LOCAL_FRIEND_CODE; 99 } 100 initializennfriendsFriendKey101 inline void initialize( nnfriendsLocalFriendCode localFriendCode ) 102 { 103 this->principalId = NN_FRIENDS_INVALID_PRINCIPAL_ID; 104 this->localFriendCode = localFriendCode; 105 } 106 initializennfriendsFriendKey107 inline void initialize( nnfriendsPrincipalId principalId, nnfriendsLocalFriendCode localFriendCode ) 108 { 109 this->principalId = principalId; 110 this->localFriendCode = localFriendCode; 111 } 112 nnfriendsFriendKeynnfriendsFriendKey113 inline nnfriendsFriendKey() {} nnfriendsFriendKeynnfriendsFriendKey114 inline nnfriendsFriendKey( nnfriendsPrincipalId principalId ) { initialize(principalId); } nnfriendsFriendKeynnfriendsFriendKey115 inline nnfriendsFriendKey( nnfriendsLocalFriendCode localFriendCode ) { initialize(localFriendCode); } nnfriendsFriendKeynnfriendsFriendKey116 inline nnfriendsFriendKey( nnfriendsPrincipalId principalId, nnfriendsLocalFriendCode localFriendCode ) { initialize(principalId, localFriendCode); } 117 #endif 118 }; 119 typedef struct nnfriendsFriendKey nnfriendsFriendKey; 120 121 /*! 122 @brief ユーザのプロフィール情報が格納された構造体です。 123 */ 124 struct nnfriendsProfile 125 { 126 u8 region; //!< 本体仕向値のリージョンコードです。 127 u8 country; //!< 国コードです。 128 u8 area; //!< 地域コードです。 129 u8 language; //!< 言語コードです。 130 u8 platform; //!< プラットフォームコードです。 CTR では常に @ref nn::friends::CTR::PLATFORM_CTR が入ります。 131 NN_PADDING3; //!< 132 }; 133 typedef struct nnfriendsProfile nnfriendsProfile; 134 135 /*! 136 @brief ユーザの表示名と Mii のデータが格納された構造体です。 137 */ 138 struct nnfriendsMiiInformation 139 { 140 char16 screenName[NN_FRIENDS_SCREEN_NAME_SIZE]; //!< ユーザの表示名です。フレンド関係が成立するまでは仮登録された名前になります。 141 NN_PADDING1; //!< 142 bool isValid; //!< 取得した構造体のデータが有効であれば true 、無効であれば false が入っています。 143 u8 miiData[NN_FRIENDS_MII_SIZE]; //!< Mii のバイナリデータです。フレンド関係が成立するまでは無効なデータが入ります。 144 }; 145 typedef struct nnfriendsMiiInformation nnfriendsMiiInformation; 146 147 /*! 148 @brief フレンドが合流するために必要な、自分がプレイ中のゲームに関する情報を格納する構造体です。 149 */ 150 struct nnfriendsGameMode 151 { 152 u32 joinAvailabilityFlag; //!< 自分の参加しているマッチメイクグループにフレンドが合流可能かどうかを示します。 153 u32 matchmakeSystemType; //!< 自分の参加しているマッチメイクの種類です。 154 u32 joinGameId; //!< 合流可能なゲームタイトルを識別するための ID です。合流可能なゲームタイトル間では、いずれかのタイトルコードを共用します。 155 u32 joinGameMode; //!< 合流可能なゲームモードを識別するための値です。 0 から 63 までが指定可能です。 156 nnfriendsPrincipalId ownerPrincipalId; //!< 自分が参加しているマッチメイクグループのオーナーのプリンシパル ID を指定します。 157 u32 joinGroupId; //!< 自分が参加しているマッチメイクグループの ID を指定します。 158 u8 applicationArg[NN_FRIENDS_APPLICATION_ARG_SIZE]; //!< アプリケーションが任意に定義できる情報です。 159 }; 160 typedef struct nnfriendsGameMode nnfriendsGameMode; 161 162 /*! 163 @brief 自分のプレゼンス情報が格納された構造体です。 164 */ 165 struct nnfriendsMyPresence 166 { 167 nnfriendsGameMode gameMode; //!< 自分がフレンドに公開しているゲームモード情報が入っています。 168 char16 modeDescription[NN_FRIENDS_MODE_DESCRIPTION_SIZE]; //!< 自分がフレンドに公開しているゲームモード説明文字列が入っています。 169 }; 170 typedef struct nnfriendsMyPresence nnfriendsMyPresence; 171 172 /*! 173 @brief フレンドのプレゼンス情報が格納された構造体です。 174 */ 175 struct nnfriendsFriendPresence 176 { 177 nnfriendsGameMode gameMode; //!< フレンドが公開しているゲームモード情報が入っています。 178 bool isOnline; //!< フレンドがオンラインであれば true 、そうでなければ false が入っています。 179 bool isInvitingMe; //!< フレンドが自分をお誘い中であれば true 、そうでなければ false が入っています。 180 bool isValid; //!< 取得した構造体のデータが有効であれば true 、無効であれば false が入っています。 181 NN_PADDING1; //!< 182 }; 183 typedef struct nnfriendsFriendPresence nnfriendsFriendPresence; 184 185 /*! 186 @brief 自分のオンライン状態や、フレンドの状態変更の通知が格納された構造体です。 187 */ 188 struct nnfriendsEventNotification 189 { 190 u8 type; //!< 通知の種類が入っています。 @ref nn::friends::CTR::NotificationType の値が入ります。 191 NN_PADDING3; //!< 192 NN_PADDING4; //!< 193 nnfriendsFriendKey friendKey; //!< 変更のあったフレンドのフレンドキーが入っています。フレンドに関係のない通知の場合は無効なフレンドキーが入っています。 194 }; 195 typedef struct nnfriendsEventNotification nnfriendsEventNotification; 196 197 /*! 198 @} 199 */ 200 201 #ifdef __cplusplus 202 203 namespace nn { 204 namespace friends { 205 namespace CTR { 206 207 namespace detail { 208 209 } // end of namespace detail 210 211 /*! @brief プリンシパル ID を表します。 */ 212 typedef ::nnfriendsPrincipalId PrincipalId; 213 /*! @brief ローカルフレンドコードを表します。 */ 214 typedef ::nnfriendsLocalFriendCode LocalFriendCode; 215 216 static const PrincipalId INVALID_PRINCIPAL_ID = NN_FRIENDS_INVALID_PRINCIPAL_ID; //!< 無効な PrincipalId です。 217 static const LocalFriendCode INVALID_LOCAL_FRIEND_CODE = NN_FRIENDS_INVALID_LOCAL_FRIEND_CODE; //!< 無効な LocalFriendCode です。 218 static const u64 INVALID_FRIEND_CODE = NN_FRIENDS_INVALID_FRIEND_CODE; //!< 無効なフレンドコードです。 219 220 static const u32 SCREEN_NAME_SIZE = NN_FRIENDS_SCREEN_NAME_SIZE; 221 static const u32 MODE_DESCRIPTION_SIZE = NN_FRIENDS_MODE_DESCRIPTION_SIZE; 222 static const u32 MII_SIZE = NN_FRIENDS_MII_SIZE; 223 static const u32 APPLICATION_ARG_SIZE = NN_FRIENDS_APPLICATION_ARG_SIZE; 224 static const u32 FRIEND_LIST_SIZE = NN_FRIENDS_FRIEND_LIST_SIZE; 225 226 ///////////////////////////////////////////////////////////////////////// 227 228 /*! 229 @brief プラットフォームの種類を表す列挙体です。 230 */ 231 enum PlatformCode 232 { 233 PLATFORM_CTR = 2 //!< CTR を表すプラットフォームコードです。 234 }; 235 typedef enum PlatformCode PlatformCode; 236 237 /*! 238 @brief フレンドとの関係を属性のフラグで表す列挙体です。 239 */ 240 enum AttributeFlag 241 { 242 ATTRIBUTE_FLAG_ESTABLISHED = 1 << 0, //!< フレンド関係が成立したことがあることを表すビットです。 243 ATTRIBUTE_FLAG_REMOTE_ACCESSIBLE = 1 << 1 //!< オンライン上のフレンドのリソースにアクセスしてよいことを表すビットです。 244 }; 245 typedef enum AttributeFlag AttributeFlag; 246 247 /*! 248 @brief 通知の種類を表す列挙体です。 249 */ 250 enum NotificationType 251 { 252 NOTIFICATION_NONE = 0, //!< 無効な通知です。 253 NOTIFICATION_ONLINE, //!< 自分がオンラインになったことを表します。 254 NOTIFICATION_OFFLINE, //!< 自分がオフラインになったことを表します。 255 NOTIFICATION_FRIEND_ONLINE, //!< フレンドがオンラインになったことを表します。 256 NOTIFICATION_FRIEND_PRESENCE, //!< フレンドのプレゼンスが変更されたことを表します。 257 NOTIFICATION_FRIEND_OFFLINE, //!< フレンドがオフラインになったことを表します。 258 NOTIFICATION_BECOME_FRIEND, //!< フレンドとフレンド関係が成立したことを表します。 259 NOTIFICATION_INVITATION //!< フレンドからお誘いが来たことを表します。 260 }; 261 typedef enum NotificationType NotificationType; 262 263 /*! @brief ユーザのプリンシパル ID とローカルフレンドコードを包括的に扱うための構造体です。 */ 264 typedef ::nnfriendsFriendKey FriendKey; 265 /*! @brief ユーザのプロフィール情報が格納された構造体です。 */ 266 typedef ::nnfriendsProfile Profile; 267 /*! @brief ユーザの表示名と Mii のデータが格納された構造体です。 */ 268 typedef ::nnfriendsMiiInformation MiiInformation; 269 270 /*! @brief フレンドが合流するために必要な、自分がプレイ中のゲームに関する情報を格納する構造体です。 */ 271 typedef ::nnfriendsGameMode GameMode; 272 /*! @brief 自分のプレゼンス情報が格納された構造体です。 */ 273 typedef ::nnfriendsMyPresence MyPresence; 274 /*! @brief フレンドのプレゼンス情報が格納された構造体です。 */ 275 typedef ::nnfriendsFriendPresence FriendPresence; 276 277 /*! @brief 自分のオンライン状態や、フレンドの状態変更の通知が格納された構造体です。 */ 278 typedef ::nnfriendsEventNotification EventNotification; 279 280 } // end of namespace CTR 281 } // end of namespace friends 282 } // end of namespace nn 283 284 #endif // __cplusplus 285 286 #endif // NN_FRIENDS_CTR_FRIENDS_TYPES_H_ 287