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