diff options
Diffstat (limited to 'arm7/lib/src')
-rw-r--r-- | arm7/lib/src/SND_command.c | 1 | ||||
-rw-r--r-- | arm7/lib/src/SND_exChannel.c | 76 | ||||
-rw-r--r-- | arm7/lib/src/SND_lockChannel.c | 81 |
3 files changed, 75 insertions, 83 deletions
diff --git a/arm7/lib/src/SND_command.c b/arm7/lib/src/SND_command.c index fc059c89..1ffcb0d5 100644 --- a/arm7/lib/src/SND_command.c +++ b/arm7/lib/src/SND_command.c @@ -12,7 +12,6 @@ #include "SND_capture.h" #include "SND_channel.h" #include "SND_exChannel.h" -#include "SND_lockChannel.h" #include "SND_main.h" #include "SND_seq.h" #include "SND_work.h" diff --git a/arm7/lib/src/SND_exChannel.c b/arm7/lib/src/SND_exChannel.c index 7919b5f7..f3ba922b 100644 --- a/arm7/lib/src/SND_exChannel.c +++ b/arm7/lib/src/SND_exChannel.c @@ -3,7 +3,6 @@ #include "SND_channel.h" #include "SND_main.h" #include "SND_work.h" -#include "SND_lockChannel.h" #include "SND_util.h" #include "registers.h" @@ -12,6 +11,9 @@ extern u8 sChannelAllocationOrder[SND_CHANNEL_COUNT]; extern u8 sAttackCoeffTable[19]; +static u32 sLockedChannelMask; +static u32 sWeakLockedChannelMask; + void SND_ExChannelInit(void) { struct SNDExChannel *chn; s32 i; @@ -344,3 +346,75 @@ void SND_FreeExChannel(struct SNDExChannel *chn) { chn->callbackUserData = NULL; } } + +void SND_StopUnlockedChannel(u32 channelMask, u32 weak) { + (void)weak; + + struct SNDExChannel *chn; + + for (int i = 0; i < SND_CHANNEL_COUNT && channelMask != 0; i++, channelMask >>= 1) { + if ((channelMask & 1) == 0) + continue; + + chn = &SNDi_Work.channels[i]; + + if (sLockedChannelMask & (1 << i)) + continue; + + if (chn->callback) + chn->callback(chn, 0, chn->callbackUserData); + + SND_StopChannel(i, 0); + chn->priority = 0; + SND_FreeExChannel(chn); + chn->flags.syncFlag = 0; + chn->flags.active = 0; + } +} + +void SND_LockChannel(u32 channelMask, u32 weak) { + struct SNDExChannel *chn; + u32 j = channelMask; + int i = 0; + + for (; i < SND_CHANNEL_COUNT && j != 0; i++, j >>= 1) { + if ((j & 1) == 0) + continue; + + chn = &SNDi_Work.channels[i]; + + if (sLockedChannelMask & (1 << i)) + continue; + + if (chn->callback) + chn->callback(chn, 0, chn->callbackUserData); + + SND_StopChannel(i, 0); + chn->priority = 0; + SND_FreeExChannel(chn); + chn->flags.syncFlag = 0; + chn->flags.active = 0; + } + + if (weak & 1) { + sWeakLockedChannelMask |= channelMask; + } else { + sLockedChannelMask |= channelMask; + } +} + +void SND_UnlockChannel(u32 channelMask, u32 weak) { + if (weak & 1) { + sWeakLockedChannelMask &= ~channelMask; + } else { + sLockedChannelMask &= ~channelMask; + } +} + +u32 SND_GetLockedChannel(u32 weak) { + if (weak & 1) { + return sWeakLockedChannelMask; + } else { + return sLockedChannelMask; + } +} diff --git a/arm7/lib/src/SND_lockChannel.c b/arm7/lib/src/SND_lockChannel.c deleted file mode 100644 index 871cf716..00000000 --- a/arm7/lib/src/SND_lockChannel.c +++ /dev/null @@ -1,81 +0,0 @@ -#include "SND_lockChannel.h" - -#include "SND_work.h" -#include "SND_exChannel.h" -#include "SND_channel.h" - -// TODO make these vars static after merging this file with exChannel -u32 sLockedChannelMask; -u32 sWeakLockedChannelMask; - -void SND_StopUnlockedChannel(u32 channelMask, u32 weak) { - (void)weak; - - struct SNDExChannel *chn; - - for (int i = 0; i < SND_CHANNEL_COUNT && channelMask != 0; i++, channelMask >>= 1) { - if ((channelMask & 1) == 0) - continue; - - chn = &SNDi_Work.channels[i]; - - if (sLockedChannelMask & (1 << i)) - continue; - - if (chn->callback) - chn->callback(chn, 0, chn->callbackUserData); - - SND_StopChannel(i, 0); - chn->priority = 0; - SND_FreeExChannel(chn); - chn->flags.syncFlag = 0; - chn->flags.active = 0; - } -} - -void SND_LockChannel(u32 channelMask, u32 weak) { - struct SNDExChannel *chn; - u32 j = channelMask; - int i = 0; - - for (; i < SND_CHANNEL_COUNT && j != 0; i++, j >>= 1) { - if ((j & 1) == 0) - continue; - - chn = &SNDi_Work.channels[i]; - - if (sLockedChannelMask & (1 << i)) - continue; - - if (chn->callback) - chn->callback(chn, 0, chn->callbackUserData); - - SND_StopChannel(i, 0); - chn->priority = 0; - SND_FreeExChannel(chn); - chn->flags.syncFlag = 0; - chn->flags.active = 0; - } - - if (weak & 1) { - sWeakLockedChannelMask |= channelMask; - } else { - sLockedChannelMask |= channelMask; - } -} - -void SND_UnlockChannel(u32 channelMask, u32 weak) { - if (weak & 1) { - sWeakLockedChannelMask &= ~channelMask; - } else { - sLockedChannelMask &= ~channelMask; - } -} - -u32 SND_GetLockedChannel(u32 weak) { - if (weak & 1) { - return sWeakLockedChannelMask; - } else { - return sLockedChannelMask; - } -} |