From e97f10a6fa573e8b817ed03a4674d52b1818dafa Mon Sep 17 00:00:00 2001 From: Rozelette Date: Mon, 19 Apr 2021 16:44:12 -0500 Subject: sys_slowly OK (#101) * sys_slowly OK * Feedback * rename type member --- src/code/sys_slowly.c | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 src/code/sys_slowly.c (limited to 'src/code') 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 +#include + +#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); +} -- cgit v1.2.3