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