1 /*---------------------------------------------------------------------------*
2   Project:  Horizon
3   File:     applet.h
4 
5   Copyright (C)2009-2012 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: 48673 $
14  *---------------------------------------------------------------------------*/
15 
16 #ifndef NN_SAMPLE_DEMOS_DEMO1_APPLET_H_
17 #define NN_SAMPLE_DEMOS_DEMO1_APPLET_H_
18 
19 #include <nn/os.h>
20 #include <nn/applet.h>
21 
22 class TransitionHandler
23 {
24 public:
25     typedef void (*TRANSITION_CALLBACK)();
26 public:
TransitionHandler()27     TransitionHandler() {}
~TransitionHandler()28     ~TransitionHandler() {}
29 
30     /* Please see man pages for details
31 
32 
33      */
34     static void Initialize();
35     /* Please see man pages for details
36 
37      */
38     static void Finalize();
39     /* Please see man pages for details
40 
41      */
42     static void EnableSleep();
43     /* Please see man pages for details
44 
45      */
46     static void DisableSleep();
47     /* Please see man pages for details
48 
49 
50      */
51     static void Process();
52     /* Please see man pages for details
53 
54      */
55     static bool IsExitRequired();
56     /* Please see man pages for details
57 
58      */
59     static void Lock();
60     /* Please see man pages for details
61 
62      */
63     static bool TryLock();
64     /* Please see man pages for details
65 
66      */
67     static void Unlock();
68     /* Please see man pages for details
69 
70      */
71     static void LockForSleep();
72     /* Please see man pages for details
73 
74      */
75     static bool TryLockForSleep();
76     /* Please see man pages for details
77 
78      */
79     static void UnlockForSleep();
80 
81 
82     /* Please see man pages for details
83 
84      */
SetPrepareSleepCallback(TRANSITION_CALLBACK f)85     static void SetPrepareSleepCallback(TRANSITION_CALLBACK f) { s_PrepareSleepCallback = f; }
86 
87     /* Please see man pages for details
88 
89      */
SetAfterSleepCallback(TRANSITION_CALLBACK f)90     static void SetAfterSleepCallback(TRANSITION_CALLBACK f) { s_AfterSleepCallback = f; }
91 
92     /* Please see man pages for details
93 
94      */
SetPrepareHomeButtonCallback(TRANSITION_CALLBACK f)95     static void SetPrepareHomeButtonCallback(TRANSITION_CALLBACK f) { s_PrepareHomeButtonCallback = f; }
96 
97     /* Please see man pages for details
98 
99      */
SetAfterHomeButtonCallback(TRANSITION_CALLBACK f)100     static void SetAfterHomeButtonCallback(TRANSITION_CALLBACK f) { s_AfterHomeButtonCallback = f; }
101 
102     /* Please see man pages for details
103 
104      */
SetPreparePowerButtonCallback(TRANSITION_CALLBACK f)105     static void SetPreparePowerButtonCallback(TRANSITION_CALLBACK f) { s_PreparePowerButtonCallback = f; }
106 
107 private:
108     /* Please see man pages for details
109 
110      */
111     static AppletQueryReply SleepQueryCallback( uptr arg );
112     /* Please see man pages for details
113 
114      */
115     static void             AwakeCallback( uptr arg );
116 
117 private:
118     static bool                    s_IsExitRequired;
119 
120     // Flag to enable LCD after waiting for one-frame worth of rendering after recovering from sleep
121     static volatile bool           s_IsAfterWakeUp;
122 
123     // Event used for Sleep Mode
124     static nn::os::LightEvent      s_AwakeEvent;
125 
126     // CriticalSection used for mutual exclusion related to transitions and Sleep Mode
127     static nn::os::CriticalSection s_CriticalSection;
128     static nn::os::CriticalSection s_CriticalSectionForSleep;
129 
130     // Process before sleep transition
131     static TRANSITION_CALLBACK s_PrepareSleepCallback;
132     // Process after recovery from sleep
133     static TRANSITION_CALLBACK s_AfterSleepCallback;
134 
135     // Process before HOME Menu transition
136     static TRANSITION_CALLBACK s_PrepareHomeButtonCallback;
137     // Process after return from HOME Menu.
138     static TRANSITION_CALLBACK s_AfterHomeButtonCallback;
139 
140     // Process before display of POWER Menu
141     static TRANSITION_CALLBACK s_PreparePowerButtonCallback;
142 };
143 
144 #endif // NN_SAMPLE_DEMOS_DEMO1_APPLET_H_
145