1 /*---------------------------------------------------------------------------*
2 Project: Horizon
3 File: applet_API.h
4
5 Copyright (C)2010 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: 35505 $
14 *---------------------------------------------------------------------------*/
15
16 #ifndef NN_APPLET_CTR_APPLET_API_H_
17 #define NN_APPLET_CTR_APPLET_API_H_
18
19 #include <nn/os.h>
20 #include <nn/applet/CTR/applet_Parameters.h>
21
22 #include <nn/gx.h>
23 #include <nn/hid.h>
24 #include <nn/fs/fs_Parameters.h>
25
26 /*! @file
27 @blief APPLET に関する API の宣言
28 */
29 namespace nn {
30 namespace applet {
31 namespace CTR {
32 namespace detail {
33
34 using namespace nn::applet::CTR;
35
36 //---- 初期化・終了
37 Result Initialize( AppletAttr appletAttr = DEFAULT_APPLET_ATTRIBUTE );
38 void Enable(bool isSleepEnabled=true);
39
40 void Lock(void);
41 bool TryLock( nn::fnd::TimeSpan timeout=NO_WAIT);
42 void Unlock(void);
43
44 int CountRegisteredApplet(void);
45 bool IsRegistered( AppletId appletId );
46 bool WaitForRegister( AppletId appletId, nn::fnd::TimeSpan span );
47 bool IsActive(void);
48 void SetActive(void);
49 void SetInactive(void);
50 nn::Result SaveVramSysArea(void);
51 nn::Result RestoreVramSysArea(void);
52
53 //================
54 // GPU権利
55 void AssignGpuRight( bool flag=true );
ReleaseGpuRight(void)56 inline void ReleaseGpuRight(void)
57 {
58 AssignGpuRight(false);
59 }
60 bool IsGpuRightGiven(void);
61
62 //================
63 // DSP権利
64 void AssignDspRight( bool flag = true );
ReleaseDspRight(void)65 inline void ReleaseDspRight( void )
66 {
67 AssignDspRight(false);
68 }
69 //================
70 // CAMERAの起動制御
71 void AssignCameraRight( bool flag = true );
ReleaseCameraRight(void)72 inline void ReleaseCameraRight( void )
73 {
74 AssignCameraRight(false);
75 }
76
77 //================
78 // sheredMemory のアタッチ
79 void AttachTransferMemoryHandle( os::TransferMemoryBlock* transferMemory, nn::Handle handle, size_t size, bit32 otherPermission );
80
81 //================
82 // アプレットへのユーザメッセージ送り
83 Result SendMessage( AppletId receiverId, const u8* pParam, size_t paramSize, nn::Handle handle=NN_APPLET_HANDLE_NONE, nn::fnd::TimeSpan timeout=WAIT_INFINITE );
84 Result TrySendMessage( AppletId receiverId, const u8* pParam, size_t paramSize, nn::Handle handle=NN_APPLET_HANDLE_NONE );
85
86
87 //================
88 // ホームボタン状態
89 AppletHomeButtonState GetAbsoluteHomeButtonState(void);
90 void ClearAbsoluteHomeButtonState(void);
91
92 // シャットダウン通知状態
93 AppletShutdownState GetShutdownState(void);
94 void ClearShutdownState(void);
95
96 // 電源ボタンクリック通知
97 AppletPowerButtonState GetPowerButtonState(void);
98 void ClearPowerButtonState(void);
99
100 // EXIT通知受け取りチェック
101 bool IsExitNotificationReceived(void);
102
103 // 終了要求
104 AppletOrderToCloseState GetOrderToCloseState(void);
105 void ClearOrderToCloseState(void);
106
107 //================
108 // ライブラリアプレットのプリロード
109 Result PreloadLibraryApplet( AppletId id );
110
111 // ライブラリアプレット起動
112 Result PrepareToStartLibraryApplet( AppletId id );
113 Result StartLibraryApplet( AppletId id, const u8* pParam=NULL, size_t paramSize=0, Handle handle=NN_APPLET_HANDLE_NONE );
114
115 // 起動キャンセル
116 Result CancelLibraryApplet( bool isApplicationEnd=false );
117 Result CancelLibraryAppletIfRegistered( bool isApplicationEnd=false, AppletWakeupState *pWakeupState=NULL );
118
119 // アプリケーション終了
120 Result PrepareToCloseApplication( bool isCancelPreload=false );
121 Result CloseApplication( const u8* pParam=NULL, size_t paramSize=0, Handle handle=NN_APPLET_HANDLE_NONE );
122
123 // ホームメニュー移行準備
124 Result PrepareToJumpToHomeMenu(void);
125 Result JumpToHomeMenu( const u8* pParam=NULL, size_t paramSize=0, Handle handle=NN_APPLET_HANDLE_NONE );
126
127 // アプリケーションジャンプ
128 Result PrepareToJumpToOtherApplication( ProgramId programId, nn::fs::MediaType mediaType=nn::fs::MEDIA_TYPE_NAND );
129 Result PrepareToJumpToCallerApplication(void);
130 Result PrepareToJumpToSelfApplication(void);
131 Result JumpToOtherApplication( const u8 pParam[], const u8 pHmacBuf[] );
132 Result JumpToCallerApplication( const u8 pParam[], const u8 pHmacBuf[] );
133 Result JumpToSelfApplication( const u8 pParam[], const u8 pHmacBuf[] );
134
135
136 //================
137 // 引数受け取り
138 bool ReceiveDeliverArg( u8 pParam[], u8 pHmacBuf[], bit32* pUniqueId );
139 AppletWakeupState GetInitialWakeupState(void);
140 bool GetInitialParam( u8* pParam, size_t paramSize, s32* pReadSize );
141
142 //================
143 Result GetSharedFont(Handle* pHandle, uptr* pAddr);
144 Result GetWirelessRebootInfo(u8* pInfo, size_t size);
145 Result Wrap(void* pWrappedBuffer, const void* pData, size_t dataSize, s32 idOffset, size_t idSize);
146 Result Unwrap(void* pData, const void* pWrapped, size_t wrappedSize, s32 idOffset, size_t idSize);
147 }
148 }
149 }
150 }
151
152 namespace nn {
153 namespace applet {
154 namespace CTR {
155
156 using namespace nn::applet::CTR;
157
158 //================================================================
159 // 初期化
160 //================================================================
161 /*!
162 @name 初期化
163 @{
164 */
165 /*! :private
166 @brief APPLET ライブラリの初期化を行います。
167
168 @param[in] appletAttr アプレットライブラリを初期化する際のオプションです。指定せずにデフォルト引数を使ってください。
169 @return 初期化処理の結果を返します。
170 */
171 inline Result Initialize(AppletAttr appletAttr = NN_APPLET_DEFAULT_APPLET_ATTRIBUTE )
172 {
173 return detail::Initialize( appletAttr );
174 }
175 /*!
176 @brief アプレットライブラリに関する機能を有効にします。
177
178 @param[in] isSleepEnabled スリープを可能にするかどうかを指定するオプションです。
179 @return なし。
180 */
181 inline void Enable(bool isSleepEnabled=true)
182 {
183 detail::Enable(isSleepEnabled);
184 }
185 /*!
186 @}
187 */
188
189 //================================================================
190 // 排他制御
191 //================================================================
192 /*!
193 @name 排他制御
194 @{
195 */
196 /*! :private
197 @brief APPLET ライブラリにおける mutex をロックします。
198 */
Lock(void)199 inline void Lock(void)
200 {
201 detail::Lock();
202 }
203
204 /*! :private
205 @brief APPLET ライブラリにおける mutex のロックを試みます。
206
207 timeout は ロックできなかった場合に待つ時間の最大値です。
208 0 (NN_APPLET_NO_WAIT) を指定すると即座に終了します。
209
210 @param[in] timeout タイムアウト時間を指定します。
211
212 @return ロックできれば true を、出来なければ false を返します。
213 */
214 inline bool TryLock(nn::fnd::TimeSpan timeout = NN_APPLET_NO_WAIT)
215 {
216 return detail::TryLock(timeout);
217 }
218
219 /*! :private
220 @brief APPLET ライブラリにおける mutex をアンロックします。
221 */
Unlock(void)222 inline void Unlock(void)
223 {
224 detail::Unlock();
225 }
226 /*!
227 @}
228 */
229
230 //================================================================
231 // 情報取得
232 //================================================================
233 /*!
234 @name 情報取得
235 @{
236 */
237 /*!
238 @brief DeliverArg および HMAC 情報、送信 UniqueId を取得します。
239
240 @param[out] pParam 受信用 DeliverArg バッファ
241 @param[out] pHmacBuf 受信用 HMAC バッファ
242 @param[out] pUniqueId 受信用 送信UniqueId バッファ
243 */
ReceiveDeliverArg(u8 pParam[],u8 pHmacBuf[],bit32 * pUniqueId)244 inline bool ReceiveDeliverArg( u8 pParam[], u8 pHmacBuf[], bit32* pUniqueId )
245 {
246 return detail::ReceiveDeliverArg( pParam, pHmacBuf, pUniqueId );
247 }
248
249 /*!
250 @brief アプリケーション起動時の Wakeup情報を取得します。
251 @return アプリケーション起動時の Wakeup情報
252 */
GetInitialWakeupState(void)253 inline AppletWakeupState GetInitialWakeupState(void)
254 {
255 return detail::GetInitialWakeupState();
256 }
257
258 // 初期パラメータを取得
259 // (未使用)
GetInitialParam(u8 * pParam,size_t paramSize,s32 * pReadSize)260 inline bool GetInitialParam( u8* pParam, size_t paramSize, s32* pReadSize )
261 {
262 return detail::GetInitialParam( pParam, paramSize, pReadSize );
263 }
264
265
266 /*! :private
267 @brief 登録されている APPLET の数を数えます。
268
269 アプリケーション自体も 1 つと数えます。
270
271 @return 登録されている APPLET の数を返します。
272 */
CountRegisteredApplet(void)273 inline int CountRegisteredApplet(void)
274 {
275 return detail::CountRegisteredApplet();
276 }
277
278 /*! :private
279 @brief 指定した ID のアプレットが登録されているか確認します。
280 @param[in] appletId アプレット ID
281 @return 登録されていれば true を、されていなければ false 返します。
282 */
IsRegistered(AppletId appletId)283 inline bool IsRegistered( AppletId appletId )
284 {
285 return detail::IsRegistered( appletId );
286 }
287
288 /*!
289 @brief アプリケーションが現在動作中かを調べます。
290 @return active ならば true を、そうでないならば false を返します。
291 */
IsActive(void)292 inline bool IsActive(void)
293 {
294 return detail::IsActive();
295 }
296
297 /*! :private
298 @brief アプリケーションをアクティブにします。
299
300 アプリケーションが自ら呼ぶことは行わないでください。
301 */
SetActive(void)302 inline void SetActive(void)
303 {
304 detail::SetActive();
305 }
306
307 /*! :private
308 @brief アプリケーションを非アクティブにします。
309
310 アプリケーションが自ら呼ぶことは行わないでください。
311 */
SetInactive(void)312 inline void SetInactive(void)
313 {
314 detail::SetInactive();
315 }
316
317 /*! :private
318 @brief アプリケーションがライブラリの初期化を行ったか取得します。
319
320 @return 初期化済みならば true を返します。
321 */
322 bool IsInitialized();
323
324 /*! :private
325 @brief アプリケーションのアプレット ID を取得します。
326 アプリケーションでは返る値が固定です。
327
328 @return アプレット ID を返します。
329 */
330 AppletId GetId(void);
331
332 /*! :private
333 @brief アプリケーションのアプレットアトリビュートを取得します。
334
335 取得できるのは Initialize() 時に指定したアトリビュートとなります。
336
337 @return アトリビュートを返します。
338 */
339 AppletAttr GetAttribute(void);
340 /*!
341 @}
342 */
343
344 // :private
345 AppletAttr GetAppletType(void);
346
347 //================================================================
348 // 動作制御
349 //================================================================
350 /*!
351 @name 動作制御
352 @{
353 */
354 /*!
355 @brief 指定した ID のアプレットが登録されるのを、指定時間だけ待ちます。
356 @param[in] appletId アプレット ID
357 @param[in] span 待ち時間の上限
358 @return 指定したIDのアプレットが登録されていれば true を、されていなければ false を返します。
359 */
360 inline bool WaitForRegister( AppletId appletId, nn::fnd::TimeSpan span = NN_APPLET_WAIT_INFINITE )
361 {
362 return detail::WaitForRegister( appletId, span );
363 }
364
365 //================================================================
366 // 描画権
367 //================================================================
368 /*!
369 @name 描画権
370 @{
371 */
372 /*! :private
373 @brief アプリケーションが描画権限を与えられているかを調べます。
374
375 @return 描画権限を与えられていれば true を、そうでなければ false を返します。
376 */
IsGpuRightGiven(void)377 inline bool IsGpuRightGiven(void)
378 {
379 return detail::IsGpuRightGiven();
380 }
381
382 /*!
383 @brief アプリケーションが描画することを宣言します。
384 @param[in] flag true なら描画権限を取得、false なら描画権限を放棄
385 */
386 inline void AssignGpuRight( bool flag = true )
387 {
388 detail::AssignGpuRight(flag);
389 }
390
391 /*!
392 @brief アプリケーションが他のプログラムに描画を切り替えることを宣言します。
393 */
ReleaseGpuRight(void)394 inline void ReleaseGpuRight(void)
395 {
396 detail::AssignGpuRight(false);
397 }
398 /*!
399 @}
400 */
401
402 //================================================================
403 // DSP使用権
404 //================================================================
405 /*!
406 @name DSP使用権
407 @{
408 */
409 /*! :private
410 @brief DSP の使用権を取得、放棄します。
411
412 必要に応じて、内部で DSP 処理を中断、再開します。
413
414 通常、アプリケーションが呼ぶ必要はありません。
415
416 @param[in] flag true なら再開、false なら中断
417 */
418 inline void AssignDspRight( bool flag = true )
419 {
420 detail::AssignDspRight(flag);
421 }
422
423 /*! :private
424 @brief DSP の使用権を放棄します。
425
426 必要に応じて、内部で DSP での処理を一時中断します。
427
428 通常、アプリケーションが呼ぶ必要はありません。
429 */
ReleaseDspRight(void)430 inline void ReleaseDspRight( void )
431 {
432 detail::AssignDspRight(false);
433 }
434 /*!
435 @}
436 */
437
438 /*! :private
439 @brief 共有メモリハンドルをアタッチします。
440 @param[out] transferMemory 共有メモリブロックポインタ
441 @param[in] handle ハンドル
442 @param[in] size 共有メモリのサイズ
443 @param[in] readOnly 読み取り専用フラグ
444 */
AttachTransferMemoryHandle(os::TransferMemoryBlock * transferMemory,nn::Handle handle,size_t size,bit32 otherPermission)445 inline void AttachTransferMemoryHandle( os::TransferMemoryBlock* transferMemory, nn::Handle handle, size_t size, bit32 otherPermission )
446 {
447 detail::AttachTransferMemoryHandle( transferMemory, handle, size, otherPermission );
448 }
449
450 //================================================================
451 // CAMERAの起動制御
452 //================================================================
453 /*!
454 @name CAMERAの起動制御
455 @{
456 */
457 /*! :private
458 @brief CAMERA を Release 前の状態に戻します。
459 */
460 inline void AssignCameraRight( bool flag = true )
461 {
462 detail::AssignCameraRight(flag);
463 }
464
465 /*! :private
466 @brief CAMERA をスタンバイ状態に落とします。
467 */
ReleaseCameraRight(void)468 inline void ReleaseCameraRight( void )
469 {
470 detail::AssignCameraRight(false);
471 }
472 /*!
473 @}
474 */
475
476 //================================================================
477 // メッセージ
478 //================================================================
479 /*!
480 @name メッセージ
481 @{
482 */
483 /*! :private
484 @brief アプレットへのメッセージ送信を行います。
485 @param[in] receiverId 宛先のアプレット ID
486 @param[in] pParam アプレットへ送るパラメータバッファ
487 @param[in] paramSize アプレットへ送るパラメータバッファのサイズ
488 @param[in] handle アプレットへ送るハンドル
489 @param[in] timeout タイムアウト時間
490 @return 処理結果を返します。
491 */
492 inline Result SendMessage( AppletId receiverId, const u8* pParam, size_t paramSize, nn::Handle handle=NN_APPLET_HANDLE_NONE, nn::fnd::TimeSpan timeout=WAIT_INFINITE )
493 {
494 return detail::SendMessage( receiverId, pParam, paramSize, handle, timeout );
495 }
496
497 /*! :private
498 @brief アプレットへのメッセージ送信を行います。
499 @param[in] receiverId 宛先のアプレット ID
500 @param[in] pParam アプレットへ送るパラメータバッファ
501 @param[in] paramSize アプレットへ送るパラメータバッファサイズ
502 @param[in] handle アプレットへ送るハンドル
503 @return 処理結果を返します。
504 */
505 inline Result TrySendMessage( AppletId receiverId, const u8* pParam, size_t paramSize, nn::Handle handle=NN_APPLET_HANDLE_NONE )
506 {
507 return detail::TrySendMessage( receiverId, pParam, paramSize, handle );
508 }
509 /*!
510 @}
511 */
512
513 /*! :private
514 @brief 現在のホームボタンの状態を取得します。
515
516 GetHomeButtonState 関数よりも正確な値が得られます。
517 通常、アプリケーションがこの関数を用いることはありません。
518
519 @return 状態を返します。
520 */
GetAbsoluteHomeButtonState(void)521 inline AppletHomeButtonState GetAbsoluteHomeButtonState(void)
522 {
523 return detail::GetAbsoluteHomeButtonState();
524 }
525 /*! :private
526 @brief ホームボタンの状態をクリアします。
527
528 通常、アプリケーションがこの関数を用いることはありません。
529 */
ClearAbsoluteHomeButtonState(void)530 inline void ClearAbsoluteHomeButtonState(void)
531 {
532 return detail::ClearAbsoluteHomeButtonState();
533 }
534
535 //================================================================
536 // シャットダウン
537 //================================================================
538 /*!
539 @name シャットダウン
540 @{
541 */
542 /*! :private
543 @brief シャットダウン状態を取得します。
544 @return 状態を返します。
545 */
GetShutdownState(void)546 inline AppletShutdownState GetShutdownState(void)
547 {
548 return detail::GetShutdownState();
549 }
550
551 /*! :private
552 @brief シャットダウン状態をクリアします。
553 */
ClearShutdownState(void)554 inline void ClearShutdownState(void)
555 {
556 detail::ClearShutdownState();
557 }
558 /*!
559 @}
560 */
561
562 //================================================================
563 // 終了状態
564 //================================================================
IsExitNotificationReceived(void)565 inline bool IsExitNotificationReceived(void)
566 {
567 return detail::IsExitNotificationReceived();
568 }
569
570 //================================================================
571 // 電源ボタン
572 //================================================================
573 /*!
574 @name 電源ボタン
575 @{
576 */
577 /*! :private
578 @brief 電源ボタンの状態を取得します。
579
580 @return 状態を返します。
581 取得できる状態は applet::POWER_BUTTON_STATE_NONE (電源ボタンは押されていない)、
582 applet::POWER_BUTTON_STATE_CLICK (電源ボタンがクリックされた) です。
583
584 アプリケーションはこの値を調べるのではなく、
585 IsExpectedToProcessPowerButton() を用いてください。
586 */
GetPowerButtonState(void)587 inline AppletPowerButtonState GetPowerButtonState(void)
588 {
589 return detail::GetPowerButtonState();
590 }
591
592 /*! :private
593 @brief 電源ボタンの状態をクリアします。
594 */
ClearPowerButtonState(void)595 inline void ClearPowerButtonState(void)
596 {
597 detail::ClearPowerButtonState();
598 }
599
600 bool IsReceivedWakeupByCancel(void);
601
602 /*!
603 @brief 電源ボタンの状態を調べます。
604
605 @return 状態を返します。
606 */
IsExpectedToProcessPowerButton(void)607 inline bool IsExpectedToProcessPowerButton(void)
608 {
609 return ( GetPowerButtonState() != POWER_BUTTON_STATE_NONE )? true: false;
610 }
611 /*!
612 @}
613 */
614
615 //================================================================
616 // 終了要求
617 //================================================================
GetOrderToCloseState(void)618 inline AppletOrderToCloseState GetOrderToCloseState(void)
619 {
620 return detail::GetOrderToCloseState();
621 }
ClearOrderToCloseState(void)622 inline void ClearOrderToCloseState(void)
623 {
624 detail::ClearOrderToCloseState();
625 }
626
627 /*!
628 @name アプリケーション終了
629 @{
630 */
631 /*!
632 @brief アプリケーションが終了すべきかを調べます。
633
634 @return 状態を返します。
635 */
IsExpectedToCloseApplication(void)636 inline bool IsExpectedToCloseApplication(void)
637 {
638 return ( GetOrderToCloseState() != ORDER_TO_CLOSE_STATE_NONE ||
639 IsReceivedWakeupByCancel() )? true: false;
640 }
641
642 //================================================================
643 // ライブラリアプレット・プリロードと終了
644 //================================================================
645 /*!
646 @name ライブラリアプレットのプリロードと終了
647 @{
648 */
649 /*! :private
650 @brief 起動するライブラリアプレットのプリロードを行います。
651
652 プリロード完了まで待つ場合は WaitForLibraryAppletPreloaded() を
653 呼んで下さい。
654
655 通常アプリケーションがこの関数を直接呼ぶことはありません。
656
657 @param[in] id ライブラリアプレットのアプレット ID
658 @return 処理結果を返します。
659 */
PreloadLibraryApplet(AppletId id)660 inline Result PreloadLibraryApplet( AppletId id )
661 {
662 return detail::PreloadLibraryApplet(id);
663 }
664 /*!
665 @}
666 */
667
668 /*! :private
669 @brief プリロードされているライブラリアプレットを終了します。
670
671 ライブラリアプレットがあるときだけ終了します。
672 ないときに呼び出しても構いません。
673
674 通常アプリケーションがこの関数を呼ぶことはありません。
675
676 @return 処理結果を返します。
677 */
678 inline Result CancelLibraryAppletIfRegistered( bool isApplicationEnd, AppletWakeupState *pWakeupState=NULL )
679 {
680 return detail::CancelLibraryAppletIfRegistered( isApplicationEnd, pWakeupState );
681 }
682 /*!
683 @}
684 */
685
686 //================================================================
687 // ライブラリアプレット・起動
688 //================================================================
689 /*!
690 @name ライブラリアプレット起動
691 @{
692 */
693 /*! :private
694 @brief ライブラリアプレットを起動する準備を行います。
695
696 ライブラリアプレットを呼び出す準備を行う関数です。
697
698 この関数が呼ばれた後に StartLibraryApplet() を呼ぶことでライブラリアプレットを起動します。
699
700 通常アプリケーションがこの関数を呼ぶことはありません。
701
702 @param[in] id ライブラリアプレットのアプレット ID
703 @return 処理結果を返します。
704 */
PrepareToStartLibraryApplet(AppletId id)705 inline Result PrepareToStartLibraryApplet( AppletId id )
706 {
707 return detail::PrepareToStartLibraryApplet(id);
708 }
709
710 /*! :private
711 @brief ライブラリアプレットを起動します。
712
713 ライブラリアプレットを呼び出す関数です。
714
715 この関数の前に PrepareToStartLibraryApplet() が呼ばれている必要があります。
716
717 この関数を呼んだ後に、WaitForStarting() で起動待ちを行ってください。
718
719 通常アプリケーションがこの関数を呼ぶことはありません。
720
721 @param[in] id ライブラリアプレットのアプレット ID
722 @param[in] pParam ライブラリアプレットに送るパラメータバッファ
723 @param[in] paramSize ライブラリアプレットに送るパラメータバッファサイズ
724 @param[in] handle ライブラリアプレットに送るハンドル
725 @return 処理結果を返します。
726 */
727 inline Result StartLibraryApplet( AppletId id, const u8* pParam=NULL, size_t paramSize=0, Handle handle=NN_APPLET_HANDLE_NONE )
728 {
729 return detail::StartLibraryApplet(id, pParam, paramSize, handle);
730 }
731
732 /*!
733 @}
734 */
735
736 //================================================================
737 // アプリケーション終了
738 //================================================================
739 /*!
740 @name アプリケーション終了
741 @{
742 */
743 /*!
744 @brief アプリケーションを終了する準備を行います。
745 @return 関数の実行結果を返します。以下に挙げる Result を返します。
746 @retval ResultSuccess 処理に成功しました。
747 */
PrepareToCloseApplication(void)748 inline Result PrepareToCloseApplication(void)
749 {
750 return detail::PrepareToCloseApplication();
751 }
752
753 /*!
754 @brief アプリケーションを終了します。
755 @param[in] pParam パラメータバッファ
756 @param[in] paramSize パラメータバッファサイズ
757 @param[in] handle ハンドル
758 @return 関数の実行結果を返します。以下に挙げる Result を返します。
759 @retval ResultSuccess 処理に成功しました。
760 */
761 inline Result CloseApplication( const u8* pParam=NULL, size_t paramSize=0, Handle handle=NN_APPLET_HANDLE_NONE )
762 {
763 return detail::CloseApplication( pParam, paramSize, handle );
764 }
765 /*!
766 @}
767 */
768
769 // Obsolete な関数。
PrepareToClosePreloadedApplication(void)770 inline Result PrepareToClosePreloadedApplication(void)
771 {
772 return detail::PrepareToCloseApplication( true );
773 }
774 inline Result ClosePreloadedApplication( const u8* pParam=NULL, size_t paramSize=0, Handle handle=NN_APPLET_HANDLE_NONE )
775 {
776 return detail::CloseApplication( pParam, paramSize, handle );
777 }
778
779 //================================================================
780 // ホームメニュー
781 //================================================================
782 /*!
783 @name ホームメニュー
784 @{
785 */
786 /*! :private
787 @brief ホームメニューへ移行する準備を行います。
788
789 この関数の後に CloseApplication() を呼ぶことでホームメニューへ移行します。
790
791 通常アプリケーションがこの関数を呼ぶことはありません。
792
793 @return 処理結果を返します。
794 */
PrepareToJumpToHomeMenu(void)795 inline Result PrepareToJumpToHomeMenu(void)
796 {
797 return detail::PrepareToJumpToHomeMenu();
798 }
799
800 /*! :private
801 @brief ホームメニューへ移行します。
802
803 この関数の前に PrepareToJumpToHomeMenu() が呼ばれている必要があります。
804
805 この関数を呼んだ後に、WaitForStarting() で起動待ちを行ってください。
806
807 通常アプリケーションがこの関数を呼ぶことはありません。
808
809 @param[in] pParam ホームメニューへ送るパラメータバッファ
810 @param[in] paramSize ホームメニューへ送るパラメータバッファのサイズ
811 @param[in] handle ホームメニューへ送るハンドル
812 @return 処理結果を返します。
813 */
814 inline Result JumpToHomeMenu( const u8* pParam=NULL, size_t paramSize=0, Handle handle=NN_APPLET_HANDLE_NONE )
815 {
816 return detail::JumpToHomeMenu( pParam, paramSize, handle );
817 }
818 /*!
819 @}
820 */
821
822 //================================================================
823 // アプリケーションジャンプ
824 //================================================================
825 /*!
826 @name アプリケーションジャンプ
827 @{
828 */
829 inline Result PrepareToJumpToOtherApplication( ProgramId programId, nn::fs::MediaType mediaType=nn::fs::MEDIA_TYPE_NAND )
830 {
831 return detail::PrepareToJumpToOtherApplication( programId, mediaType );
832 }
PrepareToJumpToCallerApplication(void)833 inline Result PrepareToJumpToCallerApplication(void)
834 {
835 return detail::PrepareToJumpToCallerApplication();
836 }
PrepareToJumpToSelfApplication(void)837 inline Result PrepareToJumpToSelfApplication(void)
838 {
839 return detail::PrepareToJumpToSelfApplication();
840 }
841 /*! :private
842 @brief 自身を終了し、他のアプリケーションを起動します。
843 @param[in] pParam 起動するアプリケーションに渡す DeliverArg バッファ
844 @param[in] pHmacBuf 起動するアプリケーションに渡す HMAC バッファ
845 @return 処理結果を返します。
846 */
847 inline Result JumpToOtherApplication( const u8 pParam[]=NULL, const u8 pHmacBuf[]=NULL )
848 {
849 return detail::JumpToOtherApplication( pParam, pHmacBuf );
850 }
851 /*! :private
852 @brief 自身を終了し、呼び元のアプリケーションを起動します。
853 @param[in] pParam 起動するアプリケーションに渡す DeliverArg バッファ
854 @param[in] pHmacBuf 起動するアプリケーションに渡す HMAC バッファ
855 @return 処理結果を返します。
856 */
857 inline Result JumpToCallerApplication( const u8 pParam[]=NULL, const u8 pHmacBuf[]=NULL )
858 {
859 return detail::JumpToCallerApplication( pParam, pHmacBuf );
860 }
861 /*! :private
862 @brief 自身を終了し、もう一度自身のアプリケーションを起動します。
863
864 この自己ジャンプの処理を挟んでも、JumpToCallerApplication() で戻る
865 呼び元は変わりません。
866
867 @param[in] pParam 起動するアプリケーションに渡す DeliverArg バッファ
868 @param[in] pHmacBuf 起動するアプリケーションに渡す HMAC バッファ
869 @return 処理結果を返します。
870 */
871 inline Result JumpToSelfApplication( const u8 pParam[]=NULL, const u8 pHmacBuf[]=NULL )
872 {
873 return detail::JumpToSelfApplication( pParam, pHmacBuf );
874 }
875 /*!
876 @}
877 */
878
879 //================================================================
880 // 非公開
881 //================================================================
882 /*! :private
883 @brief VRAM のシステム領域を退避させます。
884 @return 処理結果を返します。
885 */
SaveVramSysArea(void)886 inline nn::Result SaveVramSysArea(void)
887 {
888 return detail::SaveVramSysArea();
889 }
890
891 /*! :private
892 @brief VRAM のシステム領域を復元します。
893 @return 処理結果を返します。
894 */
RestoreVramSysArea(void)895 inline nn::Result RestoreVramSysArea(void)
896 {
897 return detail::RestoreVramSysArea();
898 }
899 /*!
900 @}
901 */
902
903 }
904 }
905 }
906
907 /*!
908 @defgroup nn_applet applet
909
910 @brief APPLET を扱うモジュールです。
911
912 @{
913 */
914
915 #include <nn/util/detail/util_CLibImpl.h>
916
917
918 /*! :private
919 @brief APPLET ライブラリの初期化を行い、APPLET を登録します。
920
921 @detail 対応する C++ 関数 @ref nn::applet::CTR::Initialize() を参照してください。
922 */
923 NN_EXTERN_C inline nn::Result nnappletInitialize( AppletAttr appletAttr = NN_APPLET_DEFAULT_APPLET_ATTRIBUTE)
924 {
925 return nn::applet::CTR::Initialize(appletAttr);
926 }
927 /*! :private
928 @brief APPLET ライブラリにおける mutex をロックします。
929
930 @detail 対応する C++ 関数 @ref nn::applet::CTR::Lock() を参照してください。
931 */
nnappletLock(void)932 NN_EXTERN_C inline void nnappletLock(void)
933 {
934 nn::applet::CTR::Lock();
935 }
936 /*! :private
937 @brief APPLET ライブラリにおける mutex のロックを試みます。
938
939 @detail 対応する C++ 関数 @ref nn::applet::CTR::TryLock() を参照してください。
940 */
941 NN_EXTERN_C inline bool nnappletTryLock(nn::fnd::TimeSpan timeout=NN_APPLET_NO_WAIT)
942 {
943 return nn::applet::CTR::TryLock(timeout);
944 }
945 /*! :private
946 @brief APPLET ライブラリにおける mutex をアンロックします。
947
948 @detail 対応する C++ 関数 @ref nn::applet::CTR::Unlock() を参照してください。
949 */
nnappletUnlock(void)950 NN_EXTERN_C inline void nnappletUnlock(void)
951 {
952 nn::applet::CTR::Unlock();
953 }
954
955 //----------------------------------------------------------------
956 /*! :private
957 @brief 登録されている APPLET の数を数えます。
958
959 @detail 対応する C++ 関数 @ref nn::applet::CTR::CountRegisteredApplet() を参照してください。
960 */
nnappletCountRegisteredApplet(void)961 NN_EXTERN_C inline int nnappletCountRegisteredApplet(void)
962 {
963 return nn::applet::CTR::CountRegisteredApplet();
964 }
965 /*! :private
966 @brief APPLET が登録されているかを調べます。
967
968 @detail 対応する C++ 関数 @ref nn::applet::CTR::IsRegistered() を参照してください。
969 */
nnappletIsRegistered(AppletId appletId)970 NN_EXTERN_C inline bool nnappletIsRegistered( AppletId appletId )
971 {
972 return nn::applet::CTR::IsRegistered( appletId );
973 }
974
975 NN_EXTERN_C inline bool nnappletWaitForRegister( AppletId appletId, nn::fnd::TimeSpan span=NN_APPLET_WAIT_INFINITE )
976 {
977 return nn::applet::CTR::WaitForRegister( appletId, span );
978 }
979
980 /*!
981 @brief アプレットが現在動作選択されて active かを調べます。
982
983 @detail 対応する C++ 関数 @ref nn::applet::CTR::IsActive() を参照してください。
984 */
nnappletIsActive(void)985 NN_EXTERN_C inline bool nnappletIsActive(void)
986 {
987 return nn::applet::CTR::IsActive();
988 }
989
990 NN_EXTERN_C inline void nnappletAssignGpuRight(bool flag=true)
991 {
992 nn::applet::CTR::AssignGpuRight(flag);
993 }
nnappletReleaseGpuRight(void)994 NN_EXTERN_C inline void nnappletReleaseGpuRight(void)
995 {
996 nn::applet::CTR::AssignGpuRight(false);
997 }
998
999 /*! :private
1000 @brief APPLET が現在描画権限を与えられているかを調べます。
1001
1002 @detail 対応する C++ 関数 @ref nn::applet::CTR::IsGpuRightGiven() を参照してください。
1003 */
nnappletIsGpuRightGiven(void)1004 NN_EXTERN_C inline bool nnappletIsGpuRightGiven(void)
1005 {
1006 return nn::applet::CTR::IsGpuRightGiven();
1007 }
1008
nnappletAttachTransferMemoryHandle(nn::os::TransferMemoryBlock * transferMemory,nn::Handle handle,size_t size,bit32 otherPermission)1009 NN_EXTERN_C inline void nnappletAttachTransferMemoryHandle( nn::os::TransferMemoryBlock* transferMemory, nn::Handle handle, size_t size, bit32 otherPermission )
1010 {
1011 nn::applet::CTR::AttachTransferMemoryHandle( transferMemory, handle, size, otherPermission );
1012 }
1013
1014
1015 /*!
1016 @}
1017 */
1018
1019 #endif // ifndef NN_APPLET_CTR_APPLET_API_H_
1020