Files
2025-03-15 20:35:06 -04:00

82 lines
2.3 KiB
C++

#ifndef JASDSPCHANNEL_H
#define JASDSPCHANNEL_H
#include "dolphin/os/OSTime.h"
namespace JASystem {
class TChannel;
namespace DSPInterface {
class DSPBuffer;
}
extern OSTick history[];
extern f32 DSP_LIMIT_RATIO;
extern OSTick old_time;
class TDSPChannel {
public:
TDSPChannel() {
field_0xc = NULL;
mCallback = NULL;
}
~TDSPChannel() {}
void init(u8);
int allocate(u32);
void free();
bool forceStop();
void forceDelete();
void play();
void stop();
static void initAll();
static TDSPChannel* alloc(u32, u32);
static int free(TDSPChannel*, u32);
static TDSPChannel* getLower();
static TDSPChannel* getLowerActive();
static BOOL breakLower(u8);
static bool breakLowerActive(u8);
static void updateAll();
void onUpdate(u32);
static int getNumBreak();
u8 getNumber() { return mNumber; }
u8 getStatus() { return mStatus; }
u8 getPriority() { return mPriority; }
void setPriority(u8 priority) { mPriority = priority; }
u16 getPriorityTime() { return mPriorityTime; }
void setPriorityTime(u16 time) { mPriorityTime = time; }
u16 getCBInterval() { return mCBInterval; }
void setCBInterval(u16 interval) { mCBInterval = interval; }
void decCBInterval() { mCBInterval--; }
TChannel* getLogicalChannel() {
if (mCallback != NULL) {
return (TChannel*)field_0x8; // ?? is this userdata?
} else {
return NULL;
}
}
// TODO: inlines
void checkSign(u32) {}
void isFree() {}
void forceStop(TDSPChannel*) {}
void release(TDSPChannel*, u32) {}
/* 0x00 */ u8 mNumber;
/* 0x01 */ u8 mStatus;
/* 0x02 */ u8 field_0x2;
/* 0x03 */ u8 mPriority;
/* 0x04 */ u16 mPriorityTime;
/* 0x06 */ u16 mCBInterval;
/* 0x08 */ u32 field_0x8;
/* 0x0C */ DSPInterface::DSPBuffer* field_0xc;
/* 0x10 */ int (*mCallback)(TDSPChannel*, u32);
static int smnFree;
static TDSPChannel* DSPCH;
static int smnUse;
};
}
#endif /* JASDSPCHANNEL_H */