1 /*---------------------------------------------------------------------------*
2   Project:  Horizon
3   File:     friends_Api.h
4 
5   Copyright 2009 Nintendo.  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: 36664 $
14  *---------------------------------------------------------------------------*/
15 
16 #ifndef NN_FRIENDS_CTR_FRIENDS_API_H_
17 #define NN_FRIENDS_CTR_FRIENDS_API_H_
18 
19 /*! @file
20     @brief      フレンドプレゼンス機能に関する API の宣言
21 */
22 
23 #include <nn/types.h>
24 
25 #include <nn/friends/friends_Result.h>
26 #include <nn/friends/CTR/friends_Types.h>
27 
28 #include <nn/uds/CTR/uds_Type.h>
29 
30 #ifdef __cplusplus
31 
32 namespace nn {
33 namespace friends {
34 namespace CTR {
35 
36     namespace detail
37     {
38         // ライブラリの初期化・終了
39         Result Initialize();
40         Result Finalize();
41 
42         // ライブラリ状態確認
43         bool IsInitialized();
44         bool HasLoggedIn();
45 
46         // 接続管理
47         Result Login( os::Event* pEvent );
48         Result Logout();
49 
50         // 自分情報取得(ローカル)
51         PrincipalId     GetMyPrincipalId();
52         Result GetMyPreference( bool* pIsPublicMode, bool* pIsShowGameName, bool* pIsShowPlayedGame );
53         Result GetMyProfile( Profile* pProfile );
54         Result GetMyPresence( MyPresence* pMyPresence );
55         Result GetMyScreenName( char16 screenName[SCREEN_NAME_SIZE] );
56         Result GetMyMii( MiiData* pMiiData );
57 
58         // 友達情報取得
59         Result GetFriendKeyList( FriendKey* pFriendKeyList, size_t* pNum, size_t offset, size_t size );
60         Result GetFriendPresence( FriendPresence* pFriendPresenceList, const FriendKey* pFriendKeyList, size_t size );
61         Result GetFriendPresence( FriendPresence* pFriendPresenceList, const PrincipalId* pPrincipalIdList, size_t size );
62         Result GetFriendScreenName( char16 (*pScreenNameList)[SCREEN_NAME_SIZE], const FriendKey* pFriendKeyList, size_t size, bool replaceForeignCharacters, u8* pFontRegionList );
63         Result GetFriendScreenName( char16 (*pScreenNameList)[SCREEN_NAME_SIZE], const PrincipalId* pPrincipalIdList, size_t size, bool replaceForeignCharacters, u8* pFontRegionList );
64         Result GetFriendMii( MiiData* pMiiDataList, const FriendKey* pFriendKeyList, size_t size );
65         Result GetFriendMii( MiiData* pMiiDataList, const PrincipalId* pPrincipalIdList, size_t size );
66         Result GetFriendProfile( Profile* pProfileList, const FriendKey* pFriendKeyList, size_t size );
67         Result GetFriendProfile( Profile* pProfileList, const PrincipalId* pPrincipalIdList, size_t size );
68         Result GetFriendAttributeFlags( bit32* pAttributeFlagsList, const FriendKey* pFriendKeyList, size_t size );
69         Result GetFriendAttributeFlags( bit32* pAttributeFlagsList, const PrincipalId* pPrincipalIdList, size_t size );
70         Result UnscrambleLocalFriendCode( LocalFriendCode* pLocalFriendCodeList, const uds::CTR::ScrambledLocalFriendCode* pScrambledLocalFriendCodeList, size_t size );
71 
72         // 自分情報更新
73         Result UpdateGameModeDescription( const char16 description[MODE_DESCRIPTION_SIZE] );
74 
75         // 通知内容取得
76         Result AttachToEventNotification( nn::os::Event* pEvent );
77         Result SetNotificationMask( bit32 mask );
78         u32 GetEventNotification( EventNotification* pEventNotificationList, size_t size, bool* pHasOverflowed );
79         Result GetLastResponseResult();
80 
81         // エラーコード取得
82         u32 ResultToErrorCode( const Result& result );
83     }
84 
85     namespace
86     {
87         static const char PORT_NAME_USER[]  = "frd:u";
88     }
89 
90     /*-------------------------------------------------------------------
91     ライブラリの初期化/終了
92     -------------------------------------------------------------------*/
93 
94     /*!
95     @brief          フレンドプレゼンスライブラリの初期化を行い、プレゼンス機能を使用可能な状態にします。
96 
97     @return         処理の結果が返ってきます。<BR>
98 
99     @retval         ResultSuccess                       成功しました。
100     @retval         その他                              デーモンの内部状態などにより、その他の結果が返ることがあります。
101     */
102     Result Initialize();
Initialize()103     inline Result Initialize()
104     {
105         return detail::Initialize();
106     }
107 
108     /*!
109     @brief          フレンドプレゼンスライブラリを終了します。
110 
111                     複数回 @ref nn::friends::CTR::Initialize 関数を呼んだ場合、この関数も同じ回数呼ぶ必要があります。
112                     <BR>
113                     ライブラリが未初期化の状態でコールしても成功します。<BR>
114 
115     @return         処理の結果が返ってきます。<BR>
116 
117     @retval         ResultSuccess                       成功しました。
118     @retval         その他                              デーモンの内部状態などにより、その他の結果が返ることがあります。
119     */
120     Result Finalize();
Finalize()121     inline Result Finalize()
122     {
123         return detail::Finalize();
124     }
125 
126     /*!
127     @brief          フレンドプレゼンスライブラリが初期化済みか否かを確認します。
128 
129     @return         フレンドプレゼンスライブラリが初期化済みであれば true 、未初期化であれば false が返ってきます。
130 
131     @retval         true                                フレンドプレゼンスライブラリは初期化済みです。
132     @retval         false                               フレンドプレゼンスライブラリは初期化されていません。
133     */
134     bool IsInitialized();
IsInitialized()135     inline bool IsInitialized()
136     {
137         return detail::IsInitialized();
138     }
139 
140     /*!
141     @brief          自アプリのログイン状態を確認します。
142 
143                     自アプリが @ref nn::friends::CTR::Login 関数を呼んだ上でオンライン状態になっているかを確認します。
144 
145     @return         自アプリがログイン中であれば true 、ログインしていなければ false が返ってきます。
146                     この関数の結果が true であれば必ずオンライン状態ですが、結果が false であってもシステムがログイン要求を出している場合があり、オフライン状態とは限りません。
147 
148     @retval         true                                自アプリがフレンドサーバにログインしています。
149     @retval         false                               自アプリはフレンドサーバにログインしていません。
150     */
151     bool HasLoggedIn();
HasLoggedIn()152     inline bool HasLoggedIn()
153     {
154         return detail::HasLoggedIn();
155     }
156 
157     /*!
158     @brief          サーバへのログインを要求します。
159 
160                     この関数が成功で返った場合は非同期処理が発生し、非同期処理が完了した時点で引数に指定した @ref nn::os::Event がシグナルされます。
161                     非同期処理の結果は @ref nn::friends::CTR::GetLastResponseResult で取得できます。
162                     この関数が失敗で返った場合は、非同期処理が発生することはありません。<BR>
163                     <BR>
164                     この関数を呼ぶには、事前に @ref nn::ac::Connect もしくは @ref nn::ac::ConnectAsync 関数を呼んで AP との接続を確立しておく必要があります。
165                     AP との接続を確立せずに呼んだ場合は @ref nn::friends::ResultAcNotConnected を返します。<BR>
166                     <BR>
167                     バックグラウンドでサーバからの切断処理が走っていた場合、この関数は一時的に @ref nn::friends::ResultTemporarilyBusy を返します。
168                     その場合は比較的短時間が経過した後に再試行することで成功する可能性があります。<BR>
169                     <BR>
170                     すでにログインしている状態でコールしても成功します。その場合、非同期処理は瞬時に成功で完了します。<BR>
171                     <BR>
172                     非同期処理が成功した場合、必ずオンライン状態になります。
173 
174     @param[in]      pEvent  非同期処理の完了を通知する @ref nn::os::Event へのポインタを指定します。事前に @ref nn::os::Event::Initialize で初期化しておいてください。
175 
176     @return         処理の結果が返ってきます。
177 
178     @retval         ResultSuccess                       非同期処理の開始に成功しました。
179     @retval         ResultAlreadyDone                   非同期処理の開始に成功しました。
180     @retval         ResultTemporarilyBusy               内部状態が一時的にビジーなため、非同期処理の開始に失敗しました。
181     @retval         ResultAcNotConnected                ac への接続要求を出していません。
182     @retval         ResultInvalidPointer                引数に渡したポインタが無効です。
183     @retval         ResultInvalidHandle                 引数に渡した @ref nn::os::Event のハンドルが無効です。
184     @retval         ResultNotInitialized                フレンドプレゼンスライブラリが初期化されていません。
185     @retval         その他                              デーモンの内部状態などにより、その他の結果が返ることがあります。
186     */
187     Result Login( os::Event* pEvent );
Login(os::Event * pEvent)188     inline Result Login( os::Event* pEvent )
189     {
190         return detail::Login( pEvent );
191     }
192 
193     /*!
194     @brief          サーバへのログイン要求を撤回します。
195 
196                     すでにログアウトしている状態でコールしても成功します。<BR>
197                     <BR>
198                     この関数が成功しても、オフライン状態であることは保証されません。<BR>
199                     <BR>
200                     何らかの要因によりサーバとの接続が切断された場合、この関数をコール済みの状態へ暗黙的に遷移します。
201 
202     @return         処理の結果が返ってきます。
203 
204     @retval         ResultSuccess                       成功しました。
205     @retval         ResultNotInitialized                フレンドプレゼンスライブラリが初期化されていません。
206     @retval         その他                              デーモンの内部状態などにより、その他の結果が返ることがあります。
207     */
208     Result Logout();
Logout()209     inline Result Logout()
210     {
211         return detail::Logout();
212     }
213 
214     /*!
215     @brief          自分のプリンシパル ID を取得します。
216 
217     @return         自分のプリンシパル ID が返ってきます。<BR>
218                     <BR>
219                     ライブラリが未初期化であったり、まだ一度もサーバに接続したことがないと @ref nn::friends::CTR::INVALID_PRINCIPAL_ID が返ってきます。
220 
221     @retval         INVALID_PRINCIPAL_ID                無効なプリンシパル ID です。
222     @retval         その他                              自分のプリンシパル ID です。
223     */
224     PrincipalId GetMyPrincipalId();
GetMyPrincipalId()225     inline PrincipalId GetMyPrincipalId()
226     {
227         return detail::GetMyPrincipalId();
228     }
229 
230     /*!
231     @brief          自分の情報の公開レベルを取得します。
232 
233     @param[out]     pIsPublicMode        公開モードを格納するバッファへのポインタを指定します。
234     @param[out]     pIsShowGameName      遊んでいるゲームを公開するかを格納するバッファへのポインタを指定します。
235     @param[out]     pIsShowPlayedGame    ゲーム履歴を公開するかを格納するバッファへのポインタを指定します。
236 
237     @return         処理の結果が返ってきます。
238 
239     @retval         ResultSuccess                       成功しました。
240     @retval         ResultInvalidPointer                引数に渡したポインタが無効です。
241     @retval         ResultNotInitialized                フレンドプレゼンスライブラリが初期化されていません。
242     @retval         その他                              デーモンの内部状態などにより、その他の結果が返ることがあります。
243     */
244     Result GetMyPreference( bool* pIsPublicMode, bool* pIsShowGameName, bool* pIsShowPlayedGame );
GetMyPreference(bool * pIsPublicMode,bool * pIsShowGameName,bool * pIsShowPlayedGame)245     inline Result GetMyPreference( bool* pIsPublicMode, bool* pIsShowGameName, bool* pIsShowPlayedGame )
246     {
247         return detail::GetMyPreference( pIsPublicMode, pIsShowGameName, pIsShowPlayedGame );
248     }
249 
250     /*!
251     @brief          自分のプロフィール情報を取得します。
252 
253     @param[out]     pProfile    自分のプロフィール情報を格納する構造体へのポインタを指定します。
254 
255     @return         処理の結果が返ってきます。
256 
257     @retval         ResultSuccess                       成功しました。
258     @retval         ResultInvalidPointer                引数に渡したポインタが無効です。
259     @retval         ResultNotInitialized                フレンドプレゼンスライブラリが初期化されていません。
260     @retval         その他                              デーモンの内部状態などにより、その他の結果が返ることがあります。
261     */
262     Result GetMyProfile( Profile* pProfile );
GetMyProfile(Profile * pProfile)263     inline Result GetMyProfile( Profile* pProfile )
264     {
265         return detail::GetMyProfile( pProfile );
266     }
267 
268     /*!
269     @brief          自分のプレゼンス情報を取得します。
270 
271     @param[out]     pMyPresence     自分のプレゼンス情報を格納する構造体へのポインタを指定します。
272 
273     @return         処理の結果が返ってきます。
274 
275     @retval         ResultSuccess                       成功しました。
276     @retval         ResultInvalidPointer                引数に渡したポインタが無効です。
277     @retval         ResultNotInitialized                フレンドプレゼンスライブラリが初期化されていません。
278     @retval         その他                              デーモンの内部状態などにより、その他の結果が返ることがあります。
279     */
280     Result GetMyPresence( MyPresence* pMyPresence );
GetMyPresence(MyPresence * pMyPresence)281     inline Result GetMyPresence( MyPresence* pMyPresence )
282     {
283         return detail::GetMyPresence( pMyPresence );
284     }
285 
286     /*!
287     @brief          自分の表示名を取得します。
288 
289     @param[out]     screenName  自分の表示名を格納するバッファを指定します。
290 
291                     「Mii スタジオ」で「じぶんの Mii」を設定していない場合、空の表示名が取得されます。
292                     この場合も、関数自体は成功を返します。
293 
294     @return         処理の結果が返ってきます。
295 
296     @retval         ResultSuccess                       成功しました。
297     @retval         ResultInvalidPointer                引数に渡したポインタが無効です。
298     @retval         ResultNotInitialized                フレンドプレゼンスライブラリが初期化されていません。
299     @retval         その他                              デーモンの内部状態などにより、その他の結果が返ることがあります。
300     */
301     Result GetMyScreenName( char16 screenName[SCREEN_NAME_SIZE] );
GetMyScreenName(char16 screenName[SCREEN_NAME_SIZE])302     inline Result GetMyScreenName( char16 screenName[SCREEN_NAME_SIZE] )
303     {
304         return detail::GetMyScreenName( screenName );
305     }
306 
307     /*!
308     @brief          自分の Mii データを取得します。
309 
310                     「Mii スタジオ」で「じぶんの Mii」を設定していない場合、空の Mii データが取得されます。
311                     この場合も、関数自体は成功を返します。<BR>
312                     <BR>
313                     取得した Mii データを利用するには別途「似顔絵ライブラリ」が必要です。
314 
315     @param[out]     pMiiData  自分の Mii データを格納する構造体へのポインタを指定します。
316 
317     @return         処理の結果が返ってきます。
318 
319     @retval         ResultSuccess                       成功しました。
320     @retval         ResultInvalidPointer                引数に渡したポインタが無効です。
321     @retval         ResultNotInitialized                フレンドプレゼンスライブラリが初期化されていません。
322     @retval         その他                              デーモンの内部状態などにより、その他の結果が返ることがあります。
323     */
324     Result GetMyMii( MiiData* pMiiData );
GetMyMii(MiiData * pMiiData)325     inline Result GetMyMii( MiiData* pMiiData )
326     {
327         return detail::GetMyMii( pMiiData );
328     }
329 
330     /*!
331     @brief          フレンドリストに登録されたフレンドキーのリストを取得します。
332 
333                     取得されるフレンドキーには、まだフレンド関係が成立していないものも含まれます。
334 
335     @param[out]     pFriendKeyList  取得したフレンドキーを格納するバッファへのポインタを指定します。
336     @param[out]     pNum            実際に取得された数を格納するバッファへのポインタを指定します。
337     @param[in]      offset          取得を開始するフレンドキーのインデックスを指定します。
338     @param[in]      size            取得するフレンドキーの最大数(バッファの要素数)を指定します。
339 
340     @return         処理の結果が返ってきます。
341 
342     @retval         ResultSuccess                       成功しました。
343     @retval         ResultInvalidPointer                引数に渡したポインタが無効です。
344     @retval         ResultTooLarge                      引数に渡したサイズの値が大きすぎます。
345     @retval         ResultNotInitialized                フレンドプレゼンスライブラリが初期化されていません。
346     @retval         その他                              デーモンの内部状態などにより、その他の結果が返ることがあります。
347     */
348     Result GetFriendKeyList( FriendKey* pFriendKeyList, size_t* pNum, size_t offset = 0, size_t size = FRIEND_LIST_SIZE );
GetFriendKeyList(FriendKey * pFriendKeyList,size_t * pNum,size_t offset,size_t size)349     inline Result GetFriendKeyList( FriendKey* pFriendKeyList, size_t* pNum, size_t offset, size_t size)
350     {
351         return detail::GetFriendKeyList( pFriendKeyList, pNum, offset, size );
352     }
353 
354     /*!
355     @brief          フレンドプレゼンスのリストを取得します。
356 
357                     自分と異なる合流ゲーム ID を指定しているフレンドのゲームモードとお誘いフラグは取得できません。<BR>
358                     <BR>
359                     引数で与えられたキーに対応するフレンドが存在しないと、該当のバッファには空のプレゼンスが返されます。
360                     この場合も、関数自体は成功を返します。
361 
362     @param[out]     pFriendPresenceList     取得したフレンドプレゼンスを格納するバッファへのポインタを指定します。
363     @param[in]      pFriendKeyList          フレンドキーのリストへのポインタを指定します。
364     @param[in]      size                    フレンドキーのリストの要素数(バッファの要素数)を指定します。
365 
366     @return         処理の結果が返ってきます。
367 
368     @retval         ResultSuccess                       成功しました。
369     @retval         ResultInvalidPointer                引数に渡したポインタが無効です。
370     @retval         ResultTooLarge                      引数に渡したサイズの値が大きすぎます。
371     @retval         ResultNotInitialized                フレンドプレゼンスライブラリが初期化されていません。
372     @retval         その他                              デーモンの内部状態などにより、その他の結果が返ることがあります。
373     */
374     Result GetFriendPresence( FriendPresence* pFriendPresenceList, const FriendKey* pFriendKeyList, size_t size = 1 );
GetFriendPresence(FriendPresence * pFriendPresenceList,const FriendKey * pFriendKeyList,size_t size)375     inline Result GetFriendPresence( FriendPresence* pFriendPresenceList, const FriendKey* pFriendKeyList, size_t size)
376     {
377         return detail::GetFriendPresence( pFriendPresenceList, pFriendKeyList, size );
378     }
379 
380     /*!
381     @brief          フレンドプレゼンスのリストを取得します。
382 
383                     自分と異なる合流ゲーム ID を指定したフレンドのゲームモードとお誘いフラグは取得できません。<BR>
384                     <BR>
385                     引数で与えられたキーに対応するフレンドが存在しないと、該当のバッファには空のプレゼンスが返されます。
386                     この場合も、関数自体は成功を返します。
387 
388     @param[out]     pFriendPresenceList     取得したフレンドプレゼンスを格納するバッファへのポインタを指定します。
389     @param[in]      pPrincipalIdList        プリンシパル ID のリストへのポインタを指定します。
390     @param[in]      size                    プリンシパル ID のリストの要素数(バッファの要素数)を指定します。
391 
392     @return         処理の結果が返ってきます。
393 
394     @retval         ResultSuccess                       成功しました。
395     @retval         ResultInvalidPointer                引数に渡したポインタが無効です。
396     @retval         ResultTooLarge                      引数に渡したサイズの値が大きすぎます。
397     @retval         ResultNotInitialized                フレンドプレゼンスライブラリが初期化されていません。
398     @retval         その他                              デーモンの内部状態などにより、その他の結果が返ることがあります。
399     */
400     Result GetFriendPresence( FriendPresence* pFriendPresenceList, const PrincipalId* pPrincipalIdList, size_t size = 1 );
GetFriendPresence(FriendPresence * pFriendPresenceList,const PrincipalId * pPrincipalIdList,size_t size)401     inline Result GetFriendPresence( FriendPresence* pFriendPresenceList, const PrincipalId* pPrincipalIdList, size_t size)
402     {
403         return detail::GetFriendPresence( pFriendPresenceList, pPrincipalIdList, size );
404     }
405 
406     /*!
407     @brief          フレンドの表示名のリストを取得します。
408 
409                     この関数を使用すると、「似顔絵ライブラリ」を使用せずにフレンドの Mii の名前を直接取得することができます。
410                     また、対象がフレンド関係成立待ち状態で Mii が取得できない場合でも、自分が仮登録した表示名が取得されます。<BR>
411                     <BR>
412                     フレンドの Mii がブラックリストに含まれていた場合でも生の名前が取得されますが、
413                     フレンドの Mii の名前が NG ネームだった場合は ??? に置換されて取得されます。<BR>
414                     <BR>
415                     引数で与えられたキーに対応するフレンドが存在しないと、該当のバッファには空の表示名が返されます。
416                     この場合も、関数自体は成功を返します。
417 
418     @param[out]     pScreenNameList             取得した表示名を格納するバッファへのポインタを指定します。
419     @param[in]      pFriendKeyList              フレンドキーのリストへのポインタを指定します。
420     @param[in]      size                        フレンドキーのリストの要素数(バッファの要素数)を指定します。
421     @param[in]      replaceForeignCharacters    フレンドの表示名のフォントリージョンが自分と異なる場合に、 ASCII 以外の文字を ? で置換するかを指定します。
422     @param[in]      pFontRegionList             フレンドの表示名のフォントリージョンを格納するバッファへのポインタを指定します。不要な場合は NULL を指定してください。
423 
424     @return         処理の結果が返ってきます。
425 
426     @retval         ResultSuccess                       成功しました。
427     @retval         ResultInvalidPointer                引数に渡したポインタが無効です。
428     @retval         ResultTooLarge                      引数に渡したサイズの値が大きすぎます。
429     @retval         ResultNotInitialized                フレンドプレゼンスライブラリが初期化されていません。
430     @retval         その他                              デーモンの内部状態などにより、その他の結果が返ることがあります。
431     */
432     Result GetFriendScreenName(
433         char16           (*pScreenNameList)[SCREEN_NAME_SIZE],
434         const FriendKey* pFriendKeyList,
435         size_t           size = 1,
436         bool             replaceForeignCharacters = true,
437         u8*              pFontRegionList = NULL
438     );
GetFriendScreenName(char16 (* pScreenNameList)[SCREEN_NAME_SIZE],const FriendKey * pFriendKeyList,size_t size,bool replaceForeignCharacters,u8 * pFontRegionList)439     inline Result GetFriendScreenName(
440         char16           (*pScreenNameList)[SCREEN_NAME_SIZE],
441         const FriendKey* pFriendKeyList,
442         size_t           size,
443         bool             replaceForeignCharacters,
444         u8*              pFontRegionList
445     )
446     {
447         return detail::GetFriendScreenName( pScreenNameList, pFriendKeyList, size, replaceForeignCharacters, pFontRegionList );
448     }
449 
450     /*!
451     @brief          フレンドの表示名のリストを取得します。
452 
453                     この関数を使用すると、「似顔絵ライブラリ」を使用せずにフレンドの Mii の名前を直接取得することができます。
454                     また、対象がフレンド関係成立待ち状態で Mii が取得できない場合でも、自分が仮登録した表示名が取得されます。<BR>
455                     <BR>
456                     フレンドの Mii がブラックリストに含まれていた場合でも生の名前が取得されますが、
457                     フレンドの Mii の名前が NG ネームだった場合は ??? に置換されて取得されます。<BR>
458                     <BR>
459                     引数で与えられたキーに対応するフレンドが存在しないと、該当のバッファには空の表示名が返されます。
460                     この場合も、関数自体は成功を返します。
461 
462     @param[out]     pScreenNameList             取得した表示名を格納するバッファへのポインタを指定します。
463     @param[in]      pPrincipalIdList            プリンシパル ID のリストへのポインタを指定します。
464     @param[in]      size                        プリンシパル ID のリストの要素数(バッファの要素数)を指定します。
465     @param[in]      replaceForeignCharacters    フレンドの表示名のフォントリージョンが自分と異なる場合に、 ASCII 以外の文字を ? で置換するかを指定します。
466     @param[in]      pFontRegionList             フレンドの表示名のフォントリージョンを格納するバッファへのポインタを指定します。不要な場合は NULL を指定してください。
467 
468     @return         処理の結果が返ってきます。
469 
470     @retval         ResultSuccess                       成功しました。
471     @retval         ResultInvalidPointer                引数に渡したポインタが無効です。
472     @retval         ResultTooLarge                      引数に渡したサイズの値が大きすぎます。
473     @retval         ResultNotInitialized                フレンドプレゼンスライブラリが初期化されていません。
474     @retval         その他                              デーモンの内部状態などにより、その他の結果が返ることがあります。
475     */
476     Result GetFriendScreenName(
477         char16             (*pScreenNameList)[SCREEN_NAME_SIZE],
478         const PrincipalId* pPrincipalIdList,
479         size_t             size = 1,
480         bool               replaceForeignCharacters = true,
481         u8*                pFontRegionList = NULL
482     );
GetFriendScreenName(char16 (* pScreenNameList)[SCREEN_NAME_SIZE],const PrincipalId * pPrincipalIdList,size_t size,bool replaceForeignCharacters,u8 * pFontRegionList)483     inline Result GetFriendScreenName(
484         char16             (*pScreenNameList)[SCREEN_NAME_SIZE],
485         const PrincipalId* pPrincipalIdList,
486         size_t             size,
487         bool               replaceForeignCharacters,
488         u8*                pFontRegionList
489     )
490     {
491         return detail::GetFriendScreenName( pScreenNameList, pPrincipalIdList, size, replaceForeignCharacters, pFontRegionList );
492     }
493 
494     /*!
495     @brief          フレンドの Mii データのリストを取得します。
496 
497                     引数で与えられたキーに対応するフレンドが存在しないと、該当のバッファには空の Mii データが返されます。
498                     この場合も、関数自体は成功を返します。<BR>
499                     <BR>
500                     取得した Mii データを利用するには別途「似顔絵ライブラリ」が必要です。
501 
502     @param[out]     pMiiDataList    取得した Mii データを格納するバッファへのポインタを指定します。
503     @param[in]      pFriendKeyList  フレンドキーのリストへのポインタを指定します。
504     @param[in]      size            フレンドキーのリストの要素数(バッファの要素数)を指定します。
505 
506     @return         処理の結果が返ってきます。
507 
508     @retval         ResultSuccess                       成功しました。
509     @retval         ResultInvalidPointer                引数に渡したポインタが無効です。
510     @retval         ResultTooLarge                      引数に渡したサイズの値が大きすぎます。
511     @retval         ResultNotInitialized                フレンドプレゼンスライブラリが初期化されていません。
512     @retval         その他                              デーモンの内部状態などにより、その他の結果が返ることがあります。
513     */
514     Result GetFriendMii( MiiData* pMiiDataList, const FriendKey* pFriendKeyList, size_t size = 1 );
GetFriendMii(MiiData * pMiiDataList,const FriendKey * pFriendKeyList,size_t size)515     inline Result GetFriendMii( MiiData* pMiiDataList, const FriendKey* pFriendKeyList, size_t size)
516     {
517         return detail::GetFriendMii( pMiiDataList, pFriendKeyList, size );
518     }
519 
520     /*!
521     @brief          フレンドの Mii データのリストを取得します。
522 
523                     引数で与えられたキーに対応するフレンドが存在しないと、該当のバッファには空の Mii データが返されます。
524                     この場合も、関数自体は成功を返します。<BR>
525                     <BR>
526                     取得した Mii データを利用するには別途「似顔絵ライブラリ」が必要です。
527 
528     @param[out]     pMiiDataList        取得した Mii データを格納するバッファへのポインタを指定します。
529     @param[in]      pPrincipalIdList    プリンシパル ID のリストへのポインタを指定します。
530     @param[in]      size                プリンシパル ID のリストの要素数(バッファの要素数)を指定します。
531 
532     @return         処理の結果が返ってきます。
533 
534     @retval         ResultSuccess                       成功しました。
535     @retval         ResultInvalidPointer                引数に渡したポインタが無効です。
536     @retval         ResultTooLarge                      引数に渡したサイズの値が大きすぎます。
537     @retval         ResultNotInitialized                フレンドプレゼンスライブラリが初期化されていません。
538     @retval         その他                              デーモンの内部状態などにより、その他の結果が返ることがあります。
539     */
540     Result GetFriendMii( MiiData* pMiiDataList, const PrincipalId* pPrincipalIdList, size_t size = 1);
GetFriendMii(MiiData * pMiiDataList,const PrincipalId * pPrincipalIdList,size_t size)541     inline Result GetFriendMii( MiiData* pMiiDataList, const PrincipalId* pPrincipalIdList, size_t size)
542     {
543         return detail::GetFriendMii( pMiiDataList, pPrincipalIdList, size );
544     }
545 
546     /*!
547     @brief          フレンドのプロフィール情報のリストを取得します。
548 
549                     引数で与えられたキーに対応するフレンドが存在しないと、該当のバッファには空のプロフィール情報が返されます。
550                     また、相手が一度もオンライン状態を公開していない場合にも、空のプロフィール情報が返されることがあります。
551                     これらの場合も、関数自体は成功を返します。@n
552 
553                     空のプロフィール情報ではプラットフォームコードが必ず 0 になります。
554                     リージョンコードなどは、単体では有効な値かを区別できないことがありますので、必ずプラットフォームコードで判別してください。
555 
556     @param[out]     pProfileList    取得したプロフィール情報を格納するバッファへのポインタを指定します。
557     @param[in]      pFriendKeyList  フレンドキーのリストへのポインタを指定します。
558     @param[in]      size            フレンドキーのリストの要素数(バッファの要素数)を指定します。
559 
560     @return         処理の結果が返ってきます。
561 
562     @retval         ResultSuccess                       成功しました。
563     @retval         ResultInvalidPointer                引数に渡したポインタが無効です。
564     @retval         ResultTooLarge                      引数に渡したサイズの値が大きすぎます。
565     @retval         ResultNotInitialized                フレンドプレゼンスライブラリが初期化されていません。
566     @retval         その他                              デーモンの内部状態などにより、その他の結果が返ることがあります。
567     */
568     Result GetFriendProfile( Profile* pProfileList, const FriendKey* pFriendKeyList, size_t size = 1 );
GetFriendProfile(Profile * pProfileList,const FriendKey * pFriendKeyList,size_t size)569     inline Result GetFriendProfile( Profile* pProfileList, const FriendKey* pFriendKeyList, size_t size)
570     {
571         return detail::GetFriendProfile( pProfileList, pFriendKeyList, size );
572     }
573 
574     /*!
575     @brief          フレンドのプロフィール情報のリストを取得します。
576 
577                     引数で与えられたキーに対応するフレンドが存在しないと、該当のバッファには空のプロフィール情報が返されます。
578                     また、相手が一度もオンライン状態を公開していない場合にも、空のプロフィール情報が返されることがあります。
579                     これらの場合も、関数自体は成功を返します。@n
580 
581                     空のプロフィール情報ではプラットフォームコードが必ず 0 になります。
582                     リージョンコードなどは、単体では有効な値かを区別できないことがありますので、必ずプラットフォームコードで判別してください。
583 
584     @param[out]     pProfileList        取得したプロフィール情報を格納するバッファへのポインタを指定します。
585     @param[in]      pPrincipalIdList    プリンシパル ID のリストへのポインタを指定します。
586     @param[in]      size                プリンシパル ID のリストの要素数(バッファの要素数)を指定します。
587 
588     @return         処理の結果が返ってきます。
589 
590     @retval         ResultSuccess                       成功しました。
591     @retval         ResultInvalidPointer                引数に渡したポインタが無効です。
592     @retval         ResultTooLarge                      引数に渡したサイズの値が大きすぎます。
593     @retval         ResultNotInitialized                フレンドプレゼンスライブラリが初期化されていません。
594     @retval         その他                              デーモンの内部状態などにより、その他の結果が返ることがあります。
595     */
596     Result GetFriendProfile( Profile* pProfileList, const PrincipalId* pPrincipalIdList, size_t size = 1 );
GetFriendProfile(Profile * pProfileList,const PrincipalId * pPrincipalIdList,size_t size)597     inline Result GetFriendProfile( Profile* pProfileList, const PrincipalId* pPrincipalIdList, size_t size)
598     {
599         return detail::GetFriendProfile( pProfileList, pPrincipalIdList, size );
600     }
601 
602     /*!
603     @brief          フレンドの関係のリストを取得します。
604 
605                     フレンド関係は、属性のビットの OR であらわされます。
606                     一度でもフレンド関係が成立したことがあるフレンドは @ref nn::friends::CTR::ATTRIBUTE_FLAG_ESTABLISHED ビットが 1 になります。
607 
608     @param[out]     pAttributeFlagsList     取得した関係情報を格納するバッファへのポインタを指定します。
609     @param[in]      pFriendKeyList          フレンドキーのリストへのポインタを指定します。
610     @param[in]      size                    フレンドキーのリストの要素数(バッファの要素数)を指定します。
611 
612     @return         処理の結果が返ってきます。
613 
614     @retval         ResultSuccess                       成功しました。
615     @retval         ResultInvalidPointer                引数に渡したポインタが無効です。
616     @retval         ResultTooLarge                      引数に渡したサイズの値が大きすぎます。
617     @retval         ResultNotInitialized                フレンドプレゼンスライブラリが初期化されていません。
618     @retval         その他                              デーモンの内部状態などにより、その他の結果が返ることがあります。
619     */
620     Result GetFriendAttributeFlags( bit32* pAttributeFlagsList, const FriendKey* pFriendKeyList, size_t size = 1 );
GetFriendAttributeFlags(bit32 * pAttributeFlagsList,const FriendKey * pFriendKeyList,size_t size)621     inline Result GetFriendAttributeFlags( bit32* pAttributeFlagsList, const FriendKey* pFriendKeyList, size_t size)
622     {
623         return detail::GetFriendAttributeFlags( pAttributeFlagsList, pFriendKeyList, size );
624     }
625 
626     /*!
627     @brief          フレンドの関係のリストを取得します。
628 
629                     フレンド関係は、属性のビットの OR であらわされます。
630                     一度でもフレンド関係が成立したことがあるフレンドは @ref nn::friends::CTR::ATTRIBUTE_FLAG_ESTABLISHED ビットが 1 になります。
631 
632     @param[out]     pAttributeFlagsList     取得した関係情報を格納するバッファへのポインタを指定します。
633     @param[in]      pPrincipalIdList        プリンシパル ID のリストへのポインタを指定します。
634     @param[in]      size                    プリンシパル ID のリストの要素数(バッファの要素数)を指定します。
635 
636     @return         処理の結果が返ってきます。
637 
638     @retval         ResultSuccess                       成功しました。
639     @retval         ResultInvalidPointer                引数に渡したポインタが無効です。
640     @retval         ResultTooLarge                      引数に渡したサイズの値が大きすぎます。
641     @retval         ResultNotInitialized                フレンドプレゼンスライブラリが初期化されていません。
642     @retval         その他                              デーモンの内部状態などにより、その他の結果が返ることがあります。
643     */
644     Result GetFriendAttributeFlags( bit32* pAttributeFlagsList, const PrincipalId* pPrincipalIdList, size_t size = 1 );
GetFriendAttributeFlags(bit32 * pAttributeFlagsList,const PrincipalId * pPrincipalIdList,size_t size)645     inline Result GetFriendAttributeFlags( bit32* pAttributeFlagsList, const PrincipalId* pPrincipalIdList, size_t size)
646     {
647         return detail::GetFriendAttributeFlags( pAttributeFlagsList, pPrincipalIdList, size );
648     }
649 
650     /*!
651     @brief          フレンドの暗号化ローカルフレンドコードを復号します。
652 
653                     フレンドのものでない暗号化ローカルフレンドコードを指定した場合、無効なローカルフレンドコードが返ってきます。
654                     この場合も、関数自体は成功を返します。
655 
656     @param[out]     pLocalFriendCodeList            復号したローカルフレンドコードを格納するバッファへのポインタを指定します。
657     @param[in]      pScrambledLocalFriendCodeList   暗号化ローカルフレンドコードのリストへのポインタを指定します。
658     @param[in]      size                            暗号化ローカルフレンドコードのリストの要素数(バッファの要素数)を指定します。
659 
660     @return         処理の結果が返ってきます。
661 
662     @retval         ResultSuccess                       成功しました。
663     @retval         ResultInvalidPointer                引数に渡したポインタが無効です。
664     @retval         ResultTooLarge                      引数に渡したサイズの値が大きすぎます。
665     @retval         ResultNotInitialized                フレンドプレゼンスライブラリが初期化されていません。
666     @retval         その他                              デーモンの内部状態などにより、その他の結果が返ることがあります。
667     */
668     Result UnscrambleLocalFriendCode( LocalFriendCode* pLocalFriendCodeList, const uds::CTR::ScrambledLocalFriendCode* pScrambledLocalFriendCodeList, size_t size = 1);
UnscrambleLocalFriendCode(LocalFriendCode * pLocalFriendCodeList,const uds::CTR::ScrambledLocalFriendCode * pScrambledLocalFriendCodeList,size_t size)669     inline Result UnscrambleLocalFriendCode( LocalFriendCode* pLocalFriendCodeList, const uds::CTR::ScrambledLocalFriendCode* pScrambledLocalFriendCodeList, size_t size )
670     {
671         return detail::UnscrambleLocalFriendCode( pLocalFriendCodeList, pScrambledLocalFriendCodeList, size );
672     }
673 
674     /*!
675     @brief          ゲームモード説明文字列を更新します。
676 
677                     ここで設定した文字列は、オンライン時にフレンドへ送信され、相手のフレンドリストに表示されます。<BR>
678                     <BR>
679                     引数に渡せる文字列は改行や終端文字を含めて @ref nn::friends::CTR::MODE_DESCRIPTION_SIZE 文字までですが、
680                     フレンドリストでの表示は全角16文字分の幅×2行までとなり、それを超えた分は切れて表示されません。<BR>
681                     <BR>
682                     本体リージョンと、フレンドリストで表示できる文字の関係は以下のとおりです。<BR>
683                       @li 日米欧:内蔵フォントの日米欧文字に含まれる文字<BR>
684                       @li 中:内蔵フォントの簡体字に含まれる文字<BR>
685                       @li 韓:内蔵フォントのハングルに含まれる文字<BR>
686                       @li 台:内蔵フォントの繁体字に含まれる文字<BR>
687                     ここに含まれない文字は、任天堂外字の「?」 (L'\\xE011') に置き換えられて表示されます。
688                     各フォントに含まれる文字セットの詳細については、「CTR オーバービュー」を参照してください。<BR>
689                     <BR>
690                     改行には L'\\n' を使用してください。
691 
692     @param[in]      description     ゲームモード説明文字列を指定します。
693 
694     @return         処理の結果が返ってきます。
695 
696     @retval         ResultSuccess                       成功しました。
697     @retval         ResultRmcNotCalled                  成功しました。ただし、接続状況や送信頻度制限によりサーバやフレンドへの通知は遅れて行われます。
698     @retval         ResultInvalidPointer                引数に渡したポインタが無効です。
699     @retval         ResultNotInitialized                フレンドプレゼンスライブラリが初期化されていません。
700     @retval         その他                              デーモンの内部状態などにより、その他の結果が返ることがあります。
701     */
702     Result UpdateGameModeDescription( const char16 description[MODE_DESCRIPTION_SIZE] );
UpdateGameModeDescription(const char16 description[MODE_DESCRIPTION_SIZE])703     inline Result UpdateGameModeDescription( const char16 description[MODE_DESCRIPTION_SIZE] )
704     {
705         return detail::UpdateGameModeDescription( description );
706     }
707 
708 
709     /*!
710     @brief          自分のログイン状態や、フレンドの状態変更を通知するイベントを指定します。
711 
712                     この関数を複数回呼んだ場合、最後に指定した @ref nn::os::Event のみがシグナルします。
713 
714     @param[out]     pEvent   変更を通知する @ref nn::os::Event へのポインタを指定します。事前に @ref nn::os::Event::Initialize で初期化しておいてください。
715 
716     @return         処理の結果が返ってきます。
717 
718     @retval         ResultSuccess                       成功しました。
719     @retval         ResultInvalidPointer                引数に渡したポインタが無効です。
720     @retval         ResultInvalidHandle                 引数に渡した @ref nn::os::Event のハンドルが無効です。
721     @retval         ResultNotInitialized                フレンドプレゼンスライブラリが初期化されていません。
722     @retval         その他                              デーモンの内部状態などにより、その他の結果が返ることがあります。
723     */
724     Result AttachToEventNotification( nn::os::Event* pEvent );
AttachToEventNotification(nn::os::Event * pEvent)725     inline Result AttachToEventNotification( nn::os::Event* pEvent )
726     {
727         return detail::AttachToEventNotification( pEvent );
728     }
729 
730     /*!
731     @brief          受け取る通知の種類を指定します。
732 
733                     @ref nn::friends::CTR::AttachToEventNotification で指定したイベントをシグナルさせたり、
734                     @ref nn::friends::CTR::GetEventNotification で取得される履歴に含める通知の種類を指定します。
735 
736                     初期状態ではこの関数に @ref nn::friends::CTR::NOTIFICATION_MASK_DEFAULT を指定したのと同じ状態になっています。
737 
738     @param[in]      mask    受け取る通知の種類のビットマスクを指定します。 @ref nn::friends::CTR::NotificationMask 列挙体メンバの OR を指定してください。
739 
740     @return         処理の結果が返ってきます。
741 
742     @retval         ResultSuccess                       成功しました。
743     @retval         ResultNotInitialized                フレンドプレゼンスライブラリが初期化されていません。
744     @retval         その他                              デーモンの内部状態などにより、その他の結果が返ることがあります。
745     */
746     Result SetNotificationMask( bit32 mask );
SetNotificationMask(bit32 mask)747     inline Result SetNotificationMask( bit32 mask )
748     {
749         return detail::SetNotificationMask( mask );
750     }
751 
752     /*!
753     @brief          自分のオンライン状態や、フレンドの状態変更の通知の履歴を取得します。
754 
755                     この関数を呼ぶと、まだ取得していない通知の内容を古いものから順に取得します。
756                     返値が 0 になるまで繰り返し呼ぶことで、たまっている通知を時系列順に取得することができます。<BR>
757                     <BR>
758                     ライブラリが保存できる通知は128件までです。
759                     128件を超えた通知は古いほうから削除されます。
760                     通知の保存件数は今後調整される可能性があります。
761 
762     @param[out]     pEventNotificationList   取得した通知の内容を格納するバッファへのポインタを指定します。
763     @param[in]      size                     バッファの要素数を指定します。
764     @param[out]     pHasOverflowed           取得できずにあふれた通知があったかを格納するバッファへのポインタを指定します。不要な場合は NULL を指定してください。
765 
766     @return         実際に取得できた通知の数が返ってきます。
767     */
768     u32 GetEventNotification(
769         EventNotification* pEventNotificationList,
770         size_t             size = 1,
771         bool*              pHasOverflowed = NULL
772     );
GetEventNotification(EventNotification * pEventNotificationList,size_t size,bool * pHasOverflowed)773     inline u32 GetEventNotification(
774         EventNotification* pEventNotificationList,
775         size_t             size,
776         bool*              pHasOverflowed
777     )
778     {
779         return detail::GetEventNotification( pEventNotificationList, size, pHasOverflowed );
780     }
781 
782     /*!
783     @brief          完了した非同期処理の結果を取得します。
784 
785                     複数の非同期処理を走らせると、取得される結果は最後に開始した非同期処理のものでその都度上書きされます。
786                     ある非同期処理の完了前に別の非同期処理を開始した場合、後者の完了前に前者が完了したとしても、その結果を取得することはできません。
787                     原則として、複数の非同期処理を並行して走らせることは避けてください。
788 
789     @return         非同期処理の処理の結果が返ってきます。
790 
791     @retval         ResultSuccess                       成功しました。
792     @retval         ResultNotInitialized                フレンドプレゼンスライブラリが初期化されていません。
793     @retval         その他                              デーモンの内部状態や通信状態などにより、その他の結果が返ることがあります。
794     */
795     Result GetLastResponseResult();
GetLastResponseResult()796     inline Result GetLastResponseResult()
797     {
798         return detail::GetLastResponseResult();
799     }
800 
801     /*!
802     @brief          フレンドプレゼンスライブラリの API の結果からエラーコードを取得します。
803 
804     @param[in]      result  フレンドプレゼンスライブラリの API から取得した結果を指定します。
805 
806     @return         指定した結果に対応するエラーコードが返ってきます。
807                     <BR>
808                     エラーコードを表示する必要がない結果や、 FRIENDS ライブラリ API 以外の結果を指定した場合は 0 が返ってきます。
809 
810     @retval         0                                   フレンド関連の対応するエラーコードがありません。
811     @retval         その他                              エラーコードです。
812     */
813     u32 ResultToErrorCode( const Result& result );
ResultToErrorCode(const Result & result)814     inline u32 ResultToErrorCode( const Result& result )
815     {
816         return detail::ResultToErrorCode( result );
817     }
818 
819 } // end of namespace CTR
820 } // end of namespace friends
821 } // end of namespace nn
822 
823 #endif // __cplusplus
824 
825 // 以下、C 用宣言
826 
827 #include <nn/util/detail/util_CLibImpl.h>
828 
829 /*!
830     @addtogroup   nn_friends   friends
831 
832     @{
833 */
834 
835 
836 
837 /*!
838   @}
839 */
840 
841 #endif  // ifndef NN_FRIENDS_CTR_FRIENDS_API_H_
842