1 /*---------------------------------------------------------------------------*
2   Project:  Dolphin OS Alarm API
3   File:     OSAlarm.h
4 
5   Copyright 1998, 1999 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   $Log: OSAlarm.h,v $
14   Revision 1.6  2006/08/11 09:29:40  yasumoto_yoshitaka
15   suppress padding warning
16 
17   Revision 1.5  2006/08/11 06:56:29  yasumoto_yoshitaka
18   suppress padding warning
19 
20   Revision 1.4  2006/07/04 08:57:52  hiratsu
21   Added OSSet/GetAlarmUserData() API.
22 
23   Revision 1.3  2006/02/14 05:29:34  hirose
24   Deleted OSInitAlarm() -- now initialized in OSInit().
25 
26   Revision 1.2  2006/02/04 11:56:47  hashida
27   (none)
28 
29   Revision 1.1.1.1  2005/12/29 06:53:28  hiratsu
30   Initial import.
31 
32   Revision 1.1.1.1  2005/05/12 02:41:07  yasuh-to
33   Ported from dolphin source tree.
34 
35 
36     8     2004/02/16 10:18 Ueno_kyu
37     Removed OSAlarmQueue{}.
38 
39     7     2004/02/04 11:17 Ueno_kyu
40     Modified OSAlarm{} to keep an alarm queue (for Windows).
41     Added OSAlarmQueue{} (for Windows).
42 
43     6     2002/08/08 10:33 Shiki
44     Changed OSCancelAlarms() interface.
45 
46     5     2002/08/07 22:03 Shiki
47     Added OSSetAlarmTag() and OSCancelAlarms().
48 
49     4     2001/02/05 11:20 Shiki
50     Added OSCreateAlarm().
51 
52     3     2001/01/30 10:06 Shiki
53     Added OSSetAbsAlarm().
54 
55     2     2000/03/16 7:03p Shiki
56     Revised to include OSContext.h.
57 
58     4     1999/08/30 4:20p Shiki
59     Added OSCheckAlarmQueue().
60 
61     3     1999/07/29 2:36p Shiki
62     Revised to use absolute ticks instead of delta between alarms.
63 
64     2     1999/07/28 9:26p Shiki
65     Added OSSetPeriodicAlarm() stuff.
66 
67     1     1999/07/28 6:06p Shiki
68     Initial check-in.
69   $NoKeywords: $
70  *---------------------------------------------------------------------------*/
71 
72 #ifndef __OSALARM_H__
73 #define __OSALARM_H__
74 
75 #include <revolution/types.h>
76 #include <revolution/os/OSContext.h>
77 
78 #ifdef __cplusplus
79 extern "C" {
80 #endif
81 
82 typedef struct OSAlarm  OSAlarm;
83 typedef void          (*OSAlarmHandler)(OSAlarm* alarm, OSContext* context);
84 
85 #ifdef  __MWERKS__
86 #pragma warn_padding off
87 #endif
88 struct OSAlarm
89 {
90     OSAlarmHandler  handler;
91     u32             tag;
92     OSTime          fire;
93     OSAlarm*        prev;
94     OSAlarm*        next;
95 
96     // Periodic alarm
97     OSTime          period;
98     OSTime          start;
99 
100     // User data
101     void*           userData;
102 #ifdef WIN32
103     void*           queue;
104 #endif
105 };
106 #ifdef  __MWERKS__
107 #pragma warn_padding reset
108 #endif
109 
110 void OSSetAlarm         ( OSAlarm* alarm, OSTime tick, OSAlarmHandler handler );
111 void OSSetAlarmTag      ( OSAlarm* alarm, u32 tag );
112 void OSSetAbsAlarm      ( OSAlarm* alarm, OSTime time, OSAlarmHandler handler );
113 void OSSetPeriodicAlarm ( OSAlarm* alarm, OSTime start, OSTime period,
114                           OSAlarmHandler handler );
115 void OSCreateAlarm      ( OSAlarm* alarm );
116 void OSCancelAlarm      ( OSAlarm* alarm );
117 void OSCancelAlarms     ( u32 tag );
118 
119 BOOL OSCheckAlarmQueue  ( void );
120 
121 void  OSSetAlarmUserData( OSAlarm* alarm, void* data );
122 void *OSGetAlarmUserData( const OSAlarm* alarm );
123 
124 
125 #ifdef __cplusplus
126 }
127 #endif
128 
129 #endif  // __OSALARM_H__
130