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