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: 33198 $
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 登録されていれば 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
385 この関数は、ライブラリアプレットやホームメニューなどから切り替わった後に、
386 自らが描画を行うことを宣言するものです。
387
388 通常、アプリケーションが呼ぶ必要はありません。
389
390 @param[in] flag true なら描画権限を取得、false なら描画権限を放棄
391 */
392 inline void AssignGpuRight( bool flag = true )
393 {
394 detail::AssignGpuRight(flag);
395 }
396
397 /*!
398 @brief アプリケーションが他のプログラムに描画を切り替えることを宣言します。
399
400 この関数は、ライブラリアプレットやホームメニューなどに切り替わる際に、
401 アプリケーションでの描画をやめることを宣言するものです。
402
403 通常、アプリケーションが呼ぶ必要はありません。
404 */
ReleaseGpuRight(void)405 inline void ReleaseGpuRight(void)
406 {
407 detail::AssignGpuRight(false);
408 }
409 /*!
410 @}
411 */
412
413 //================================================================
414 // DSP使用権
415 //================================================================
416 /*!
417 @name DSP使用権
418 @{
419 */
420 /*! :private
421 @brief DSP の使用権を取得、放棄します。
422
423 必要に応じて、内部で DSP 処理を中断、再開します。
424
425 通常、アプリケーションが呼ぶ必要はありません。
426
427 @param[in] flag true なら再開、false なら中断
428 */
429 inline void AssignDspRight( bool flag = true )
430 {
431 detail::AssignDspRight(flag);
432 }
433
434 /*! :private
435 @brief DSP の使用権を放棄します。
436
437 必要に応じて、内部で DSP での処理を一時中断します。
438
439 通常、アプリケーションが呼ぶ必要はありません。
440 */
ReleaseDspRight(void)441 inline void ReleaseDspRight( void )
442 {
443 detail::AssignDspRight(false);
444 }
445 /*!
446 @}
447 */
448
449 /*! :private
450 @brief 共有メモリハンドルをアタッチします。
451 @param[out] transferMemory 共有メモリブロックポインタ
452 @param[in] handle ハンドル
453 @param[in] size 共有メモリのサイズ
454 @param[in] readOnly 読み取り専用フラグ
455 */
AttachTransferMemoryHandle(os::TransferMemoryBlock * transferMemory,nn::Handle handle,size_t size,bit32 otherPermission)456 inline void AttachTransferMemoryHandle( os::TransferMemoryBlock* transferMemory, nn::Handle handle, size_t size, bit32 otherPermission )
457 {
458 detail::AttachTransferMemoryHandle( transferMemory, handle, size, otherPermission );
459 }
460
461 //================================================================
462 // CAMERAの起動制御
463 //================================================================
464 /*!
465 @name CAMERAの起動制御
466 @{
467 */
468 /*! :private
469 @brief CAMERA を Release 前の状態に戻します。
470 */
471 inline void AssignCameraRight( bool flag = true )
472 {
473 detail::AssignCameraRight(flag);
474 }
475
476 /*! :private
477 @brief CAMERA をスタンバイ状態に落とします。
478 */
ReleaseCameraRight(void)479 inline void ReleaseCameraRight( void )
480 {
481 detail::AssignCameraRight(false);
482 }
483 /*!
484 @}
485 */
486
487 //================================================================
488 // メッセージ
489 //================================================================
490 /*!
491 @name メッセージ
492 @{
493 */
494 /*! :private
495 @brief アプレットへのメッセージ送信を行います。
496 @param[in] receiverId 宛先のアプレット ID
497 @param[in] pParam アプレットへ送るパラメータバッファ
498 @param[in] paramSize アプレットへ送るパラメータバッファのサイズ
499 @param[in] handle アプレットへ送るハンドル
500 @param[in] timeout タイムアウト時間
501 @return 処理結果を返します。
502 */
503 inline Result SendMessage( AppletId receiverId, const u8* pParam, size_t paramSize, nn::Handle handle=NN_APPLET_HANDLE_NONE, nn::fnd::TimeSpan timeout=WAIT_INFINITE )
504 {
505 return detail::SendMessage( receiverId, pParam, paramSize, handle, timeout );
506 }
507
508 /*! :private
509 @brief アプレットへのメッセージ送信を行います。
510 @param[in] receiverId 宛先のアプレット ID
511 @param[in] pParam アプレットへ送るパラメータバッファ
512 @param[in] paramSize アプレットへ送るパラメータバッファサイズ
513 @param[in] handle アプレットへ送るハンドル
514 @return 処理結果を返します。
515 */
516 inline Result TrySendMessage( AppletId receiverId, const u8* pParam, size_t paramSize, nn::Handle handle=NN_APPLET_HANDLE_NONE )
517 {
518 return detail::TrySendMessage( receiverId, pParam, paramSize, handle );
519 }
520 /*!
521 @}
522 */
523
524 /*! :private
525 @brief 現在のホームボタンの状態を取得します。
526
527 GetHomeButtonState 関数よりも正確な値が得られます。
528 通常、アプリケーションがこの関数を用いることはありません。
529
530 @return 状態を返します。
531 */
GetAbsoluteHomeButtonState(void)532 inline AppletHomeButtonState GetAbsoluteHomeButtonState(void)
533 {
534 return detail::GetAbsoluteHomeButtonState();
535 }
536 /*! :private
537 @brief ホームボタンの状態をクリアします。
538
539 通常、アプリケーションがこの関数を用いることはありません。
540 */
ClearAbsoluteHomeButtonState(void)541 inline void ClearAbsoluteHomeButtonState(void)
542 {
543 return detail::ClearAbsoluteHomeButtonState();
544 }
545
546 //================================================================
547 // シャットダウン
548 //================================================================
549 /*!
550 @name シャットダウン
551 @{
552 */
553 /*! :private
554 @brief シャットダウン状態を取得します。
555 @return 状態を返します。
556 */
GetShutdownState(void)557 inline AppletShutdownState GetShutdownState(void)
558 {
559 return detail::GetShutdownState();
560 }
561
562 /*! :private
563 @brief シャットダウン状態をクリアします。
564 */
ClearShutdownState(void)565 inline void ClearShutdownState(void)
566 {
567 detail::ClearShutdownState();
568 }
569 /*!
570 @}
571 */
572
573 //================================================================
574 // 終了状態
575 //================================================================
IsExitNotificationReceived(void)576 inline bool IsExitNotificationReceived(void)
577 {
578 return detail::IsExitNotificationReceived();
579 }
580
581 //================================================================
582 // 電源ボタン
583 //================================================================
584 /*!
585 @name 電源ボタン
586 @{
587 */
588 /*! :private
589 @brief 電源ボタンの状態を取得します。
590
591 @return 状態を返します。
592 取得できる状態は applet::POWER_BUTTON_STATE_NONE (電源ボタンは押されていない)、
593 applet::POWER_BUTTON_STATE_CLICK (電源ボタンがクリックされた) です。
594
595 アプリケーションはこの値を調べるのではなく、
596 IsExpectedToProcessPowerButton() を用いてください。
597 */
GetPowerButtonState(void)598 inline AppletPowerButtonState GetPowerButtonState(void)
599 {
600 return detail::GetPowerButtonState();
601 }
602
603 /*! :private
604 @brief 電源ボタンの状態をクリアします。
605 */
ClearPowerButtonState(void)606 inline void ClearPowerButtonState(void)
607 {
608 detail::ClearPowerButtonState();
609 }
610
611 bool IsReceivedWakeupByCancel(void);
612
613 /*!
614 @brief 電源ボタンの状態を調べます。
615
616 @return 状態を返します。
617 */
IsExpectedToProcessPowerButton(void)618 inline bool IsExpectedToProcessPowerButton(void)
619 {
620 return ( GetPowerButtonState() != POWER_BUTTON_STATE_NONE )? true: false;
621 }
622 /*!
623 @}
624 */
625
626 //================================================================
627 // 終了要求
628 //================================================================
GetOrderToCloseState(void)629 inline AppletOrderToCloseState GetOrderToCloseState(void)
630 {
631 return detail::GetOrderToCloseState();
632 }
ClearOrderToCloseState(void)633 inline void ClearOrderToCloseState(void)
634 {
635 detail::ClearOrderToCloseState();
636 }
637
638 /*!
639 @name アプリケーション終了
640 @{
641 */
642 /*!
643 @brief アプリケーションが終了すべきかを調べます。
644
645 @return 状態を返します。
646 */
IsExpectedToCloseApplication(void)647 inline bool IsExpectedToCloseApplication(void)
648 {
649 return ( GetOrderToCloseState() != ORDER_TO_CLOSE_STATE_NONE ||
650 IsReceivedWakeupByCancel() )? true: false;
651 }
652
653 //================================================================
654 // ライブラリアプレット・プリロードと終了
655 //================================================================
656 /*!
657 @name ライブラリアプレットのプリロードと終了
658 @{
659 */
660 /*! :private
661 @brief 起動するライブラリアプレットのプリロードを行います。
662
663 プリロード完了まで待つ場合は WaitForLibraryAppletPreloaded() を
664 呼んで下さい。
665
666 通常アプリケーションがこの関数を直接呼ぶことはありません。
667
668 @param[in] id ライブラリアプレットのアプレット ID
669 @return 処理結果を返します。
670 */
PreloadLibraryApplet(AppletId id)671 inline Result PreloadLibraryApplet( AppletId id )
672 {
673 return detail::PreloadLibraryApplet(id);
674 }
675 /*!
676 @}
677 */
678
679 /*! :private
680 @brief プリロードされているライブラリアプレットを終了します。
681
682 ライブラリアプレットがあるときだけ終了します。
683 ないときに呼び出しても構いません。
684
685 通常アプリケーションがこの関数を呼ぶことはありません。
686
687 @return 処理結果を返します。
688 */
689 inline Result CancelLibraryAppletIfRegistered( bool isApplicationEnd, AppletWakeupState *pWakeupState=NULL )
690 {
691 return detail::CancelLibraryAppletIfRegistered( isApplicationEnd, pWakeupState );
692 }
693 /*!
694 @}
695 */
696
697 //================================================================
698 // ライブラリアプレット・起動
699 //================================================================
700 /*!
701 @name ライブラリアプレット起動
702 @{
703 */
704 /*! :private
705 @brief ライブラリアプレットを起動する準備を行います。
706
707 ライブラリアプレットを呼び出す準備を行う関数です。
708
709 この関数が呼ばれた後に StartLibraryApplet() を呼ぶことでライブラリアプレットを起動します。
710
711 通常アプリケーションがこの関数を呼ぶことはありません。
712
713 @param[in] id ライブラリアプレットのアプレット ID
714 @return 処理結果を返します。
715 */
PrepareToStartLibraryApplet(AppletId id)716 inline Result PrepareToStartLibraryApplet( AppletId id )
717 {
718 return detail::PrepareToStartLibraryApplet(id);
719 }
720
721 /*! :private
722 @brief ライブラリアプレットを起動します。
723
724 ライブラリアプレットを呼び出す関数です。
725
726 この関数の前に PrepareToStartLibraryApplet() が呼ばれている必要があります。
727
728 この関数を呼んだ後に、WaitForStarting() で起動待ちを行ってください。
729
730 通常アプリケーションがこの関数を呼ぶことはありません。
731
732 @param[in] id ライブラリアプレットのアプレット ID
733 @param[in] pParam ライブラリアプレットに送るパラメータバッファ
734 @param[in] paramSize ライブラリアプレットに送るパラメータバッファサイズ
735 @param[in] handle ライブラリアプレットに送るハンドル
736 @return 処理結果を返します。
737 */
738 inline Result StartLibraryApplet( AppletId id, const u8* pParam=NULL, size_t paramSize=0, Handle handle=NN_APPLET_HANDLE_NONE )
739 {
740 return detail::StartLibraryApplet(id, pParam, paramSize, handle);
741 }
742
743 /*!
744 @}
745 */
746
747 //================================================================
748 // アプリケーション終了
749 //================================================================
750 /*!
751 @name アプリケーション終了
752 @{
753 */
754 /*!
755 @brief アプリケーションを終了する準備を行います。
756 @return 処理結果を返します。
757 */
PrepareToCloseApplication(void)758 inline Result PrepareToCloseApplication(void)
759 {
760 return detail::PrepareToCloseApplication();
761 }
762
763 /*!
764 @brief アプリケーションを終了します。
765 @param[in] pParam パラメータバッファ
766 @param[in] paramSize パラメータバッファサイズ
767 @param[in] handle ハンドル
768 @return 処理結果を返します。
769 */
770 inline Result CloseApplication( const u8* pParam=NULL, size_t paramSize=0, Handle handle=NN_APPLET_HANDLE_NONE )
771 {
772 return detail::CloseApplication( pParam, paramSize, handle );
773 }
774 /*!
775 @}
776 */
777
778 // Obsolete な関数。
PrepareToClosePreloadedApplication(void)779 inline Result PrepareToClosePreloadedApplication(void)
780 {
781 return detail::PrepareToCloseApplication( true );
782 }
783 inline Result ClosePreloadedApplication( const u8* pParam=NULL, size_t paramSize=0, Handle handle=NN_APPLET_HANDLE_NONE )
784 {
785 return detail::CloseApplication( pParam, paramSize, handle );
786 }
787
788 //================================================================
789 // ホームメニュー
790 //================================================================
791 /*!
792 @name ホームメニュー
793 @{
794 */
795 /*! :private
796 @brief ホームメニューへ移行する準備を行います。
797
798 この関数の後に CloseApplication() を呼ぶことでホームメニューへ移行します。
799
800 通常アプリケーションがこの関数を呼ぶことはありません。
801
802 @return 処理結果を返します。
803 */
PrepareToJumpToHomeMenu(void)804 inline Result PrepareToJumpToHomeMenu(void)
805 {
806 return detail::PrepareToJumpToHomeMenu();
807 }
808
809 /*! :private
810 @brief ホームメニューへ移行します。
811
812 この関数の前に PrepareToJumpToHomeMenu() が呼ばれている必要があります。
813
814 この関数を呼んだ後に、WaitForStarting() で起動待ちを行ってください。
815
816 通常アプリケーションがこの関数を呼ぶことはありません。
817
818 @param[in] pParam ホームメニューへ送るパラメータバッファ
819 @param[in] paramSize ホームメニューへ送るパラメータバッファのサイズ
820 @param[in] handle ホームメニューへ送るハンドル
821 @return 処理結果を返します。
822 */
823 inline Result JumpToHomeMenu( const u8* pParam=NULL, size_t paramSize=0, Handle handle=NN_APPLET_HANDLE_NONE )
824 {
825 return detail::JumpToHomeMenu( pParam, paramSize, handle );
826 }
827 /*!
828 @}
829 */
830
831 //================================================================
832 // アプリケーションジャンプ
833 //================================================================
834 /*!
835 @name アプリケーションジャンプ
836 @{
837 */
838 inline Result PrepareToJumpToOtherApplication( ProgramId programId, nn::fs::MediaType mediaType=nn::fs::MEDIA_TYPE_NAND )
839 {
840 return detail::PrepareToJumpToOtherApplication( programId, mediaType );
841 }
PrepareToJumpToCallerApplication(void)842 inline Result PrepareToJumpToCallerApplication(void)
843 {
844 return detail::PrepareToJumpToCallerApplication();
845 }
PrepareToJumpToSelfApplication(void)846 inline Result PrepareToJumpToSelfApplication(void)
847 {
848 return detail::PrepareToJumpToSelfApplication();
849 }
850 /*! :private
851 @brief 自身を終了し、他のアプリケーションを起動します。
852 @param[in] pParam 起動するアプリケーションに渡す DeliverArg バッファ
853 @param[in] pHmacBuf 起動するアプリケーションに渡す HMAC バッファ
854 @return 処理結果を返します。
855 */
856 inline Result JumpToOtherApplication( const u8 pParam[]=NULL, const u8 pHmacBuf[]=NULL )
857 {
858 return detail::JumpToOtherApplication( pParam, pHmacBuf );
859 }
860 /*! :private
861 @brief 自身を終了し、呼び元のアプリケーションを起動します。
862 @param[in] pParam 起動するアプリケーションに渡す DeliverArg バッファ
863 @param[in] pHmacBuf 起動するアプリケーションに渡す HMAC バッファ
864 @return 処理結果を返します。
865 */
866 inline Result JumpToCallerApplication( const u8 pParam[]=NULL, const u8 pHmacBuf[]=NULL )
867 {
868 return detail::JumpToCallerApplication( pParam, pHmacBuf );
869 }
870 /*! :private
871 @brief 自身を終了し、もう一度自身のアプリケーションを起動します。
872
873 この自己ジャンプの処理を挟んでも、JumpToCallerApplication() で戻る
874 呼び元は変わりません。
875
876 @param[in] pParam 起動するアプリケーションに渡す DeliverArg バッファ
877 @param[in] pHmacBuf 起動するアプリケーションに渡す HMAC バッファ
878 @return 処理結果を返します。
879 */
880 inline Result JumpToSelfApplication( const u8 pParam[]=NULL, const u8 pHmacBuf[]=NULL )
881 {
882 return detail::JumpToSelfApplication( pParam, pHmacBuf );
883 }
884 /*!
885 @}
886 */
887
888 //================================================================
889 // 非公開
890 //================================================================
891 /*! :private
892 @brief VRAM のシステム領域を退避させます。
893 @return 処理結果を返します。
894 */
SaveVramSysArea(void)895 inline nn::Result SaveVramSysArea(void)
896 {
897 return detail::SaveVramSysArea();
898 }
899
900 /*! :private
901 @brief VRAM のシステム領域を復元します。
902 @return 処理結果を返します。
903 */
RestoreVramSysArea(void)904 inline nn::Result RestoreVramSysArea(void)
905 {
906 return detail::RestoreVramSysArea();
907 }
908 /*!
909 @}
910 */
911
912 }
913 }
914 }
915
916 /*!
917 @defgroup nn_applet applet
918
919 @brief APPLET を扱うモジュールです。
920
921 @{
922 */
923
924 #include <nn/util/detail/util_CLibImpl.h>
925
926
927 /*! :private
928 @brief APPLET ライブラリの初期化を行い、APPLET を登録します。
929
930 @detail 対応する C++ 関数 @ref nn::applet::CTR::Initialize() を参照してください。
931 */
932 NN_EXTERN_C inline nn::Result nnappletInitialize( AppletAttr appletAttr = NN_APPLET_DEFAULT_APPLET_ATTRIBUTE)
933 {
934 return nn::applet::CTR::Initialize(appletAttr);
935 }
936 /*! :private
937 @brief APPLET ライブラリにおける mutex をロックします。
938
939 @detail 対応する C++ 関数 @ref nn::applet::CTR::Lock() を参照してください。
940 */
nnappletLock(void)941 NN_EXTERN_C inline void nnappletLock(void)
942 {
943 nn::applet::CTR::Lock();
944 }
945 /*! :private
946 @brief APPLET ライブラリにおける mutex のロックを試みます。
947
948 @detail 対応する C++ 関数 @ref nn::applet::CTR::TryLock() を参照してください。
949 */
950 NN_EXTERN_C inline bool nnappletTryLock(nn::fnd::TimeSpan timeout=NN_APPLET_NO_WAIT)
951 {
952 return nn::applet::CTR::TryLock(timeout);
953 }
954 /*! :private
955 @brief APPLET ライブラリにおける mutex をアンロックします。
956
957 @detail 対応する C++ 関数 @ref nn::applet::CTR::Unlock() を参照してください。
958 */
nnappletUnlock(void)959 NN_EXTERN_C inline void nnappletUnlock(void)
960 {
961 nn::applet::CTR::Unlock();
962 }
963
964 //----------------------------------------------------------------
965 /*! :private
966 @brief 登録されている APPLET の数を数えます。
967
968 @detail 対応する C++ 関数 @ref nn::applet::CTR::CountRegisteredApplet() を参照してください。
969 */
nnappletCountRegisteredApplet(void)970 NN_EXTERN_C inline int nnappletCountRegisteredApplet(void)
971 {
972 return nn::applet::CTR::CountRegisteredApplet();
973 }
974 /*! :private
975 @brief APPLET が登録されているかを調べます。
976
977 @detail 対応する C++ 関数 @ref nn::applet::CTR::IsRegistered() を参照してください。
978 */
nnappletIsRegistered(AppletId appletId)979 NN_EXTERN_C inline bool nnappletIsRegistered( AppletId appletId )
980 {
981 return nn::applet::CTR::IsRegistered( appletId );
982 }
983
984 NN_EXTERN_C inline bool nnappletWaitForRegister( AppletId appletId, nn::fnd::TimeSpan span=NN_APPLET_WAIT_INFINITE )
985 {
986 return nn::applet::CTR::WaitForRegister( appletId, span );
987 }
988
989 /*!
990 @brief APPLET が現在動作選択されて active かを調べます。
991
992 @detail 対応する C++ 関数 @ref nn::applet::CTR::IsActive() を参照してください。
993 */
nnappletIsActive(void)994 NN_EXTERN_C inline bool nnappletIsActive(void)
995 {
996 return nn::applet::CTR::IsActive();
997 }
998
999 NN_EXTERN_C inline void nnappletAssignGpuRight(bool flag=true)
1000 {
1001 nn::applet::CTR::AssignGpuRight(flag);
1002 }
nnappletReleaseGpuRight(void)1003 NN_EXTERN_C inline void nnappletReleaseGpuRight(void)
1004 {
1005 nn::applet::CTR::AssignGpuRight(false);
1006 }
1007
1008 /*! :private
1009 @brief APPLET が現在描画権限を与えられているかを調べます。
1010
1011 @detail 対応する C++ 関数 @ref nn::applet::CTR::IsGpuRightGiven() を参照してください。
1012 */
nnappletIsGpuRightGiven(void)1013 NN_EXTERN_C inline bool nnappletIsGpuRightGiven(void)
1014 {
1015 return nn::applet::CTR::IsGpuRightGiven();
1016 }
1017
nnappletAttachTransferMemoryHandle(nn::os::TransferMemoryBlock * transferMemory,nn::Handle handle,size_t size,bit32 otherPermission)1018 NN_EXTERN_C inline void nnappletAttachTransferMemoryHandle( nn::os::TransferMemoryBlock* transferMemory, nn::Handle handle, size_t size, bit32 otherPermission )
1019 {
1020 nn::applet::CTR::AttachTransferMemoryHandle( transferMemory, handle, size, otherPermission );
1021 }
1022
1023
1024 /*!
1025 @}
1026 */
1027
1028 #endif // ifndef NN_APPLET_CTR_APPLET_API_H_
1029