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: 26466 $
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_Ipc.h>
21 #include <nn/applet/CTR/applet_Parameters.h>
22 #include <nn/applet/CTR/applet_API.h>
23 #include <nn/applet/CTR/applet_Gfx.h>
24
25 namespace nn {
26 namespace applet {
27 namespace CTR {
28 namespace detail {
29
30 AppletWakeupState WaitForStarting( AppletId* pSenderId=NULL, u8* pParam=NULL, size_t paramSize=0, s32* pReadLen=NULL,
31 nn::Handle *pHandle=NULL, nn::fnd::TimeSpan span=NN_APPLET_WAIT_INFINITE );
32 AppletWakeupState ProcessHomeButtonIfPrepared(void);
33 }
34 }
35 }
36 }
37
38 namespace nn {
39 namespace applet {
40 namespace CTR {
41 /*!
42 @name ホームボタン
43 @{
44 */
45 /*!
46 @brief ホームボタンの状態を取得します。
47
48 nn::applet::CTR::HOME_BUTTON_NONE, HOME_BUTTON_SINGLE_PRESSED,
49 HOME_BUTTON_DOUBLE_PRESSED のいずれかを返します。
50
51 nn::applet::CTR::HOME_BUTTON_NONE 以外の状態のときには
52 アプリケーションで必要な処理を行った後に、
53 PrepareToJumpToHomeMenu(), JumpToHomeMenu() を呼んで WaitForStarting() で起動待ちを行うか、
54 JumpToHomeMenuIfPrepared() を呼んでください。
55
56 JumpToHomeMenuIfPrepared() は
57 PrepareToJumpToHomeMenu(), JumpToHomeMenu() を呼んで WaitForStarting() で起動待ちを行う
58 という一連の流れを内部で行っています。
59
60 @return 状態を返します。
61 */
62 AppletHomeButtonState GetHomeButtonState(void);
63
64 /*!
65 @brief ホームボタンの状態をクリアします。
66 */
67 void ClearHomeButtonState(void);
68 /*!
69 @}
70 */
71
72 /*!
73 @name ホームメニュー
74 @{
75 */
76 /*!
77 @brief ホームボタン処理を行います。
78
79 GetHomeButtonState() でホームボタンの状態を調べ、
80 必要なら PrepareToJumpToHomeMenu()、JumpToHomeMenu() を呼び出して
81 WaitForStarting() で起動待ちを行うという一連の動作をまとめて行います。
82
83 返り値は、WaitForStarting() の値をそのまま返しています。
84 nn::applet::CTR::WAKEUP_BY_CANCEL の場合は速やかにアプリケーションを終了させてください。
85
86 それ以外の返り値の場合は通常再開してください。
87
88 @return 起床した原因を返します。
89 */
ProcessHomeButtonIfPrepared(void)90 inline AppletWakeupState ProcessHomeButtonIfPrepared(void)
91 {
92 return detail::ProcessHomeButtonIfPrepared();
93 }
94 /*!
95 @}
96 */
97
98 /*!
99 @name スリープ
100 @{
101 */
102 /*!
103 @brief スリープ通知状態を取得します。
104
105 nn::applet::CTR::NOTIFY_NONE, NOTIFY_SLEEP_QUERY, NOTIFY_SLEEP_ACCEPT,
106 NOTIFY_SLEEP_REJECT, NOTIFY_SLEEP, NOTIFY_AWAKE のいずれかを返します。
107
108 スリープ問い合わせのコールバックが呼ばれ、"保留"(nn::applet::CTR::REPLY_LATER)
109 を返した後は nn::applet::CTR::NOTIFY_QUERY となっています。
110 このときには、速やかに ReplySleepQuery() で返答するようにしてください。
111
112 @return 状態を返します。
113 */
114 AppletSleepNotificationState GetSleepNotificationState(void);
115
116 /*!
117 @brief スリープ通知状態をクリアします。
118
119 GetSleepNotificationState() で取得できる状態が、
120 nn::applet::CTR::NOTIFY_NONE となります。
121
122 システムでは、この状態を用いて何かの動作を行っていませんので、
123 どのようなタイミングで状態を変更しても問題はありません。
124 */
125 void ClearSleepNotificationState(void);
126
127 /*!
128 @brief スリープ問い合わせへの返答を行います。
129
130 この関数は、スリープ問い合わせのコールバック
131 (SetSleepQueryCallback() で設定します)
132 で、"保留"(nn::CTR::applet::REPLY_LATER) を返した後に
133 問い合わせの返答を行うために使用してください。
134
135 @param[in] reply 返答
136 */
137 void ReplySleepQuery( AppletQueryReply reply );
138 /*!
139 @}
140 */
141
142 /*!
143 @name コールバック設定
144 @{
145 */
146 /*!
147 @brief ホームボタン検出コールバックを設定します。
148 @param[in] callback コールバック
149 @param[in] arg コールバックへの引数
150 */
151 void SetHomeButtonCallback( AppletHomeButtonCallback callback, uptr arg=0 );
152
153 /*!
154 @brief メッセージ受け取りコールバックを設定します。
155 @param[in] callback コールバック
156 @param[in] arg コールバックへの引数
157 */
158 void SetReceiveMessageCallback( AppletMessageCallback callback, uptr arg=0 );
159
160 /*!
161 @brief 電源ボタン検出コールバックを設定します。
162 @param[in] callback コールバック
163 @param[in] arg コールバックへの引数
164 */
165 void SetPowerButtonCallback( AppletPowerButtonCallback callback, uptr arg=0 );
166
167 /*! :private
168 @brief 共有メモリ要求受け取りコールバックを設定します。
169 @param[in] callback コールバック
170 @param[in] arg コールバックへの引数
171 */
172 void SetRequestMemoryCallback( AppletRequestMemoryCallback callback, uptr arg=0 );
173 /*! :private
174 @brief 共有メモリ解放コールバックを設定します。
175 @param[in] callback コールバック
176 @param[in] arg コールバックへの引数
177 */
178 void SetReleaseMemoryCallback( AppletReleaseMemoryCallback callback, uptr arg=0 );
179
180 /*! :private
181 @brief DSP スリープコールバックを設定します。
182 @param[in] callback コールバック
183 @param[in] arg コールバックへの引数
184 */
185 void SetDspSleepCallback( AppletDspSleepCallback callback, uptr arg=0 );
186 /*! :private
187 @brief DSP スリープ復帰コールバックを設定します。
188 @param[in] callback コールバック
189 @param[in] arg コールバックへの引数
190 */
191 void SetDspWakeUpCallback( AppletDspWakeUpCallback callback, uptr arg=0 );
192
193 /*!
194 @brief スリープ問い合わせコールバックを設定します。
195 @param[in] callback コールバック
196 @param[in] arg コールバックへの引数
197 */
198 void SetSleepQueryCallback( AppletSleepQueryCallback callback, uptr arg=0 );
199 /*!
200 @brief スリープコールバックを設定します。
201
202 この関数は廃止される予定です。
203
204 @param[in] callback コールバック
205 @param[in] arg コールバックへの引数
206 */
207 void SetSleepCallback( AppletSleepCallback callback, uptr arg=0 );
208 /*!
209 @brief スリープ復帰コールバックを設定します。
210 @param[in] callback コールバック
211 @param[in] arg コールバックへの引数
212 */
213 void SetAwakeCallback( AppletAwakeCallback callback, uptr arg=0 );
214
215 /*!
216 @brief シャットダウン通知コールバックを設定します。
217 @param[in] callback コールバック
218 @param[in] arg コールバックへの引数
219 */
220 void SetShutdownCallback( AppletShutdownCallback callback, uptr arg=0 );
221
222 /*!
223 @brief アプレット終了時コールバックを設定します。
224 @param[in] callback コールバック
225 @param[in] arg コールバックへの引数
226 */
227 void SetCloseAppletCallback( AppletCloseAppletCallback callback, uptr arg=0 );
228 /*!
229 @}
230 */
231
232 /*!
233 @name 動作制御
234 @{
235 */
236 /*!
237 @brief 自身の開始イベントが来るのを待ちます。
238
239 開始のイベントを受け取るまでこの関数から戻ります。
240 関数から戻る際には、AppletWakeupState 列挙型の値が返りますが、その値によって
241 以降の動作(通常再開するとか、アプリケーションを終了するとか)を決定する必要があります。
242
243 nn::applet::CTR::WAKEUP_BY_CANCEL を受け取った場合、速やかにアプリケーションを
244 終了させてください。
245
246 アプリケーションでは、それ以外は通常再開してください。
247
248 @param[out] pSenderId イベント送信元の アプレットID
249 @param[out] pParam パラメータバッファ
250 @param[in] paramSize パラメータバッファサイズ
251 @param[out] pReadLen 読み込みサイズ
252 @param[out] pHandle ハンドラ
253 @param[in] timeout タイムアウト時間
254 @return 状態を返します。
255 */
256 inline AppletWakeupState WaitForStarting( AppletId* pSenderId=NULL, u8* pParam=NULL, size_t paramSize=0, s32* pReadLen=NULL,
257 nn::Handle *pHandle=NULL, nn::fnd::TimeSpan timeout=NN_APPLET_WAIT_INFINITE )
258 {
259 return detail::WaitForStarting( pSenderId, pParam, paramSize, pReadLen, pHandle, timeout );
260 }
261 /*!
262 @}
263 */
264 }
265 }
266 }
267
268 #include <nn/util/detail/util_CLibImpl.h>
nnappletGetHomeButtonState(void)269 NN_EXTERN_C inline AppletHomeButtonState nnappletGetHomeButtonState(void)
270 {
271 return nn::applet::CTR::GetHomeButtonState();
272 }
nnappletClearHomeButtonState(void)273 NN_EXTERN_C inline void nnappletClearHomeButtonState(void)
274 {
275 nn::applet::CTR::ClearHomeButtonState();
276 }
277
278 NN_EXTERN_C inline AppletWakeupState nnappletWaitForStarting( AppletId* pSenderId=NULL, u8* pParam=NULL, size_t paramSize=0, s32* pReadLen=NULL, nn::Handle *pHandle=NULL )
279 {
280 return nn::applet::CTR::WaitForStarting( pSenderId, pParam, paramSize, pReadLen, pHandle );
281 }
nnappletProcessHomeButtonIfPrepared(void)282 NN_EXTERN_C inline AppletWakeupState nnappletProcessHomeButtonIfPrepared(void)
283 {
284 return nn::applet::CTR::ProcessHomeButtonIfPrepared();
285 }
286
287 #endif // ifndef NN_APPLET_CTR_APPLET_WRAPPER_H_
288