1 /*---------------------------------------------------------------------------*
2   Project:  TwlSDK - OS - include
3   File:     valarm.h
4 
5   Copyright 2003-2008 Nintendo.  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   $Date:: 2008-09-17#$
14   $Rev: 8556 $
15   $Author: okubata_ryoma $
16 
17  *---------------------------------------------------------------------------*/
18 
19 #ifndef NITRO_OS_VALARM_H_
20 #define NITRO_OS_VALARM_H_
21 
22 #ifdef __cplusplus
23 extern "C" {
24 #endif
25 
26 #include <nitro/misc.h>
27 #include <nitro/types.h>
28 
29 
30 //--------------------------------------------------------------------------------
31 //---- VAlarm Handler
32 typedef void (*OSVAlarmHandler) (void *);
33 
34 //---- struct of VAlarm
35 typedef struct OSiVAlarm OSVAlarm;
36 struct OSiVAlarm
37 {
38     //---- callback
39     OSAlarmHandler handler;
40     void   *arg;
41 
42     //---- tag (system use 0)
43     u32     tag;
44 
45     //---- fire time
46     u32     frame;
47     s16     fire;
48 
49     //---- permissible range to fire alarm
50     s16     delay;
51 
52     //---- link information (system uses)
53     OSVAlarm *prev;
54     OSVAlarm *next;
55 
56     //---- periodic alarm or not
57     BOOL    period;
58 
59     //---- flag whether its called
60     BOOL    finish;
61 
62     //---- flag for check to cancel
63     BOOL    canceled;
64 };
65 
66 //---- VAlarm resource
67 typedef struct OSVAlarmResource
68 {
69 	int num;
70 }
71 OSVAlarmResource;
72 //--------------------------------------------------------------------------------
73 /*---------------------------------------------------------------------------*
74   Name:         OS_InitVAlarm
75 
76   Description:  Initialize v-alarm module
77 
78   Arguments:    None.
79 
80   Returns:      None.
81  *---------------------------------------------------------------------------*/
82 void    OS_InitVAlarm(void);
83 
84 /*---------------------------------------------------------------------------*
85   Name:         OS_EndVAlarm
86 
87   Description:  end v-alarm system
88 
89   Arguments:    None
90 
91   Returns:      None
92  *---------------------------------------------------------------------------*/
93 void    OS_EndVAlarm(void);
94 
95 /*---------------------------------------------------------------------------*
96   Name:         OS_IsVAlarmAvailable
97 
98   Description:  check v-alarm system is available
99 
100   Arguments:    None
101 
102   Returns:      if available, TRUE.
103  *---------------------------------------------------------------------------*/
104 BOOL    OS_IsVAlarmAvailable(void);
105 
106 /*---------------------------------------------------------------------------*
107   Name:         OS_CreateVAlarm
108 
109   Description:  Create v-alarm
110 
111   Arguments:    alarm       pointer to v-alarm to be initialized
112 
113   Returns:      None.
114  *---------------------------------------------------------------------------*/
115 void    OS_CreateVAlarm(OSVAlarm *alarm);
116 
117 /*---------------------------------------------------------------------------*
118   Name:         OS_SetVAlarm
119 
120   Description:  Set v-alarm as a relative time
121 
122   Arguments:    alarm       pointer to v-alarm to be set
123                 count       count to fire
124                 delay       permission range of delay
125                 handler     v-alarm handler to be called
126                 arg         argument of handler
127 
128   Returns:      None.
129  *---------------------------------------------------------------------------*/
130 #define OS_VALARM_DELAY_MAX HW_LCD_LINES
131 void    OS_SetVAlarm(OSVAlarm *alarm, s16 count, s16 delay, OSVAlarmHandler handler, void *arg);
132 
133 /*---------------------------------------------------------------------------*
134 ( for compatibility with old definition )
135   Name:         OS_SetOneTimeVAlarm
136 
137   Description:  Set v-alarm as a relative time
138 
139   Arguments:    alarm       pointer to v-alarm to be set
140                 count       count to fire
141                 handler     v-alarm handler to be called
142                 arg         argument of handler
143 
144   Returns:      None.
145  *---------------------------------------------------------------------------*/
146 #define OSi_DELAYMARGIN  10
OS_SetOneTimeVAlarm(OSVAlarm * alarm,s16 count,OSVAlarmHandler handler,void * arg)147 static inline void OS_SetOneTimeVAlarm(OSVAlarm *alarm, s16 count, OSVAlarmHandler handler,
148                                        void *arg)
149 {
150     OS_SetVAlarm(alarm, count, OSi_DELAYMARGIN, handler, arg);
151 }
152 
153 /*---------------------------------------------------------------------------*
154   Name:         OS_SetPeriodicVAlarm
155 
156   Description:  set periodic v-alarm
157 
158   Arguments:    alarm          pointer to v-alarm to be set
159                 count          count to fire cyclicly
160                 delay          permission range of delay
161                 handler        v-alarm handler to be called
162                 arg            argument of handler
163 
164   Returns:      None.
165  *---------------------------------------------------------------------------*/
166 void    OS_SetPeriodicVAlarm(OSVAlarm *alarm, s16 count, s16 delay, OSVAlarmHandler handler,
167                              void *arg);
168 
169 /*---------------------------------------------------------------------------*
170   Name:         OS_SetVAlarmTag
171 
172   Description:  set tag which is used OS_CancelAlarms
173 
174   Arguments:    alarm        alarm to be set tag
175                 tag          tagNo
176 
177   Returns:      None.
178  *---------------------------------------------------------------------------*/
179 void    OS_SetVAlarmTag(OSVAlarm *alarm, u32 tag);
180 
181 /*---------------------------------------------------------------------------*
182   Name:         OS_CancelVAlarms
183 
184   Description:  cancel v-alarms which have specified tag
185 
186   Arguments:    tag          tagNo. to be cancelled. not 0
187 
188   Returns:      None.
189  *---------------------------------------------------------------------------*/
190 void    OS_CancelVAlarm(OSVAlarm *alarm);
191 
192 /*---------------------------------------------------------------------------*
193   Name:         OS_CancelAllVAlarms
194 
195   Description:  cancel all v-alarms
196 
197   Arguments:    None
198 
199   Returns:      None.
200  *---------------------------------------------------------------------------*/
201 void    OS_CancelVAlarms(u32 tag);
202 
203 /*---------------------------------------------------------------------------*
204   Name:         OS_CancelAllVAlarms
205 
206   Description:  cancel all v-alarms
207 
208   Arguments:    None
209 
210   Returns:      None.
211  *---------------------------------------------------------------------------*/
212 void    OS_CancelAllVAlarms(void);
213 
214 
215 //================================================================================
216 //        FOR DEBUG
217 //================================================================================
218 /*---------------------------------------------------------------------------*
219   Name:         OS_DumpVAlarm
220 
221   Description:  Dump all valarm resisterd currently
222                 This is for debug function.
223 
224   Arguments:    None
225 
226   Returns:      None
227  *---------------------------------------------------------------------------*/
228 void    OS_DumpVAlarm(void);
229 
230 /*---------------------------------------------------------------------------*
231   Name:         OS_GetNumberOfVAlarm
232 
233   Description:  get number of valarm
234 
235   Arguments:    None
236 
237   Returns:      number of valarm
238  *---------------------------------------------------------------------------*/
239 int     OS_GetNumberOfVAlarm(void);
240 
241 /*---------------------------------------------------------------------------*
242   Name:         OS_GetVAlarmResource
243 
244   Description:  store resources of valarm to specified pointer
245 
246   Arguments:    resource       pointer to store valarm resources
247 
248   Returns:      TRUE  ... success (always return this now)
249                 FALSE ... fail
250  *---------------------------------------------------------------------------*/
251 BOOL    OS_GetVAlarmResource(OSVAlarmResource *resource);
252 
253 #ifdef __cplusplus
254 } /* extern "C" */
255 #endif
256 
257 /* NITRO_OS_VALARM_H_ */
258 #endif
259