3 * - By John Hodge (thePowersGang)
10 #include <hal_proc.h> // Proc_GetCurThread
19 void (*Callback)(void*);
24 void Timer_CallTimers(void);
27 volatile Uint64 giTicks = 0;
28 volatile Sint64 giTimestamp = 0;
29 volatile Uint64 giPartMiliseconds = 0;
30 tTimer *gTimers; // TODO: Replace by a ring-list timer
34 * \fn void Timer_CallTimers()
36 void Timer_CallTimers()
38 while( gTimers && gTimers->FiresAfter < now() )
42 if( gTimers->Callback )
43 gTimers->Callback(gTimers->Argument);
45 Threads_PostEvent(gTimers->Argument, THREAD_EVENT_TIMER);
54 * \brief Schedule an action
56 tTimer *Time_CreateTimer(int Delta, tTimerCallback *Callback, void *Argument)
62 Argument = Proc_GetCurThread();
64 // TODO: Use a pool instead?
65 ret = malloc(sizeof(tTimer));
67 ret->Callback = Callback;
68 ret->FiresAfter = now() + Delta;
69 ret->Argument = Argument;
71 // Add into list (sorted)
72 for( p = (tTimer*)&gTimers, t = gTimers; t; p = t, t = t->Next )
74 if( t->FiresAfter > ret->FiresAfter ) break;
83 * \brief Delete a timer
85 void Time_RemoveTimer(tTimer *Timer)
88 for( p = (tTimer*)&gTimers, t = gTimers; t; p = t, t = t->Next )
100 * \fn void Time_Delay(int Delay)
101 * \brief Delay for a small ammount of time
103 void Time_Delay(int Delay)
105 // tTime dest = now() + Delay;
106 // while(dest > now()) Threads_Yield();
107 Time_CreateTimer(Delay, NULL, NULL);
108 Threads_WaitEvents(THREAD_EVENT_TIMER);
112 EXPORT(Time_CreateTimer);
113 EXPORT(Time_RemoveTimer);