1 /*---------------------------------------------------------------------------*
2 Project: Horizon
3 File: applet_Wrapper.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: 32608 $
14 *---------------------------------------------------------------------------*/
15
16 #ifndef NN_APPLET_CTR_APPLET_WRAPPER_H_
17 #define NN_APPLET_CTR_APPLET_WRAPPER_H_
18
19 #include <nn/os.h>
20 #include <nn/applet/CTR/applet_Parameters.h>
21 #include <nn/applet/CTR/applet_API.h>
22 #include <nn/applet/CTR/applet_Gfx.h>
23
24 namespace nn {
25 namespace applet {
26 namespace CTR {
27 namespace detail {
28
29 AppletWakeupState WaitForStarting( AppletId* pSenderId=NULL, u8* pParam=NULL, size_t paramSize=0, s32* pReadLen=NULL,
30 nn::Handle *pHandle=NULL, nn::fnd::TimeSpan span=NN_APPLET_WAIT_INFINITE );
31 bool ProcessHomeButton(void);
32 }
33 }
34 }
35 }
36
37 namespace nn {
38 namespace applet {
39 namespace CTR {
40 /*!
41 @name ホームメニュー
42 @{
43 */
44 /*!
45 @brief ホームボタンの状態を取得します。
46 @return 状態を返します。
47 */
48 AppletHomeButtonState GetHomeButtonState(void);
49
50 /*!
51 @brief ホームボタンの状態をクリアします。
52 */
53 void ClearHomeButtonState(void);
54
55 // 内部関数(非公開)
56 bool IsExpectedToJumpToHomeMenu(void);
57 // 内部関数(非公開)
58 void SetExpectationToJumpToHomeMenu( bool sw );
59
60 /*!
61 @brief ホームボタンの処理を行う要求があるかを調べます。
62 @return 処理要求の有無を返します。true ならばホームボタン処理が必要です。
63 */
64 bool IsExpectedToProcessHomeButton(void);
65 /*!
66 @}
67 */
68
69 /*!
70 @name ホームメニュー
71 @{
72 */
73 /*!
74 @brief ホームメニュー遷移処理を行います。
75 @return ウェイトする必要があるかどうかを返します。
76 */
ProcessHomeButton(void)77 inline bool ProcessHomeButton(void)
78 {
79 return detail::ProcessHomeButton();
80 }
81
82 // ↓この関数は古い表記です。変わりにProcessHomeButton()を使ってください。
83 // (互換性のために本バージョンでは残してあります)
ProcessHomeButtonIfPrepared(void)84 inline bool ProcessHomeButtonIfPrepared(void)
85 {
86 return detail::ProcessHomeButton();
87 }
88 /*!
89 @}
90 */
91
92 /*!
93 @name 電源ボタン
94 @{
95 */
96 /*!
97 @brief 電源ボタン遷移処理を行います。
98 @return 待ちうけを行う必要があるかどうかを返します。
99 */
100 bool ProcessPowerButton(void);
101 /*!
102 @}
103 */
104
105 /*!
106 @name スリープ
107 @{
108 */
109 /*!
110 @brief スリープ通知状態を取得します。
111 @return 状態を返します。
112 */
113 AppletSleepNotificationState GetSleepNotificationState(void);
114
115 /*!
116 @brief スリープ通知状態が、返答の保留中という状態かどうかを調べます。
117 @return 返答保留中ならば true を返します。
118 */
119 bool IsExpectedToReplySleepQuery(void);
120
IsExpectedToReplySleepQuery(void)121 inline bool IsExpectedToReplySleepQuery(void)
122 {
123 return (GetSleepNotificationState() == nn::applet::CTR::NOTIFY_SLEEP_QUERY)? true: false;
124 }
125
126 /*!
127 @brief スリープ通知状態をクリアします。
128 */
129 void ClearSleepNotificationState(void);
130
131 /*!
132 @brief スリープ問い合わせへの返答を行います。
133 @param[in] reply 返答
134 */
135 void ReplySleepQuery( AppletQueryReply reply );
136 /*!
137 @}
138 */
139
140
141 /*!
142 @name コールバック設定
143 @{
144 */
145 /*!
146 @brief ホームボタン検出コールバックを設定します。
147 @param[in] callback コールバック
148 @param[in] arg コールバックへの引数
149 */
150 void SetHomeButtonCallback( AppletHomeButtonCallback callback, uptr arg=0 );
151
152 /*! :private
153 @brief メッセージ受け取りコールバックを設定します。
154 @param[in] callback コールバック
155 @param[in] arg コールバックへの引数
156 */
157 void SetReceiveMessageCallback( AppletMessageCallback callback, uptr arg=0 );
158
159 /*!
160 @brief 電源ボタン検出コールバックを設定します。
161 @param[in] callback コールバック
162 @param[in] arg コールバックへの引数
163 */
164 void SetPowerButtonCallback( AppletPowerButtonCallback callback, uptr arg=0 );
165
166 /*! :private
167 @brief 共有メモリ要求受け取りコールバックを設定します。
168 @param[in] callback コールバック
169 @param[in] arg コールバックへの引数
170 */
171 void SetRequestMemoryCallback( AppletRequestMemoryCallback callback, uptr arg=0 );
172 /*! :private
173 @brief 共有メモリ解放コールバックを設定します。
174 @param[in] callback コールバック
175 @param[in] arg コールバックへの引数
176 */
177 void SetReleaseMemoryCallback( AppletReleaseMemoryCallback callback, uptr arg=0 );
178
179 /*! :private
180 @brief DSP スリープコールバックを設定します。
181 @param[in] callback コールバック
182 @param[in] arg コールバックへの引数
183 */
184 void SetDspSleepCallback( AppletDspSleepCallback callback, uptr arg=0 );
185 /*! :private
186 @brief DSP スリープ復帰コールバックを設定します。
187 @param[in] callback コールバック
188 @param[in] arg コールバックへの引数
189 */
190 void SetDspWakeUpCallback( AppletDspWakeUpCallback callback, uptr arg=0 );
191
192 /*!
193 @brief スリープ問い合わせコールバックを設定します。
194 @param[in] callback コールバック
195 @param[in] arg コールバックへの引数
196 */
197 void SetSleepQueryCallback( AppletSleepQueryCallback callback, uptr arg=0 );
198 /*!
199 @brief スリープキャンセルコールバックを設定します。
200 @param[in] callback コールバック
201 @param[in] arg コールバックへの引数
202 */
203 void SetSleepCanceledCallback( AppletSleepCanceledCallback callback, uptr arg=0 );
204 /*!
205 @brief スリープ復帰コールバックを設定します。
206
207 なお、スリープから復帰したあとに nngxStartLcdDisplay() で
208 LCD の復帰を行うのはアプリケーションで行う必要があります。
209
210 @param[in] callback コールバック
211 @param[in] arg コールバックへの引数
212 */
213 void SetAwakeCallback( AppletAwakeCallback callback, uptr arg=0 );
214
215 /*! :private
216 @brief シャットダウン通知コールバックを設定します。
217 @param[in] callback コールバック
218 @param[in] arg コールバックへの引数
219 */
220 void SetShutdownCallback( AppletShutdownCallback callback, uptr arg=0 );
221
222 /*! :private
223 @brief アプレット終了時コールバックを設定します。
224 @param[in] callback コールバック
225 @param[in] arg コールバックへの引数
226 */
227 void SetCloseAppletCallback( AppletCloseAppletCallback callback, uptr arg=0 );
228
229 /*! :private
230 @brief アプリケーションからホームメニュー/システムアプレット遷移時のコールバックを設定します。
231 @param[in] callback コールバック
232 @param[in] arg コールバックへの引数
233 */
234 void SetTransitionCallback( AppletTransitionCallback callback, uptr arg=0 );
235
236 /*! :private
237 @brief アプリケーション終了コールバックを設定します。
238 @param[in] callback コールバック
239 @param[in] arg コールバックへの引数
240 */
241 void SetCloseCallback( AppletCloseCallback callback, uptr arg=0 );
242
243 /*!
244 @}
245 */
246
247 /*!
248 @name 動作制御
249 @{
250 */
251 /*!
252 @brief 自身の開始イベントが来るのを待ちます。
253
254 @param[out] pSenderId イベント送信元の アプレットID
255 @param[out] pParam パラメータバッファ
256 @param[in] paramSize パラメータバッファサイズ
257 @param[out] pReadLen 読み込みサイズ
258 @param[out] pHandle ハンドラ
259 @param[in] timeout タイムアウト時間
260
261 @return 起床理由を返します。
262 */
263 inline AppletWakeupState WaitForStarting( AppletId* pSenderId=NULL, u8* pParam=NULL, size_t paramSize=0, s32* pReadLen=NULL,
264 nn::Handle *pHandle=NULL, nn::fnd::TimeSpan timeout=NN_APPLET_WAIT_INFINITE )
265 {
266 return detail::WaitForStarting( pSenderId, pParam, paramSize, pReadLen, pHandle, timeout );
267 }
268 /*!
269 @}
270 */
271
272
273 bool IsAppletPreloaded( AppletId id );
274 void WaitForAppletPreloaded( AppletId id );
275
276 /*!
277 @name ライブラリアプレットのプリロードと終了
278 @{
279 */
280 /*! :private
281 @brief ライブラリアプレットのプリロードが完了したかを調べます。
282 @param[in] id ライブラリアプレットのアプレット ID
283 @return 終了していれば true となります。
284 */
IsLibraryAppletPreloaded(void)285 inline bool IsLibraryAppletPreloaded(void)
286 {
287 return IsAppletPreloaded( APPLIB_APPLET_ID );
288 }
289 /*! :private
290 @brief ライブラリアプレットのプリロードが完了するまで待ちます。
291 */
WaitForLibraryAppletPreloaded(void)292 inline void WaitForLibraryAppletPreloaded(void)
293 {
294 WaitForAppletPreloaded( APPLIB_APPLET_ID );
295 }
296 /*!
297 @}
298 */
299
300 /*!
301 @name スリープ
302 @{
303 */
304 /*!
305 @brief スリープを可能にします。
306 @param[in] isSleepCheck true ならば、蓋が閉じられていればスリープ動作に入ります。
307 */
308 void EnableSleep( bool isSleepCheck=nn::applet::CTR::SLEEP_IF_SHELL_CLOSED );
309
310 /*!
311 @brief スリープを禁止にします。
312 @param[in] isReplyReject true ならば、スリープの問い合わせが来ている場合には
313 applet::ReplySleepQuery( applet::REPLY_REJECT ) を行います。
314 */
315 void DisableSleep( bool isReplyReject=nn::applet::CTR::REPLY_REJECT_IF_LATER );
316
317 /*! :private
318 @brief スリープが可能かどうかを取得します。
319
320 EnableSleep() が呼ばれスリープ可能か、DisableSleep() が呼ばれスリープが禁止状態か
321 を調べて結果を取得します。
322
323 @return true ならばスリープ可能です。
324 */
325 bool IsEnableSleep();
326 /*!
327 @}
328 */
329 }
330 }
331 }
332
333 #include <nn/util/detail/util_CLibImpl.h>
nnappletGetHomeButtonState(void)334 NN_EXTERN_C inline AppletHomeButtonState nnappletGetHomeButtonState(void)
335 {
336 return nn::applet::CTR::GetHomeButtonState();
337 }
nnappletClearHomeButtonState(void)338 NN_EXTERN_C inline void nnappletClearHomeButtonState(void)
339 {
340 nn::applet::CTR::ClearHomeButtonState();
341 }
342
343 NN_EXTERN_C inline AppletWakeupState nnappletWaitForStarting( AppletId* pSenderId=NULL, u8* pParam=NULL, size_t paramSize=0, s32* pReadLen=NULL, nn::Handle *pHandle=NULL )
344 {
345 return nn::applet::CTR::WaitForStarting( pSenderId, pParam, paramSize, pReadLen, pHandle );
346 }
nnappletProcessHomeButton(void)347 NN_EXTERN_C inline bool nnappletProcessHomeButton(void)
348 {
349 return nn::applet::CTR::ProcessHomeButton();
350 }
351
352 #endif // ifndef NN_APPLET_CTR_APPLET_WRAPPER_H_
353