summaryrefslogtreecommitdiff
path: root/arm9/lib/NitroSDK/src/SND_alarm.c
diff options
context:
space:
mode:
authorPikalaxALT <pikalaxalt@gmail.com>2021-07-25 13:23:02 -0400
committerPikalaxALT <pikalaxalt@gmail.com>2021-07-25 13:23:02 -0400
commit5e0e326b75402a36c4d31502b8b5a05b862ac23c (patch)
tree1b5807c1efb72dbdd9d01f329cefb41171913a64 /arm9/lib/NitroSDK/src/SND_alarm.c
parent1f9d4503c898f9138422215132b53224571a281a (diff)
parent68d7aa47cc52ef822220e0e35890863d7cad479f (diff)
Merge remote-tracking branch 'origin/master' into pikalax_work
Diffstat (limited to 'arm9/lib/NitroSDK/src/SND_alarm.c')
-rw-r--r--arm9/lib/NitroSDK/src/SND_alarm.c40
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);
+}