sys_slowly OK (#101)

* sys_slowly OK

* Feedback

* rename type member
This commit is contained in:
Rozelette
2021-04-19 16:44:12 -05:00
committed by GitHub
parent 768ca0839b
commit e97f10a6fa
12 changed files with 92 additions and 25 deletions
+44
View File
@@ -0,0 +1,44 @@
#include <ultra64.h>
#include <global.h>
#define SLOWLY_STATUS_DONE (1 << 0)
#define SLOWLY_STATUS_STARTED (1 << 1)
void Slowly_Main(SlowlyTask* slowly) {
slowly->status |= SLOWLY_STATUS_STARTED;
switch (slowly->callbackArgCount) {
case SLOWLY_CALLBACK_NO_ARGS:
slowly->callback0();
break;
case SLOWLY_CALLBACK_ONE_ARG:
slowly->callback1(slowly->callbackArg0);
break;
case SLOWLY_CALLBACK_TWO_ARGS:
slowly->callback2(slowly->callbackArg0, slowly->callbackArg1);
break;
}
slowly->status |= SLOWLY_STATUS_DONE;
}
void Slowly_ThreadEntry(SlowlyTask* slowly) {
Slowly_Main(slowly);
}
void Slowly_Start(SlowlyTask* slowly, void* stack, void (*callback)(), void* callbackArg0, void* callbackArg1) {
bzero(slowly, sizeof(SlowlyTask));
slowly->callbackArgCount = SLOWLY_CALLBACK_TWO_ARGS;
slowly->status = 0;
slowly->callback0 = callback;
slowly->callbackArg0 = callbackArg0;
slowly->callbackArg1 = callbackArg1;
osCreateThread(&slowly->thread, Z_THREAD_ID_SLOWLY, Slowly_ThreadEntry, slowly, stack, Z_PRIORITY_SLOWLY);
osStartThread(&slowly->thread);
}
void Slowly_Stop(SlowlyTask* slowly) {
osDestroyThread(&slowly->thread);
}