link playercall

This commit is contained in:
Prakxo
2024-06-08 19:50:33 +02:00
parent dd463a6e6f
commit d9cf62aa29
5 changed files with 104 additions and 1 deletions
@@ -0,0 +1,83 @@
#include "jaudio_NES/playercall.h"
#include "jaudio_NES/audiostruct.h"
static PLAYER_CALL PLAYER_CALLLIST[16];
extern void ResetPlayerCallback(){
int i;
for(i = 0; i < 16; i++){
PLAYER_CALLLIST[i].callback = nullptr;
}
}
static s32 Jac_CheckPlayerCallback(PlayerCallBack callback, void* arg){
int i;
for(i = 0; i < 16; i++){
if(PLAYER_CALLLIST[i].callback == callback && PLAYER_CALLLIST[i].arg == arg){
return i;
}
}
return -1;
}
extern s32 Jac_RegisterDspPlayerCallback(PlayerCallBack callback, void* arg){
s32 idx = Jac_RegisterPlayerCallback(callback,arg);
if(idx == -1){
return -1;
}
PLAYER_CALLLIST[idx].DSP_mode = true;
return idx;
}
extern s32 Jac_RegisterPlayerCallback(PlayerCallBack callback, void* arg){
u32 i;
for(i = 0; i < 16; i++){
if(PLAYER_CALLLIST[i].callback == nullptr){
break;
}
}
if(i == 16){
return -1;
}
if(Jac_CheckPlayerCallback(callback,arg) != -1){
return -1;
}
else{
PLAYER_CALLLIST[i].callback = callback;
PLAYER_CALLLIST[i].arg = arg;
PLAYER_CALLLIST[i].DSP_mode = false;
return i;
}
return -1;
}
extern void PlayerCallback(){
u32 i;
for(i = 0; i < 16; i++){
PlayerCallBack callback = PLAYER_CALLLIST[i].callback;
if(callback != nullptr && PLAYER_CALLLIST[i].DSP_mode == false && callback(PLAYER_CALLLIST[i].arg) == -1){
PLAYER_CALLLIST[i].callback = nullptr;
}
}
}
extern void DspPlayerCallback(){
u32 i;
for(i = 0; i < 16; i++){
PlayerCallBack callback = PLAYER_CALLLIST[i].callback;
if(callback != nullptr && PLAYER_CALLLIST[i].DSP_mode == true && callback(PLAYER_CALLLIST[i].arg) == -1){
PLAYER_CALLLIST[i].callback = nullptr;
}
}
}