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: 33746 $
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 @param[in] callback コールバック
207 @param[in] arg コールバックへの引数
208 */
209 void SetAwakeCallback( AppletAwakeCallback callback, uptr arg=0 );
210
211 /*! :private
212 @brief シャットダウン通知コールバックを設定します。
213 @param[in] callback コールバック
214 @param[in] arg コールバックへの引数
215 */
216 void SetShutdownCallback( AppletShutdownCallback callback, uptr arg=0 );
217
218 /*! :private
219 @brief アプレット終了時コールバックを設定します。
220 @param[in] callback コールバック
221 @param[in] arg コールバックへの引数
222 */
223 void SetCloseAppletCallback( AppletCloseAppletCallback callback, uptr arg=0 );
224
225 /*! :private
226 @brief アプリケーションからホームメニュー/システムアプレット遷移時のコールバックを設定します。
227 @param[in] callback コールバック
228 @param[in] arg コールバックへの引数
229 */
230 void SetTransitionCallback( AppletTransitionCallback callback, uptr arg=0 );
231
232 /*! :private
233 @brief アプリケーション終了コールバックを設定します。
234 @param[in] callback コールバック
235 @param[in] arg コールバックへの引数
236 */
237 void SetCloseCallback( AppletCloseCallback callback, uptr arg=0 );
238
239 /*!
240 @}
241 */
242
243 /*!
244 @name 動作制御
245 @{
246 */
247 /*!
248 @brief 自身の開始イベントが来るのを待ちます。
249
250 @param[out] pSenderId イベント送信元の アプレットID
251 @param[out] pParam パラメータバッファ
252 @param[in] paramSize パラメータバッファサイズ
253 @param[out] pReadLen 読み込みサイズ
254 @param[out] pHandle ハンドラ
255 @param[in] timeout タイムアウト時間
256
257 @return 起床理由を返します。
258 */
259 inline AppletWakeupState WaitForStarting( AppletId* pSenderId=NULL, u8* pParam=NULL, size_t paramSize=0, s32* pReadLen=NULL,
260 nn::Handle *pHandle=NULL, nn::fnd::TimeSpan timeout=NN_APPLET_WAIT_INFINITE )
261 {
262 return detail::WaitForStarting( pSenderId, pParam, paramSize, pReadLen, pHandle, timeout );
263 }
264 /*!
265 @}
266 */
267
268
269 bool IsAppletPreloaded( AppletId id );
270 void WaitForAppletPreloaded( AppletId id );
271
272 /*!
273 @name ライブラリアプレットのプリロードと終了
274 @{
275 */
276 /*! :private
277 @brief ライブラリアプレットのプリロードが完了したかを調べます。
278 @param[in] id ライブラリアプレットのアプレット ID
279 @return 終了していれば true となります。
280 */
IsLibraryAppletPreloaded(void)281 inline bool IsLibraryAppletPreloaded(void)
282 {
283 return IsAppletPreloaded( APPLIB_APPLET_ID );
284 }
285 /*! :private
286 @brief ライブラリアプレットのプリロードが完了するまで待ちます。
287 */
WaitForLibraryAppletPreloaded(void)288 inline void WaitForLibraryAppletPreloaded(void)
289 {
290 WaitForAppletPreloaded( APPLIB_APPLET_ID );
291 }
292 /*!
293 @}
294 */
295
296 /*!
297 @name スリープ
298 @{
299 */
300 /*!
301 @brief スリープを可能にします。
302 @param[in] isSleepCheck true ならば、蓋が閉じられていればスリープ動作に入ります。
303 */
304 void EnableSleep( bool isSleepCheck=nn::applet::CTR::SLEEP_IF_SHELL_CLOSED );
305
306 /*!
307 @brief スリープを禁止にします。
308 @param[in] isReplyReject true ならば、スリープの問い合わせが来ている場合には
309 applet::ReplySleepQuery( applet::REPLY_REJECT ) を行います。
310 */
311 void DisableSleep( bool isReplyReject=nn::applet::CTR::REPLY_REJECT_IF_LATER );
312
313 /*! :private
314 @brief スリープが可能かどうかを取得します。
315
316 EnableSleep() が呼ばれスリープ可能か、DisableSleep() が呼ばれスリープが禁止状態か
317 を調べて結果を取得します。
318
319 @return true ならばスリープ可能です。
320 */
321 bool IsEnableSleep();
322 /*!
323 @}
324 */
325 }
326 }
327 }
328
329 #include <nn/util/detail/util_CLibImpl.h>
nnappletGetHomeButtonState(void)330 NN_EXTERN_C inline AppletHomeButtonState nnappletGetHomeButtonState(void)
331 {
332 return nn::applet::CTR::GetHomeButtonState();
333 }
nnappletClearHomeButtonState(void)334 NN_EXTERN_C inline void nnappletClearHomeButtonState(void)
335 {
336 nn::applet::CTR::ClearHomeButtonState();
337 }
338
339 NN_EXTERN_C inline AppletWakeupState nnappletWaitForStarting( AppletId* pSenderId=NULL, u8* pParam=NULL, size_t paramSize=0, s32* pReadLen=NULL, nn::Handle *pHandle=NULL )
340 {
341 return nn::applet::CTR::WaitForStarting( pSenderId, pParam, paramSize, pReadLen, pHandle );
342 }
nnappletProcessHomeButton(void)343 NN_EXTERN_C inline bool nnappletProcessHomeButton(void)
344 {
345 return nn::applet::CTR::ProcessHomeButton();
346 }
347
348 #endif // ifndef NN_APPLET_CTR_APPLET_WRAPPER_H_
349