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