diff options
| author | Rozelette <Rozelette@users.noreply.github.com> | 2021-04-19 16:44:12 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-04-19 17:44:12 -0400 |
| commit | e97f10a6fa573e8b817ed03a4674d52b1818dafa (patch) | |
| tree | 25821c9094c4aea2f1ad167c6227d2d2afbcd3f2 /src/code | |
| parent | 768ca0839b862f1eff09661d9b20af51f70a738e (diff) | |
sys_slowly OK (#101)
* sys_slowly OK
* Feedback
* rename type member
Diffstat (limited to 'src/code')
| -rw-r--r-- | src/code/sys_slowly.c | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/src/code/sys_slowly.c b/src/code/sys_slowly.c new file mode 100644 index 000000000..60baad68c --- /dev/null +++ b/src/code/sys_slowly.c @@ -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); +} |
