mirror of
https://github.com/HarbourMasters/Starship.git
synced 2025-02-09 03:37:49 +03:00
51 lines
1.1 KiB
C
51 lines
1.1 KiB
C
#include "sys.h"
|
|
|
|
TimerTask sTimerTasks[16];
|
|
|
|
TimerTask* Timer_AllocateTask(void) {
|
|
s32 i;
|
|
|
|
for (i = 0; i < ARRAY_COUNT(sTimerTasks); i++) {
|
|
if (!sTimerTasks[i].active) {
|
|
return &sTimerTasks[i];
|
|
}
|
|
}
|
|
return NULL;
|
|
}
|
|
|
|
int32_t Timer_CreateTask(uint64_t time, TimerAction action, s32* address, s32 value) {
|
|
TimerTask* task = Timer_AllocateTask();
|
|
|
|
if (task == NULL) {
|
|
return -1;
|
|
}
|
|
task->active = true;
|
|
task->action = action;
|
|
task->address = address;
|
|
task->value = value;
|
|
return osSetTimer(&task->timer, time, 0, &gTimerTaskMsgQueue, OS_MESG_PTR(task));
|
|
}
|
|
|
|
void Timer_Increment(s32* address, s32 value) {
|
|
*address += value;
|
|
}
|
|
|
|
void Timer_SetValue(s32* address, s32 value) {
|
|
*address = value;
|
|
}
|
|
|
|
void Timer_CompleteTask(TimerTask* task) {
|
|
if (task->action != NULL) {
|
|
task->action(task->address, task->value);
|
|
}
|
|
task->active = false;
|
|
}
|
|
|
|
void Timer_Wait(u64 time) {
|
|
OSTimer timer;
|
|
OSMesg dummy;
|
|
|
|
osSetTimer(&timer, time, 0, &gTimerWaitMesgQueue, NULL);
|
|
MQ_WAIT_FOR_MESG(&gTimerWaitMesgQueue, &dummy);
|
|
}
|