} tTimer;
// === PROTOTYPES ===
-void Timer_CallTimers();
+void Timer_CallTimers(void);
// === GLOBALS ===
-Uint64 giTicks = 0;
-Sint64 giTimestamp = 0;
-Uint64 giPartMiliseconds = 0;
-tTimer gTimers[NUM_TIMERS];
+volatile Uint64 giTicks = 0;
+volatile Sint64 giTimestamp = 0;
+volatile Uint64 giPartMiliseconds = 0;
+tTimer gTimers[NUM_TIMERS]; // TODO: Replace by a ring-list timer
// === CODE ===
-/**
- * \fn Sint64 now()
- * \brief Return the current timestamp
- */
-Sint64 now()
-{
- return giTimestamp;
-}
-
/**
* \fn void Timer_CallTimers()
*/
{
int i;
void (*callback)(void *);
+ void *arg;
- for(i = 0;
- i < NUM_TIMERS;
- i ++)
+ for(i = 0; i < NUM_TIMERS; i ++)
{
if(gTimers[i].Callback == NULL) continue;
if(giTimestamp < gTimers[i].FiresAfter) continue;
- callback = gTimers[i].Callback;
+ callback = gTimers[i].Callback; arg = gTimers[i].Argument;
gTimers[i].Callback = NULL;
- callback(gTimers[i].Argument);
+ callback(arg);
}
}
/**
- * \fn int Time_CreateTimer(int Delta, void *Callback, void *Argument)
+ * \fn int Time_CreateTimer(int Delta, tTimerCallback *Callback, void *Argument)
*/
-int Time_CreateTimer(int Delta, void *Callback, void *Argument)
+int Time_CreateTimer(int Delta, tTimerCallback *Callback, void *Argument)
{
int ret;
void Time_Delay(int Delay)
{
Sint64 dest = giTimestamp + Delay;
- while(dest < giTimestamp) Threads_Yield();
+ //Log("Time_Delay: dest = %lli", dest);
+ while(dest > giTimestamp) Threads_Yield();
+ //Log("Time_Delay: giTimestamp = %lli", giTimestamp);
}
// === EXPORTS ===
-EXPORT(now);
EXPORT(Time_CreateTimer);
EXPORT(Time_RemoveTimer);
EXPORT(Time_Delay);