diff options
author | red031000 <rubenru09@aol.com> | 2021-07-23 01:11:15 +0100 |
---|---|---|
committer | red031000 <rubenru09@aol.com> | 2021-07-23 01:12:27 +0100 |
commit | 5bf13c7f48fe91c7902ce50250bc1a5a2398a2ae (patch) | |
tree | 2e91e60bdb7a9174b16d8ca1b532809d4ae2e5b6 /arm9/lib/NitroSDK/src/SND_alarm.c | |
parent | c2d91a2d997afd01fa4f40e1e16d5ee85557c9a8 (diff) |
separate out libs to libc, libnns and NitroSDK
Diffstat (limited to 'arm9/lib/NitroSDK/src/SND_alarm.c')
-rw-r--r-- | arm9/lib/NitroSDK/src/SND_alarm.c | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/arm9/lib/NitroSDK/src/SND_alarm.c b/arm9/lib/NitroSDK/src/SND_alarm.c new file mode 100644 index 00000000..e216c02c --- /dev/null +++ b/arm9/lib/NitroSDK/src/SND_alarm.c @@ -0,0 +1,40 @@ +#include "SND_alarm.h" + +struct AlarmCallback { + SNDAlarmCallback cb; + void *data; + u8 id; + u8 padding[3]; +}; + +static struct AlarmCallback sCallbackTable[SND_ALARM_COUNT]; + +ARM_FUNC void SND_AlarmInit(void) { + for (s32 i = 0; i < SND_ALARM_COUNT; i++) { + sCallbackTable[i].cb = NULL; + sCallbackTable[i].data = NULL; + sCallbackTable[i].id = 0; + } +} + +ARM_FUNC void SNDi_IncAlarmId(u32 idx) { + struct AlarmCallback *ac = &sCallbackTable[idx]; + ac->id++; +} + +ARM_FUNC u8 SNDi_SetAlarmHandler(u32 idx, SNDAlarmCallback cb, void *data) { + struct AlarmCallback *ac = &sCallbackTable[idx]; + ac->cb = cb; + ac->data = data; + ac->id++; + return ac->id; +} + +ARM_FUNC void SNDi_CallAlarmHandler(s32 idx) { + struct AlarmCallback *ac = &sCallbackTable[idx & 0xFF]; + if (((idx >> 8) & 0xFF) != ac->id) + return; + if (ac->cb == NULL) + return; + ac->cb(ac->data); +} |