mirror of
https://github.com/TwilitRealm/dusklight
synced 2026-08-04 16:49:42 -04:00
Merge decomp/main into dusk
Merges 44 upstream commits from zeldaret/tp decomp/main. Conflict resolutions: - .github/workflows/build.yml: keep deleted (not needed for PC port) - README.md: keep PC port README - J3DAnimation.h: keep OFFSET_PTR macro + add upstream forward decl - J3DModelLoader.h: keep BE(u32) mBlockNum + add field_0x1c - d_com_inf_game.h: keep PC port inlines + add upstream declarations - global.h: keep MULTI_CHAR macro + add FABSF macro - JUTConsole.cpp: keep uintptr_t cast for 64-bit - JUTDbPrint.cpp: keep PC enter_() helper + add cstring include - JUTResFont.cpp: take upstream loop/struct improvements with BE types - JUTCacheFont.cpp: take upstream decomp fix - float.h: use upstream !PLATFORM_GCN guard - d_a_npc_bouS/theB.cpp: keep MULTI_CHAR() for PC portability - d_a_npc_henna.cpp: keep uintptr_t + use upstream var name - d_demo.cpp: keep near_/far_ field renames for PC - d_resorce.cpp: keep uintptr_t + fix var name to res - d_s_room.cpp, m_Do_graphic.cpp: keep dusk includes + add cstring - m_Do_main.cpp: keep JHIComPortManager + use JAS_GLOBAL_INSTANCE_INIT - angle_utils.h: remove redundant types.h include
This commit is contained in:
+47
-49
@@ -1,5 +1,5 @@
|
||||
#ifndef _REVOLUTION_ARC_H_
|
||||
#define _REVOLUTION_ARC_H_
|
||||
#ifndef ARC_H
|
||||
#define ARC_H
|
||||
|
||||
#include <revolution/types.h>
|
||||
|
||||
@@ -7,61 +7,59 @@
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define ARC_ENTRY_NUM_INVALID (-1)
|
||||
typedef struct {
|
||||
unsigned int magic;
|
||||
int fstStart;
|
||||
int fstSize;
|
||||
int fileStart;
|
||||
int pad[4];
|
||||
} ARCHeader;
|
||||
|
||||
typedef struct {
|
||||
unsigned int magic;
|
||||
int fstStart;
|
||||
int fstSize;
|
||||
int fileStart;
|
||||
int pad[4];
|
||||
} ARCHeader;
|
||||
typedef struct {
|
||||
void* archiveStartAddr; // 0x0
|
||||
void* FSTStart; // 0x4
|
||||
void* fileStart; // 0x8
|
||||
u32 entryNum; // 0xC
|
||||
char* FSTStringStart; // 0x10
|
||||
u32 FSTLength; // 0x14
|
||||
u32 currDir; // 0x18
|
||||
} ARCHandle;
|
||||
|
||||
typedef struct {
|
||||
void* archiveStartAddr; // 0x0
|
||||
void* FSTStart; // 0x4
|
||||
void* fileStart; // 0x8
|
||||
u32 entryNum; // 0xC
|
||||
char* FSTStringStart; // 0x10
|
||||
u32 FSTLength; // 0x14
|
||||
u32 currDir; // 0x18
|
||||
} ARCHandle;
|
||||
typedef struct {
|
||||
ARCHandle* handle;
|
||||
u32 startOffset;
|
||||
u32 length;
|
||||
} ARCFileInfo;
|
||||
|
||||
typedef struct {
|
||||
ARCHandle* handle;
|
||||
u32 startOffset;
|
||||
u32 length;
|
||||
} ARCFileInfo;
|
||||
typedef struct {
|
||||
ARCHandle* handle;
|
||||
u32 entryNum;
|
||||
u32 location;
|
||||
u32 next;
|
||||
} ARCDir;
|
||||
|
||||
typedef struct {
|
||||
ARCHandle* handle;
|
||||
u32 entryNum;
|
||||
u32 location;
|
||||
u32 next;
|
||||
} ARCDir;
|
||||
typedef struct {
|
||||
ARCHandle* handle;
|
||||
u32 entryNum;
|
||||
BOOL isDir;
|
||||
char* name;
|
||||
} ARCDirEntry;
|
||||
|
||||
typedef struct {
|
||||
ARCHandle* handle;
|
||||
u32 entryNum;
|
||||
BOOL isDir;
|
||||
char* name;
|
||||
} ARCDirEntry;
|
||||
BOOL ARCInitHandle(void *, ARCHandle *);
|
||||
BOOL ARCFastOpen(ARCHandle *, s32, ARCFileInfo *);
|
||||
s32 ARCConvertPathToEntrynum(ARCHandle *, const char *);
|
||||
void* ARCGetStartAddrInMem(ARCFileInfo *);
|
||||
u32 ARCGetLength(ARCFileInfo *);
|
||||
BOOL ARCClose(ARCFileInfo *);
|
||||
BOOL ARCChangeDir(ARCHandle *, const char *);
|
||||
BOOL ARCGetCurrentDir(ARCHandle *, char *, u32);
|
||||
|
||||
BOOL ARCInitHandle(void*, ARCHandle*);
|
||||
BOOL ARCFastOpen(ARCHandle*, s32, ARCFileInfo*);
|
||||
s32 ARCConvertPathToEntrynum(ARCHandle*, const char*);
|
||||
void* ARCGetStartAddrInMem(ARCFileInfo*);
|
||||
u32 ARCGetLength(ARCFileInfo*);
|
||||
BOOL ARCClose(ARCFileInfo*);
|
||||
BOOL ARCChangeDir(ARCHandle*, const char*);
|
||||
BOOL ARCGetCurrentDir(ARCHandle*, char*, u32);
|
||||
|
||||
BOOL ARCOpenDir(ARCHandle*, const char*, ARCDir*);
|
||||
BOOL ARCReadDir(ARCDir*, ARCDirEntry*);
|
||||
BOOL ARCCloseDir(ARCDir*);
|
||||
BOOL ARCOpenDir(ARCHandle *, const char *, ARCDir *);
|
||||
BOOL ARCReadDir(ARCDir *, ARCDirEntry *);
|
||||
BOOL ARCCloseDir(ARCDir *);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif // _REVOLUTION_ARC_H_
|
||||
#endif // ARC_H
|
||||
|
||||
@@ -362,6 +362,16 @@ void AXSetVoiceLpf(AXVPB* p, AXPBLPF* lpf);
|
||||
void AXSetVoiceLpfCoefs(AXVPB* p, u16 a0, u16 b0);
|
||||
void AXGetLpfCoefs(u16 freq, u16* a0, u16* b0);
|
||||
|
||||
void AXGetAuxACallback(AXAuxCallback* cbOut, void** contextOut);
|
||||
u16 AXGetAuxAReturnVolume(void);
|
||||
u16 AXGetAuxBReturnVolume(void);
|
||||
u16 AXGetAuxCReturnVolume(void);
|
||||
void AXSetAuxAReturnVolume(u16 volume);
|
||||
void AXSetAuxBReturnVolume(u16 volume);
|
||||
void AXSetAuxCReturnVolume(u16 volume);
|
||||
void AXSetMasterVolume(u16 volume);
|
||||
u16 AXGetMasterVolume(void);
|
||||
|
||||
// DSPCode
|
||||
extern u16 axDspSlaveLength;
|
||||
extern u16 axDspSlave[AX_DSP_SLAVE_LENGTH];
|
||||
|
||||
+78
-183
@@ -1,214 +1,109 @@
|
||||
#ifndef _REVOLUTION_AXFX_H_
|
||||
#define _REVOLUTION_AXFX_H_
|
||||
#ifndef AXFX_H
|
||||
#define AXFX_H
|
||||
|
||||
#include <revolution/types.h>
|
||||
#include <revolution/ax.h>
|
||||
#include <revolution.h>
|
||||
#include <cstdio>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef struct AXFX_REVSTD_DELAYLINE {
|
||||
/* 0x00 */ s32 inPoint;
|
||||
/* 0x04 */ s32 outPoint;
|
||||
/* 0x08 */ s32 length;
|
||||
/* 0x0C */ f32* inputs;
|
||||
/* 0x10 */ f32 lastOutput;
|
||||
} AXFX_REVSTD_DELAYLINE;
|
||||
typedef struct AXFX_BUS {
|
||||
s32* left;
|
||||
s32* right;
|
||||
s32* surround;
|
||||
|
||||
typedef struct AXFX_REVSTD_WORK {
|
||||
/* 0x000 */ AXFX_REVSTD_DELAYLINE AP[6];
|
||||
/* 0x078 */ AXFX_REVSTD_DELAYLINE C[6];
|
||||
/* 0x0F0 */ f32 allPassCoeff;
|
||||
/* 0x0F4 */ f32 combCoef[6];
|
||||
/* 0x10C */ f32 lpLastout[3];
|
||||
/* 0x118 */ f32 level;
|
||||
/* 0x11C */ f32 damping;
|
||||
/* 0x120 */ s32 preDelayTime;
|
||||
/* 0x124 */ f32* preDelayLine[3];
|
||||
/* 0x130 */ f32* preDelayPtr[3];
|
||||
} AXFX_REVSTD_WORK;
|
||||
|
||||
typedef struct AXFX_REVERBSTD {
|
||||
/* 0x000 */ AXFX_REVSTD_WORK rv;
|
||||
/* 0x13C */ u8 tempDisableFX;
|
||||
/* 0x140 */ f32 coloration;
|
||||
/* 0x144 */ f32 mix;
|
||||
/* 0x148 */ f32 time;
|
||||
/* 0x14C */ f32 damping;
|
||||
/* 0x150 */ f32 preDelay;
|
||||
} AXFX_REVERBSTD;
|
||||
} AXFX_BUS;
|
||||
|
||||
typedef struct AXFX_BUFFERUPDATE {
|
||||
/* 0x00 */ s32* left;
|
||||
/* 0x04 */ s32* right;
|
||||
/* 0x08 */ s32* surround;
|
||||
s32* left;
|
||||
s32* right;
|
||||
s32* surround;
|
||||
|
||||
} AXFX_BUFFERUPDATE;
|
||||
|
||||
typedef struct AXFX_BUFFERUPDATE_DPL2 {
|
||||
/* 0x00 */ s32* L;
|
||||
/* 0x04 */ s32* R;
|
||||
/* 0x08 */ s32* Ls;
|
||||
/* 0x0C */ s32* Rs;
|
||||
} AXFX_BUFFERUPDATE_DPL2;
|
||||
typedef struct AXFX_REVERBHI_EXP {
|
||||
f32* earlyLine[3]; // at 0x0
|
||||
u32 earlyPos[3]; // at 0xC
|
||||
u32 earlyLength; // at 0x18
|
||||
u32 earlyMaxLength; // at 0x1C
|
||||
f32 earlyCoef[3]; // at 0x20
|
||||
|
||||
// REVHI Structs
|
||||
f32* preDelayLine[3]; // at 0x2C
|
||||
u32 preDelayPos; // at 0x38
|
||||
u32 preDelayLength; // at 0x3C
|
||||
u32 preDelayMaxLength; // at 0x40
|
||||
|
||||
typedef struct AXFX_REVHI_DELAYLINE {
|
||||
/* 0x00 */ s32 inPoint;
|
||||
/* 0x04 */ s32 outPoint;
|
||||
/* 0x08 */ s32 length;
|
||||
/* 0x0C */ f32* inputs;
|
||||
/* 0x10 */ f32 lastOutput;
|
||||
} AXFX_REVHI_DELAYLINE;
|
||||
f32* combLine[3][3]; // at 0x44
|
||||
u32 combPos[3]; // at 0x68
|
||||
u32 combLength[3]; // at 0x74
|
||||
u32 combMaxLength[3]; // at 0x80
|
||||
f32 combCoef[3]; // at 0x8C
|
||||
|
||||
typedef struct AXFX_REVHI_WORK {
|
||||
/* 0x000 */ AXFX_REVHI_DELAYLINE AP[9];
|
||||
/* 0x0B4 */ AXFX_REVHI_DELAYLINE C[9];
|
||||
/* 0x168 */ f32 allPassCoeff;
|
||||
/* 0x16C */ f32 combCoef[9];
|
||||
/* 0x190 */ f32 lpLastout[3];
|
||||
/* 0x19C */ f32 level;
|
||||
/* 0x1A0 */ f32 damping;
|
||||
/* 0x1A4 */ s32 preDelayTime;
|
||||
/* 0x1A8 */ f32 crosstalk;
|
||||
/* 0x1AC */ f32* preDelayLine[3];
|
||||
/* 0x1B8 */ f32* preDelayPtr[3];
|
||||
} AXFX_REVHI_WORK;
|
||||
f32* allpassLine[3][2]; // at 0x98
|
||||
u32 allpassPos[2]; // at 0xB0
|
||||
u32 allpassLength[2]; // at 0xB8
|
||||
u32 allpassMaxLength[2]; // at 0xC0
|
||||
|
||||
typedef struct AXFX_REVHI_WORK_DPL2 {
|
||||
/* 0x000 */ AXFX_REVHI_DELAYLINE AP[12];
|
||||
/* 0x0F0 */ AXFX_REVHI_DELAYLINE C[12];
|
||||
/* 0x1E0 */ f32 allPassCoeff;
|
||||
/* 0x1E4 */ f32 combCoef[12];
|
||||
/* 0x214 */ f32 lpLastout[4];
|
||||
/* 0x224 */ f32 level;
|
||||
/* 0x228 */ f32 damping;
|
||||
/* 0x22C */ s32 preDelayTime;
|
||||
/* 0x230 */ f32 crosstalk;
|
||||
/* 0x234 */ f32* preDelayLine[4];
|
||||
/* 0x244 */ f32* preDelayPtr[4];
|
||||
} AXFX_REVHI_WORK_DPL2;
|
||||
f32* lastAllpassLine[3]; // at 0xC8
|
||||
u32 lastAllpassPos[3]; // at 0xD4
|
||||
u32 lastAllpassLength[3]; // at 0xE0
|
||||
u32 lastAllpassMaxLength[3]; // at 0xEC
|
||||
|
||||
f32 allpassCoef; // at 0xF8
|
||||
f32 lastLpfOut[3]; // at 0xFC
|
||||
f32 lpfCoef; // at 0x108
|
||||
u32 active; // at 0x10C
|
||||
u32 earlyMode; // at 0x110
|
||||
f32 preDelayTimeMax; // at 0x114
|
||||
f32 preDelayTime; // at 0x118
|
||||
u32 fusedMode; // at 0x11C
|
||||
f32 fusedTime; // at 0x120
|
||||
f32 coloration; // at 0x124
|
||||
f32 damping; // at 0x128
|
||||
f32 crosstalk; // at 0x12C
|
||||
f32 earlyGain; // at 0x130
|
||||
f32 fusedGain; // at 0x134
|
||||
AXFX_BUS* busIn; // at 0x138
|
||||
AXFX_BUS* busOut; // at 0x13C
|
||||
f32 outGain; // at 0x140
|
||||
f32 sendGain; // at 0x144
|
||||
} AXFX_REVERBHI_EXP;
|
||||
|
||||
typedef struct AXFX_REVERBHI {
|
||||
/* 0x000 */ AXFX_REVHI_WORK rv;
|
||||
/* 0x1C4 */ u8 tempDisableFX;
|
||||
/* 0x1C8 */ f32 coloration;
|
||||
/* 0x1CC */ f32 mix;
|
||||
/* 0x1D0 */ f32 time;
|
||||
/* 0x1D4 */ f32 damping;
|
||||
/* 0x1D8 */ f32 preDelay;
|
||||
/* 0x1DC */ f32 crosstalk;
|
||||
AXFX_REVERBHI_EXP exp; // at 0x0
|
||||
f32 coloration; // at 0x148
|
||||
f32 mix; // at 0x14C
|
||||
f32 time; // at 0x150
|
||||
f32 damping; // at 0x154
|
||||
f32 preDelay; // at 0x158
|
||||
f32 crosstalk; // at 0x15C
|
||||
} AXFX_REVERBHI;
|
||||
|
||||
typedef struct AXFX_REVERBHI_DPL2 {
|
||||
/* 0x000 */ AXFX_REVHI_WORK_DPL2 rv;
|
||||
/* 0x254 */ u8 tempDisableFX;
|
||||
/* 0x258 */ f32 coloration;
|
||||
/* 0x25C */ f32 mix;
|
||||
/* 0x260 */ f32 time;
|
||||
/* 0x264 */ f32 damping;
|
||||
/* 0x268 */ f32 preDelay;
|
||||
} AXFX_REVERBHI_DPL2;
|
||||
typedef void* (*AXFXAllocHook)(size_t size);
|
||||
typedef void (*AXFXFreeHook)(void* block);
|
||||
|
||||
typedef struct AXFX_DELAY {
|
||||
/* 0x00 */ u32 currentSize[3];
|
||||
/* 0x0C */ u32 currentPos[3];
|
||||
/* 0x18 */ u32 currentFeedback[3];
|
||||
/* 0x24 */ u32 currentOutput[3];
|
||||
/* 0x30 */ s32* left;
|
||||
/* 0x34 */ s32* right;
|
||||
/* 0x38 */ s32* sur;
|
||||
/* 0x3C */ u32 delay[3];
|
||||
/* 0x48 */ u32 feedback[3];
|
||||
/* 0x54 */ u32 output[3];
|
||||
} AXFX_DELAY;
|
||||
extern AXFXAllocHook __AXFXAlloc;
|
||||
extern AXFXFreeHook __AXFXFree;
|
||||
|
||||
typedef struct AXFX_CHORUS_SRCINFO {
|
||||
/* 0x00 */ s32* dest;
|
||||
/* 0x04 */ s32* smpBase;
|
||||
/* 0x08 */ s32* old;
|
||||
/* 0x0C */ u32 posLo;
|
||||
/* 0x10 */ u32 posHi;
|
||||
/* 0x14 */ u32 pitchLo;
|
||||
/* 0x18 */ u32 pitchHi;
|
||||
/* 0x1C */ u32 trigger;
|
||||
/* 0x20 */ u32 target;
|
||||
} AXFX_CHORUS_SRCINFO;
|
||||
void AXFXSetHooks(AXFXAllocHook alloc, AXFXFreeHook free);
|
||||
void AXFXGetHooks(AXFXAllocHook* alloc, AXFXFreeHook* free);
|
||||
|
||||
typedef struct AXFX_CHORUS_WORK {
|
||||
/* 0x00 */ s32* lastLeft[3];
|
||||
/* 0x0C */ s32* lastRight[3];
|
||||
/* 0x18 */ s32* lastSur[3];
|
||||
/* 0x24 */ u8 currentLast;
|
||||
/* 0x28 */ s32 oldLeft[4];
|
||||
/* 0x38 */ s32 oldRight[4];
|
||||
/* 0x48 */ s32 oldSur[4];
|
||||
/* 0x58 */ u32 currentPosLo;
|
||||
/* 0x5C */ u32 currentPosHi;
|
||||
/* 0x60 */ s32 pitchOffset;
|
||||
/* 0x64 */ u32 pitchOffsetPeriodCount;
|
||||
/* 0x68 */ u32 pitchOffsetPeriod;
|
||||
/* 0x6C */ AXFX_CHORUS_SRCINFO src;
|
||||
} AXFX_CHORUS_WORK;
|
||||
BOOL AXFXReverbHiInit(AXFX_REVERBHI* fx);
|
||||
BOOL AXFXReverbHiShutdown(AXFX_REVERBHI* fx);
|
||||
void AXFXReverbHiCallback(void* update, void* fx);
|
||||
|
||||
typedef struct AXFX_CHORUS {
|
||||
/* 0x00 */ AXFX_CHORUS_WORK work;
|
||||
/* 0x90 */ u32 baseDelay;
|
||||
/* 0x94 */ u32 variation;
|
||||
/* 0x98 */ u32 period;
|
||||
} AXFX_CHORUS;
|
||||
BOOL AXFXReverbHiExpInit(AXFX_REVERBHI_EXP* fx);
|
||||
void AXFXReverbHiExpShutdown(AXFX_REVERBHI_EXP* fx);
|
||||
void AXFXReverbHiExpCallback(AXFX_BUFFERUPDATE* update, AXFX_REVERBHI_EXP* fx);
|
||||
|
||||
typedef void* (*AXFXAllocFunc)(u32);
|
||||
typedef void (*AXFXFreeFunc)(void*);
|
||||
|
||||
// chorus
|
||||
int AXFXChorusInit(AXFX_CHORUS* c);
|
||||
int AXFXChorusShutdown(AXFX_CHORUS* c);
|
||||
int AXFXChorusSettings(AXFX_CHORUS* c);
|
||||
void AXFXChorusCallback(AXFX_BUFFERUPDATE* bufferUpdate, AXFX_CHORUS* chorus);
|
||||
|
||||
// delay
|
||||
void AXFXDelayCallback(AXFX_BUFFERUPDATE* bufferUpdate, AXFX_DELAY* delay);
|
||||
int AXFXDelaySettings(AXFX_DELAY* delay);
|
||||
int AXFXDelayInit(AXFX_DELAY* delay);
|
||||
int AXFXDelayShutdown(AXFX_DELAY* delay);
|
||||
|
||||
// reverb_hi
|
||||
void DoCrossTalk(s32* l, s32* r, f32 cross, f32 invcross);
|
||||
int AXFXReverbHiInit(AXFX_REVERBHI* rev);
|
||||
int AXFXReverbHiShutdown(AXFX_REVERBHI* rev);
|
||||
int AXFXReverbHiSettings(AXFX_REVERBHI* rev);
|
||||
|
||||
// reverb_hi_4ch
|
||||
int AXFXReverbHiInitDpl2(AXFX_REVERBHI_DPL2* reverb);
|
||||
int AXFXReverbHiShutdownDpl2(AXFX_REVERBHI_DPL2* reverb);
|
||||
int AXFXReverbHiSettingsDpl2(AXFX_REVERBHI_DPL2* rev);
|
||||
void AXFXReverbHiCallbackDpl2(AXFX_BUFFERUPDATE_DPL2* bufferUpdate, AXFX_REVERBHI_DPL2* reverb);
|
||||
|
||||
// reverb_std
|
||||
int AXFXReverbStdInit(AXFX_REVERBSTD* rev);
|
||||
int AXFXReverbStdShutdown(AXFX_REVERBSTD* rev);
|
||||
int AXFXReverbStdSettings(AXFX_REVERBSTD* rev);
|
||||
void AXFXReverbStdCallback(AXFX_BUFFERUPDATE* bufferUpdate, AXFX_REVERBSTD* reverb);
|
||||
|
||||
void AXFXReverbHiCallback(void *data, void *context);
|
||||
void AXGetAuxACallback(AXAuxCallback* cbOut, void** contextOut);
|
||||
void AXFXSetHooks(AXFXAllocFunc alloc, AXFXFreeFunc free);
|
||||
void AXFXGetHooks(AXFXAllocFunc* allocOut, AXFXFreeFunc* freeOut);
|
||||
void AXFXSetHooks(AXFXAllocHook alloc, AXFXFreeHook free);
|
||||
void AXFXGetHooks(AXFXAllocHook* allocOut, AXFXFreeHook* freeOut);
|
||||
BOOL AXFXReverbHiInit(AXFX_REVERBHI* reverbHi);
|
||||
BOOL AXFXReverbHiShutdown(AXFX_REVERBHI* reverbHi);
|
||||
u16 AXGetAuxAReturnVolume(void);
|
||||
u16 AXGetAuxBReturnVolume(void);
|
||||
u16 AXGetAuxCReturnVolume(void);
|
||||
void AXSetAuxAReturnVolume(u16 volume);
|
||||
void AXSetAuxBReturnVolume(u16 volume);
|
||||
void AXSetAuxCReturnVolume(u16 volume);
|
||||
void AXSetMasterVolume(u16 volume);
|
||||
u16 AXGetMasterVolume(void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif // _REVOLUTION_AXFX_H_
|
||||
#endif // AXFX_H
|
||||
|
||||
@@ -8,7 +8,7 @@ extern "C" {
|
||||
#endif
|
||||
|
||||
typedef void (*DSPCallback)(void* task);
|
||||
typedef struct STRUCT_DSP_TASK DSPTaskInfo;
|
||||
struct STRUCT_DSP_TASK;
|
||||
|
||||
typedef struct STRUCT_DSP_TASK {
|
||||
/* 0x00 */ volatile u32 state;
|
||||
@@ -26,8 +26,8 @@ typedef struct STRUCT_DSP_TASK {
|
||||
/* 0x2C */ DSPCallback res_cb;
|
||||
/* 0x30 */ DSPCallback done_cb;
|
||||
/* 0x34 */ DSPCallback req_cb;
|
||||
/* 0x38 */ DSPTaskInfo* next;
|
||||
/* 0x3C */ DSPTaskInfo* prev;
|
||||
/* 0x38 */ struct STRUCT_DSP_TASK* next;
|
||||
/* 0x3C */ struct STRUCT_DSP_TASK* prev;
|
||||
/* 0x40 */ OSTime t_context;
|
||||
/* 0x48 */ OSTime t_task;
|
||||
} DSPTaskInfo;
|
||||
|
||||
@@ -12,6 +12,7 @@ volatile u32 __DIRegs[] AT_ADDRESS(0xCD006000);
|
||||
volatile u32 __SIRegs[0x100] AT_ADDRESS(0xCD006400);
|
||||
volatile u32 __EXIRegs[0x40] AT_ADDRESS(0xCD006800);
|
||||
volatile u32 __AIRegs[8] AT_ADDRESS(0xCD006C00);
|
||||
volatile u32 __ACRRegs[89] AT_ADDRESS(0xCD000000);
|
||||
volatile u32 __IPCRegs[4] AT_ADDRESS(0xCD000000);
|
||||
#else
|
||||
#define __VIRegs ((volatile u16 *)0xCC002000)
|
||||
@@ -22,6 +23,7 @@ volatile u32 __IPCRegs[4] AT_ADDRESS(0xCD000000);
|
||||
#define __SIRegs ((volatile u32 *)0xCD006400)
|
||||
#define __EXIRegs ((volatile u32 *)0xCD006800)
|
||||
#define __AIRegs ((volatile u32 *)0xCD006C00)
|
||||
#define __ACRRegs ((volatile u32 *)0xCD000000)
|
||||
#define __IPCRegs ((volatile u32 *)0xCD000000)
|
||||
#endif
|
||||
|
||||
@@ -115,4 +117,12 @@ volatile u32 __IPCRegs[4] AT_ADDRESS(0xCD000000);
|
||||
|
||||
#define DSP_DMA_START_FLAG (0x8000) // set to start DSP
|
||||
|
||||
inline void ACRWriteReg(u32 offset, u32 val) {
|
||||
__ACRRegs[offset >> 2] = val;
|
||||
}
|
||||
|
||||
inline u32 ACRReadReg(u32 offset) {
|
||||
return __ACRRegs[offset >> 2];
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
@@ -10,7 +10,9 @@ extern "C" {
|
||||
#endif
|
||||
|
||||
void IPCInit(void);
|
||||
#if SDK_AUG2010
|
||||
void IPCReInit(void);
|
||||
#endif
|
||||
u32 IPCReadReg(u32 regIdx);
|
||||
void IPCWriteReg(u32 regIdx, u32 data);
|
||||
void* IPCGetBufferHi(void);
|
||||
|
||||
@@ -12,7 +12,9 @@ extern "C" {
|
||||
typedef IOSError (*IOSIpcCb)(IOSError, void*);
|
||||
|
||||
IOSError IPCCltInit(void);
|
||||
#if SDK_AUG2010
|
||||
IOSError IPCCltReInit(void);
|
||||
#endif
|
||||
|
||||
IOSError IOS_OpenAsync(const char* pPath, u32 flags, IOSIpcCb cb, void* callback_arg);
|
||||
IOSError IOS_Open(const char* path, u32 flags);
|
||||
|
||||
+123
-4
@@ -3,15 +3,36 @@
|
||||
|
||||
#include <revolution/mtx.h>
|
||||
#include <revolution/wpad.h>
|
||||
#include "types.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define KPAD_BUTTON_MASK 0x0000ffff
|
||||
#define KPAD_BUTTON_RPT 0x80000000
|
||||
|
||||
#define KPAD_BTN_RPT_TIME_MAX 20000
|
||||
#define KPAD_BTN_NO_RPT_DELAY 40000
|
||||
|
||||
#define KPAD_CMOS_RESO_WX 128
|
||||
#define KPAD_CMOS_RESO_WY 96
|
||||
#define KPAD_CMOS_RESO_CX (KPAD_CMOS_RESO_WX / 2)
|
||||
#define KPAD_CMOS_RESO_CY (KPAD_CMOS_RESO_WY / 2)
|
||||
|
||||
#define KPAD_DPD_RESO_WX WPAD_DPD_IMG_RESO_WX
|
||||
#define KPAD_DPD_RESO_WY WPAD_DPD_IMG_RESO_WY
|
||||
#define KPAD_DPD_RESO_CX (KPAD_DPD_RESO_WX / 2)
|
||||
#define KPAD_DPD_RESO_CY (KPAD_DPD_RESO_WY / 2)
|
||||
|
||||
#define KPAD_USE_OBJECTS 2
|
||||
|
||||
typedef struct Vec2 {
|
||||
f32 x, y;
|
||||
} Vec2;
|
||||
|
||||
typedef enum KPADPlayMode { KPAD_PLAY_MODE_LOOSE = 0, KPAD_PLAY_MODE_TIGHT } KPADPlayMode;
|
||||
|
||||
typedef s32 KPADResult;
|
||||
|
||||
typedef union KPADEXStatus {
|
||||
@@ -50,16 +71,114 @@ typedef struct KPADStatus {
|
||||
/* 0x4C */ f32 dist_vec;
|
||||
/* 0x50 */ f32 dist_speed;
|
||||
/* 0x54 */ Vec2 acc_vertical;
|
||||
#if PLATFORM_SHIELD
|
||||
/* 0x5C */ u8 dev_type;
|
||||
/* 0x5D */ s8 wpad_err;
|
||||
/* 0x5E */ s8 dpd_valid_fg;
|
||||
/* 0x5F */ u8 data_format;
|
||||
/* 0x60 */ KPADEXStatus ex_status;
|
||||
/* 0x84 */ u8 __paddings__[4]; // ??? is this the compiler?
|
||||
} KPADStatus; // size 0x88
|
||||
/* 0x84 */ u8 unk_shield_0x86[0xf0 - 0x84];
|
||||
#else
|
||||
/* 0x5C */ u32 dev_type;
|
||||
/* 0x60 */ KPADEXStatus ex_status;
|
||||
/* 0x84 */ s8 dpd_valid_fg;
|
||||
/* 0x85 */ s8 wpad_err;
|
||||
#endif
|
||||
#if PLATFORM_SHIELD
|
||||
#endif
|
||||
} KPADStatus; // size 0x88
|
||||
|
||||
void KPADEnableDPD(s32);
|
||||
void KPADDisableDPD(s32);
|
||||
typedef struct KPADUnifiedWpadStatus {
|
||||
union {
|
||||
WPADStatus core;
|
||||
WPADFSStatus fs;
|
||||
WPADCLStatus cl;
|
||||
} u;
|
||||
} KPADUnifiedWpadStatus;
|
||||
|
||||
typedef struct {
|
||||
Vec2 center;
|
||||
s8 error_fg;
|
||||
s8 state_fg;
|
||||
s8 _fg_1;
|
||||
s8 _fg_2;
|
||||
} KPADObject;
|
||||
|
||||
typedef union {
|
||||
KPADStatus k;
|
||||
KPADUnifiedWpadStatus w;
|
||||
} KPADTmpStatus;
|
||||
|
||||
typedef void (*KPADControlDpdCallback)(s32 chan, s32 reason);
|
||||
typedef WPADCallback KPADCallback;
|
||||
typedef WPADChannel KPADChannel;
|
||||
|
||||
typedef struct {
|
||||
/* 0x000 */ KPADStatus status;
|
||||
/* 0x088 */ f32 pos_play_radius;
|
||||
/* 0x08C */ f32 pos_sensitivity;
|
||||
/* 0x090 */ f32 hori_play_radius;
|
||||
/* 0x094 */ f32 hori_sensitivity;
|
||||
/* 0x098 */ f32 dist_play_radius;
|
||||
/* 0x09C */ f32 dist_sensitivity;
|
||||
/* 0x0A0 */ f32 acc_play_radius;
|
||||
/* 0x0A4 */ f32 acc_sensitivity;
|
||||
/* 0x0A8 */ f32 dist_org;
|
||||
/* 0x0AC */ Vec2 accXY_nrm_hori;
|
||||
/* 0x0B4 */ Vec2 sec_nrm_hori;
|
||||
/* 0x0BC */ Vec2 center_org;
|
||||
/* 0x0C4 */ f32 dpd2pos_scale;
|
||||
/* 0x0C8 */ KPADObject kobj_sample[4];
|
||||
/* 0x0F8 */ KPADObject kobj_regular[2];
|
||||
/* 0x110 */ s16 valid_objs;
|
||||
/* 0x112 */ u16 repeat_count;
|
||||
/* 0x114 */ s16 active_chan;
|
||||
/* 0x116 */ s16 unk_0x116;
|
||||
/* 0x118 */ KPADUnifiedWpadStatus uniRingBuf[12];
|
||||
/* 0x3A0 */ f32 sec_length;
|
||||
/* 0x3A4 */ Vec2 sec_nrm;
|
||||
/* 0x3AC */ f32 sec_dist;
|
||||
/* 0x3B0 */ f32 trust_sec_length;
|
||||
/* 0x3B4 */ Vec hard_acc;
|
||||
/* 0x3C0 */ Vec2 obj_horizon;
|
||||
/* 0x3C8 */ Vec2 acc_horizon;
|
||||
/* 0x3D0 */ Vec2 ah_circle_pos;
|
||||
/* 0x3D8 */ u16 ah_circle_ct;
|
||||
/* 0x3DA */ u8 dpd_valid2_ct;
|
||||
/* 0x3DC */ u16 btn_repeat_time;
|
||||
/* 0x3DE */ u16 btn_repeat_next;
|
||||
/* 0x3E0 */ u16 btn_repeat_delay;
|
||||
/* 0x3E2 */ u16 btn_repeat_pulse;
|
||||
/* 0x3E4 */ u16 btn_cl_repeat_time;
|
||||
/* 0x3E6 */ u16 btn_cl_repeat_next;
|
||||
/* 0x3E8 */ u16 btn_cl_repeat_delay;
|
||||
/* 0x3EA */ u16 btn_cl_repeat_pulse;
|
||||
/* 0x3EC */ BOOL is_dpd_enabled;
|
||||
/* 0x3F0 */ BOOL unk_0x3f0;
|
||||
/* 0x3F4 */ BOOL unk_0x3f4;
|
||||
/* 0x3F8 */ KPADControlDpdCallback dpd_ctrl_callback;
|
||||
/* 0x3FC */ BOOL unk_0x3fc;
|
||||
} KPADInsideStatus;
|
||||
|
||||
void KPADInit();
|
||||
|
||||
void KPADSetFSStickClamp(s8 min, s8 max);
|
||||
void KPADSetBtnRepeat(s32 chan, f32 delay_sec, f32 pulse_sec);
|
||||
void KPADSetObjInterval(f32 interval);
|
||||
void KPADSetPosParam(s32 chan, f32 play_radius, f32 sensitivity);
|
||||
void KPADSetHoriParam(s32 chan, f32 play_radius, f32 sensitivity);
|
||||
void KPADSetDistParam(s32 chan, f32 play_radius, f32 sensitivity);
|
||||
void KPADSetAccParam(s32 chan, f32 play_radius, f32 sensitivity);
|
||||
void KPADSetSensorHeight(s32 chan, f32 level);
|
||||
|
||||
|
||||
void KPADReset(void);
|
||||
s32 KPADRead(s32 chan, KPADStatus* sampling_bufs, s32 length);
|
||||
|
||||
void KPADEnableDPD(s32 chan);
|
||||
void KPADDisableDPD(s32 chan);
|
||||
|
||||
extern KPADInsideStatus inside_kpads[];
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
@@ -9,7 +9,7 @@ extern "C" {
|
||||
|
||||
typedef struct MEMiExpHeapMBlockHead MEMiExpHeapMBlockHead;
|
||||
|
||||
struct MEMiExPheapMBlockHead {
|
||||
struct MEMiExpHeapMBlockHead {
|
||||
u16 signature;
|
||||
|
||||
union {
|
||||
@@ -27,6 +27,31 @@ struct MEMiExPheapMBlockHead {
|
||||
MEMiExpHeapMBlockHead* next;
|
||||
};
|
||||
|
||||
typedef struct MEMiExpMBlockList MEMiExpMBlockList;
|
||||
|
||||
struct MEMiExpMBlockList {
|
||||
MEMiExpHeapMBlockHead* head;
|
||||
MEMiExpHeapMBlockHead* tail;
|
||||
};
|
||||
|
||||
typedef struct MEMiExpHeapHead MEMiExpHeapHead;
|
||||
|
||||
struct MEMiExpHeapHead {
|
||||
MEMiExpMBlockList mbFreeList;
|
||||
MEMiExpMBlockList mbUsedList;
|
||||
|
||||
u16 groupID;
|
||||
|
||||
union {
|
||||
u16 val;
|
||||
struct {
|
||||
u16 _reserved : 14;
|
||||
u16 useMarginOfAlign : 1;
|
||||
u16 allocMode : 1;
|
||||
} fields;
|
||||
} feature;
|
||||
};
|
||||
|
||||
MEMHeapHandle MEMCreateExpHeapEx(void*, u32, u16);
|
||||
void* MEMDestroyExpHeap(MEMHeapHandle);
|
||||
void* MEMAllocFromExpHeapEx(MEMHeapHandle, u32, int);
|
||||
|
||||
@@ -7,6 +7,7 @@ extern "C" {
|
||||
|
||||
#include <revolution/mem/list.h>
|
||||
#include <revolution/os.h>
|
||||
#include <cstring>
|
||||
|
||||
typedef struct MEMiHeapHead MEMiHeapHead;
|
||||
|
||||
@@ -36,6 +37,58 @@ static inline UIntPtr GetUIntPtr(const void* ptr) {
|
||||
return (UIntPtr)(ptr);
|
||||
}
|
||||
|
||||
static inline u32 GetOffsetFromPtr(const void* start, const void* end) {
|
||||
return GetUIntPtr(end) - GetUIntPtr(start);
|
||||
}
|
||||
|
||||
static inline void* SubU32ToPtr(void* ptr, u32 val) {
|
||||
return (void*)(GetUIntPtr(ptr) - val);
|
||||
}
|
||||
|
||||
static inline void* AddU32ToPtr(void* ptr, u32 val) {
|
||||
return (void*)(GetUIntPtr(ptr) + val);
|
||||
}
|
||||
|
||||
static inline void SetOptForHeap(MEMiHeapHead* pHeapHd, u16 optFlag) {
|
||||
pHeapHd->attribute.fields.optFlag = (u8)optFlag;
|
||||
}
|
||||
|
||||
static inline u16 GetOptForHeap(const MEMiHeapHead* pHeapHd) {
|
||||
return (u16)pHeapHd->attribute.fields.optFlag;
|
||||
}
|
||||
|
||||
static inline void FillAllocMemory(MEMiHeapHead* pHeapHd, void* address, u32 size) {
|
||||
if (GetOptForHeap(pHeapHd) & 1) {
|
||||
(void)memset(address, 0, size);
|
||||
}
|
||||
}
|
||||
|
||||
static inline int ComparePtr(const void* a, const void* b) {
|
||||
const u8* wa = (const u8*)a;
|
||||
const u8* wb = (const u8*)b;
|
||||
|
||||
return wa - wb;
|
||||
}
|
||||
|
||||
|
||||
static inline void LockHeap(MEMiHeapHead* pHeapHd) {
|
||||
if (GetOptForHeap(pHeapHd) & 4) {
|
||||
OSLockMutex(&pHeapHd->mutex);
|
||||
}
|
||||
}
|
||||
|
||||
static inline void UnlockHeap(MEMiHeapHead* pHeapHd) {
|
||||
if (GetOptForHeap(pHeapHd) & 4) {
|
||||
OSUnlockMutex(&pHeapHd->mutex);
|
||||
}
|
||||
}
|
||||
|
||||
void MEMiInitHeapHead(MEMiHeapHead* pHeapHd, u32 signature, void* heapStart, void* heapEnd, u16 optFlag);
|
||||
|
||||
void MEMiFinalizeHeap(MEMiHeapHead* pHeapHd);
|
||||
|
||||
void MEMiDumpHeapHead(MEMiHeapHead* pHeapHd);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -21,9 +21,10 @@ typedef struct {
|
||||
|
||||
void MEMInitList(MEMList*, u16);
|
||||
void MEMAppendListObject(MEMList*, void*);
|
||||
void MEMRemoveListObject(MEMList*, void*);
|
||||
void* MEMGetNextListObject(MEMList*, void*);
|
||||
|
||||
#define MEM_INIT_LIST(list, structName, linkName) MEMInitList(list, offsetof(structName, linkName))
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -7,6 +7,8 @@
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define MTXRowCol(m, r, c) ((m)[(r)][(c)])
|
||||
|
||||
typedef struct Vec {
|
||||
f32 x, y, z;
|
||||
} Vec, *VecPtr, Point3d, *Point3dPtr;
|
||||
|
||||
@@ -105,10 +105,12 @@ u8 __gUnknown800030E3 AT_ADDRESS(OS_BASE_CACHED | 0x30E3);
|
||||
#define OSMillisecondsToTicks(msec) ((msec) * (OS_TIMER_CLOCK / 1000))
|
||||
#define OSNanosecondsToTicks(nsec) (((nsec) * (OS_TIMER_CLOCK / 125000)) / 8000)
|
||||
#define OSMicrosecondsToTicks(usec) (((usec) * (OS_TIMER_CLOCK / 125000)) / 8)
|
||||
#define OSTicksDelta(x, y) ((s32)x, (s32)y)
|
||||
|
||||
u32 OSGetConsoleType(void);
|
||||
void OSInit(void);
|
||||
void OSRegisterVersion(const char* id);
|
||||
const char* OSGetAppGamename(void);
|
||||
|
||||
void* OSGetArenaHi(void);
|
||||
void* OSGetArenaLo(void);
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
|
||||
#include <revolution/os.h>
|
||||
#include <revolution/nand.h>
|
||||
#include <revolution/wpad/bte.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
@@ -10,6 +11,13 @@ extern "C" {
|
||||
|
||||
typedef u8 SCType;
|
||||
|
||||
typedef enum {
|
||||
SC_STATUS_OK,
|
||||
SC_STATUS_BUSY,
|
||||
SC_STATUS_FATAL,
|
||||
SC_STATUS_PARSE,
|
||||
} SCStatus;
|
||||
|
||||
typedef struct {
|
||||
u8 mode;
|
||||
u8 led;
|
||||
@@ -107,6 +115,57 @@ typedef struct {
|
||||
u32 flushSize;
|
||||
} SCControl;
|
||||
|
||||
#define SC_MAX_DEV_ENTRY_FOR_STD 10
|
||||
#define SC_MAX_DEV_ENTRY_FOR_SMP 6
|
||||
#define SC_MAX_DEV_ENTRY (SC_MAX_DEV_ENTRY_FOR_STD + SC_MAX_DEV_ENTRY_FOR_SMP)
|
||||
|
||||
typedef struct {
|
||||
BD_ADDR bd_addr;
|
||||
u8 bd_name[64];
|
||||
u8 link_key[16];
|
||||
} SCBtCmpDevInfoSingle;
|
||||
|
||||
typedef struct {
|
||||
BD_ADDR bd_addr;
|
||||
u8 bd_name[64];
|
||||
} SCBtDeviceInfoSingle;
|
||||
|
||||
typedef struct {
|
||||
u8 num;
|
||||
SCBtCmpDevInfoSingle info[6];
|
||||
} SCBtCmpDevInfoArray;
|
||||
|
||||
typedef struct SCDevInfo {
|
||||
char devName[20]; // at 0x0
|
||||
char at_0x14[1];
|
||||
char UNK_0x15[0xB];
|
||||
LINK_KEY linkKey; // at 0x20
|
||||
char UNK_0x30[0x10];
|
||||
} SCDevInfo;
|
||||
|
||||
typedef struct SCBtDeviceInfo {
|
||||
BD_ADDR addr; // at 0x0
|
||||
SCDevInfo info; // at 0x6
|
||||
} SCBtDeviceInfo;
|
||||
|
||||
typedef struct SCBtDeviceInfoArray {
|
||||
/* 0x000 */ u8 num;
|
||||
|
||||
union {
|
||||
struct {
|
||||
#if SDK_AUG2010
|
||||
/* 0x001 */ SCBtDeviceInfo regist[SC_MAX_DEV_ENTRY_FOR_STD];
|
||||
/* 0x2BD */ SCBtDeviceInfo active[SC_MAX_DEV_ENTRY_FOR_SMP];
|
||||
#else
|
||||
/* 0x001 */ SCBtDeviceInfo regist[SC_MAX_DEV_ENTRY];
|
||||
#endif
|
||||
};
|
||||
};
|
||||
#if SDK_AUG2010
|
||||
SCBtDeviceInfoSingle info[16];
|
||||
#endif
|
||||
} SCBtDeviceInfoArray;
|
||||
|
||||
#define SC_LANG_JAPANESE 0u
|
||||
#define SC_LANG_ENGLISH 1u
|
||||
#define SC_LANG_GERMAN 2u
|
||||
@@ -128,6 +187,12 @@ u8 SCGetProgressiveMode(void);
|
||||
u8 SCGetScreenSaverMode(void);
|
||||
u8 SCGetSoundMode(void);
|
||||
u32 SCGetCounterBias(void);
|
||||
u8 SCGetWpadSensorBarPosition(void);
|
||||
u8 SCGetWpadMotorMode(void);
|
||||
u8 SCGetWpadSpeakerVolume(void);
|
||||
u8 SCGetBtDpdSensibility(void);
|
||||
BOOL SCSetWpadSpeakerVolume(u8 volume);
|
||||
BOOL SCSetWpadMotorMode(u8 mode);
|
||||
|
||||
// scapi_prdinfo
|
||||
BOOL SCGetProductAreaString(char* buf, u32 bufSize);
|
||||
@@ -144,6 +209,9 @@ BOOL SCFindU8Item(u8* data, SCItemID id);
|
||||
BOOL SCFindS8Item(s8* data, SCItemID id);
|
||||
BOOL SCFindU32Item(u32* data, SCItemID id);
|
||||
BOOL SCReplaceU8Item(u8 data, SCItemID id);
|
||||
void SCFlushAsync(SCFlushCallback callback);
|
||||
BOOL SCGetBtDeviceInfoArray(SCBtDeviceInfoArray*);
|
||||
BOOL SCSetBtDeviceInfoArray(const SCBtDeviceInfoArray*);
|
||||
u32 SCCheckStatus(void);
|
||||
s32 SCReloadConfFileAsync(u8* bufp, u32 bufSize, SCReloadConfFileCallback callback);
|
||||
|
||||
|
||||
@@ -0,0 +1,55 @@
|
||||
#ifndef _REVOLUTION_USB_H_
|
||||
#define _REVOLUTION_USB_H_
|
||||
|
||||
#include <revolution.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define SWAP32(val) \
|
||||
((u32)((((u32)(val) & (u32)0x000000ffUL) << 24) | (((u32)(val) & (u32)0x0000ff00UL) << 8) | (((u32)(val) & (u32)0x00ff0000UL) >> 8) | \
|
||||
(((u32)(val) & (u32)0xff000000UL) >> 24)))
|
||||
|
||||
#define SWAP16(val) ((u16)((((u16)(val) & (u16)0x00ffUL) << 8) | (((u16)(val) & (u16)0xff00) >> 8)))
|
||||
|
||||
typedef struct {
|
||||
u8 bLength;
|
||||
u8 bDescriptorType;
|
||||
u16 bcdUSB;
|
||||
u8 bDeviceClass;
|
||||
u8 bDeviceSubClass;
|
||||
u8 bDeviceProtocol;
|
||||
u8 bMaxPacketSize0;
|
||||
u16 idVendor;
|
||||
u16 idProduct;
|
||||
u16 bcdDevice;
|
||||
u8 iManufacturer;
|
||||
u8 iProduct;
|
||||
u8 iSerialNumber;
|
||||
u8 bNumConfigurations;
|
||||
} USB_DevDescr;
|
||||
|
||||
typedef struct IsoTransfer {
|
||||
void* buf;
|
||||
u8 numPackets;
|
||||
u16* packets;
|
||||
} IsoTransfer;
|
||||
|
||||
typedef void (*USBCallbackFunc)(IOSError err, void* cbArg);
|
||||
typedef void (*USBIsoCallbackFunc)(IOSError err, IsoTransfer* xfer, void* cbArg);
|
||||
|
||||
IOSError IUSB_ReadIntrMsgAsync(IOSFd fd, u32 ep, u32 buflen, char* buf, USBCallbackFunc cb, void* cbArg);
|
||||
IOSError IUSB_WriteCtrlMsgAsync(IOSFd fd, u8 reqType, u8 request, u16 value, u16 index, u16 buflen, char* buf, USBCallbackFunc cb, void* cbArg);
|
||||
IOSError IUSB_WriteBlkMsgAsync(IOSFd fd, u32 ep, u32 buflen, char* buf, USBCallbackFunc cb, void* cbArg);
|
||||
IOSError IUSB_OpenDeviceIds(const char* did, u16 vid, u16 pid, IOSFd* fd);
|
||||
IOSError IUSB_ReadBlkMsgAsync(IOSFd fd, u32 ep, u32 buflen, char* buf, USBCallbackFunc cb, void* cbArg);
|
||||
IOSError IUSB_OpenLib(void);
|
||||
IOSError IUSB_CloseDeviceAsync(IOSFd fd, USBCallbackFunc cb, void* cbArg);
|
||||
IOSError IUSB_CloseLib(void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif // _REVOLUTION_USB_H_
|
||||
@@ -35,6 +35,9 @@ void VISetGamma(VIGamma);
|
||||
void VISetRGBModeImm(void);
|
||||
BOOL VIEnableDVDStopMotor(BOOL enable);
|
||||
|
||||
BOOL VIResetDimmingCount(void);
|
||||
BOOL VIResetRFIdle(void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
+214
-139
@@ -1,98 +1,58 @@
|
||||
#ifndef _REVOLUTION_WPAD_H_
|
||||
#define _REVOLUTION_WPAD_H_
|
||||
|
||||
#include <revolution/os.h>
|
||||
#include <revolution/types.h>
|
||||
#include <revolution/sc.h>
|
||||
#include "types.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define WPAD_BUTTON_LEFT 0x0001
|
||||
#define WPAD_BUTTON_RIGHT 0x0002
|
||||
#define WPAD_BUTTON_DOWN 0x0004
|
||||
#define WPAD_BUTTON_UP 0x0008
|
||||
#define WPAD_BUTTON_PLUS 0x0010
|
||||
#define WPAD_BUTTON_2 0x0100
|
||||
#define WPAD_BUTTON_1 0x0200
|
||||
#define WPAD_BUTTON_B 0x0400
|
||||
#define WPAD_BUTTON_A 0x0800
|
||||
#define WPAD_BUTTON_MINUS 0x1000
|
||||
#define WPAD_BUTTON_Z 0x2000
|
||||
#define WPAD_BUTTON_C 0x4000
|
||||
#define WPAD_BUTTON_HOME 0x8000
|
||||
#define WPAD_BUTTON_LEFT (1 << 0)
|
||||
#define WPAD_BUTTON_RIGHT (1 << 1)
|
||||
#define WPAD_BUTTON_DOWN (1 << 2)
|
||||
#define WPAD_BUTTON_UP (1 << 3)
|
||||
#define WPAD_BUTTON_PLUS (1 << 4)
|
||||
#define WPAD_BUTTON_2 (1 << 8)
|
||||
#define WPAD_BUTTON_1 (1 << 9)
|
||||
#define WPAD_BUTTON_B (1 << 10)
|
||||
#define WPAD_BUTTON_A (1 << 11)
|
||||
#define WPAD_BUTTON_MINUS (1 << 12)
|
||||
#define WPAD_BUTTON_Z (1 << 13)
|
||||
#define WPAD_BUTTON_C (1 << 14)
|
||||
#define WPAD_BUTTON_HOME (1 << 15)
|
||||
|
||||
#define WPAD_BUTTON_CL_UP (1 << 0)
|
||||
#define WPAD_BUTTON_CL_LEFT (1 << 1)
|
||||
#define WPAD_BUTTON_CL_ZR (1 << 2)
|
||||
#define WPAD_BUTTON_CL_X (1 << 3)
|
||||
#define WPAD_BUTTON_CL_A (1 << 4)
|
||||
#define WPAD_BUTTON_CL_Y (1 << 5)
|
||||
#define WPAD_BUTTON_CL_B (1 << 6)
|
||||
#define WPAD_BUTTON_CL_ZL (1 << 7)
|
||||
#define WPAD_BUTTON_CL_FULL_R (1 << 9)
|
||||
#define WPAD_BUTTON_CL_PLUS (1 << 10)
|
||||
#define WPAD_BUTTON_CL_HOME (1 << 11)
|
||||
#define WPAD_BUTTON_CL_MINUS (1 << 12)
|
||||
#define WPAD_BUTTON_CL_FULL_L (1 << 13)
|
||||
#define WPAD_BUTTON_CL_DOWN (1 << 14)
|
||||
#define WPAD_BUTTON_CL_RIGHT (1 << 15)
|
||||
#define WPAD_CL_BUTTON_UP (1 << 0)
|
||||
#define WPAD_CL_BUTTON_LEFT (1 << 1)
|
||||
#define WPAD_CL_TRIGGER_ZR (1 << 2)
|
||||
#define WPAD_CL_BUTTON_X (1 << 3)
|
||||
#define WPAD_CL_BUTTON_A (1 << 4)
|
||||
#define WPAD_CL_BUTTON_Y (1 << 5)
|
||||
#define WPAD_CL_BUTTON_B (1 << 6)
|
||||
#define WPAD_CL_TRIGGER_ZL (1 << 7)
|
||||
#define WPAD_CL_RESERVED (1 << 8)
|
||||
#define WPAD_CL_TRIGGER_R (1 << 9)
|
||||
#define WPAD_CL_BUTTON_PLUS (1 << 10)
|
||||
#define WPAD_CL_BUTTON_HOME (1 << 11)
|
||||
#define WPAD_CL_BUTTON_MINUS (1 << 12)
|
||||
#define WPAD_CL_TRIGGER_L (1 << 13)
|
||||
#define WPAD_CL_BUTTON_DOWN (1 << 14)
|
||||
#define WPAD_CL_BUTTON_RIGHT (1 << 15)
|
||||
|
||||
#define WPAD_MAX_DPD_OBJECTS 4
|
||||
|
||||
#define WPAD_CHAN0 0
|
||||
#define WPAD_CHAN1 1
|
||||
#define WPAD_CHAN2 2
|
||||
#define WPAD_CHAN3 3
|
||||
#define WPAD_CHAN_INVALID -1
|
||||
|
||||
#define WPAD_MAX_CONTROLLERS 4
|
||||
|
||||
enum WPADResult_et {
|
||||
WPAD_ERR_OK = 0,
|
||||
|
||||
WPAD_ERR_NO_CONTROLLER = -1,
|
||||
WPAD_ERR_BUSY = -2,
|
||||
WPAD_ERR_TRANSFER = -3,
|
||||
WPAD_ERR_INVALID = -4,
|
||||
WPAD_ERR_5 = -5,
|
||||
WPAD_ERR_6 = -6,
|
||||
WPAD_ERR_CORRUPTED = -7,
|
||||
};
|
||||
|
||||
#define WPAD_ESUCCESS WPAD_ERR_OK
|
||||
#define WPAD_ENODEV WPAD_ERR_NO_CONTROLLER
|
||||
#define WPAD_EBUSY WPAD_ERR_BUSY
|
||||
#define WPAD_ETRANSFER WPAD_ERR_TRANSFER // I don't know what the POSIX equivalent is
|
||||
#define WPAD_EINVAL WPAD_ERR_INVALID
|
||||
#define WPAD_E5 WPAD_ERR_5
|
||||
#define WPAD_E6 WPAD_ERR_6
|
||||
#define WPAD_EBADE WPAD_ERR_CORRUPTED
|
||||
|
||||
// apparently enum vs constant is a thing. cool
|
||||
#define WPAD_CESUCCESS (WPAD_ESUCCESS + 0)
|
||||
#define WPAD_CENODEV (WPAD_ENODEV + 0)
|
||||
#define WPAD_CEBUSY (WPAD_EBUSY + 0)
|
||||
#define WPAD_CETRANSFER (WPAD_ETRANSFER + 0)
|
||||
#define WPAD_CEINVAL (WPAD_EINVAL + 0)
|
||||
#define WPAD_CE5 (WPAD_E5 + 0)
|
||||
#define WPAD_CE6 (WPAD_E6 + 0)
|
||||
#define WPAD_CEBADE (WPAD_EBADE + 0)
|
||||
|
||||
#define WPAD_DEV_CORE 0
|
||||
#define WPAD_DEV_FS 1
|
||||
#define WPAD_DEV_CLASSIC 2
|
||||
#define WPAD_DEV_BALANCE_CHECKER 3
|
||||
#define WPAD_DEV_VSM 4
|
||||
#define WPAD_DEV_MOTION_PLUS 5
|
||||
#define WPAD_DEV_MPLS_PT_FS 6
|
||||
#define WPAD_DEV_MPLS_PT_CLASSIC 7
|
||||
|
||||
#define WPAD_DEV_TRAIN 16
|
||||
#define WPAD_DEV_GUITAR 17
|
||||
#define WPAD_DEV_DRUM 18
|
||||
#define WPAD_DEV_TAIKO 19
|
||||
#define WPAD_DEV_TURNTABLE 20
|
||||
#define WPAD_DEV_CORE 0
|
||||
#define WPAD_DEV_FS 1
|
||||
#define WPAD_DEV_CLASSIC 2
|
||||
#define WPAD_DEV_BALANCE_CHECKER 3
|
||||
#define WPAD_DEV_VSM 4
|
||||
#define WPAD_DEV_MOTION_PLUS 5
|
||||
#define WPAD_DEV_MPLS_PT_FS 6
|
||||
#define WPAD_DEV_MPLS_PT_CLASSIC 7
|
||||
#define WPAD_DEV_TRAIN 16
|
||||
#define WPAD_DEV_GUITAR 17
|
||||
#define WPAD_DEV_DRUM 18
|
||||
#define WPAD_DEV_TAIKO 19
|
||||
#define WPAD_DEV_TURNTABLE 20
|
||||
|
||||
// seems to be like maybe general purpose non-specific device types
|
||||
// maybe this was for testing or something? idk
|
||||
@@ -105,18 +65,114 @@ enum WPADResult_et {
|
||||
#define WPAD_DEV_BULK_7 27
|
||||
#define WPAD_DEV_BULK_8 28
|
||||
|
||||
#define WPAD_DEV_MPLS_PT_UNKNOWN 250
|
||||
#define WPAD_DEV_251 251
|
||||
#define WPAD_DEV_252 252 // invalid device mode?
|
||||
#define WPAD_DEV_NONE 253 // sort of like WPAD_ENODEV (see __wpadAbortInitExtension in WPADHIDParser.c)
|
||||
#define WPAD_DEV_INITIALIZING 255 // see __a1_20_status_report
|
||||
#define WPAD_DEV_MPLS_PT_FUTURE 250
|
||||
#define WPAD_DEV_FUTURE 251
|
||||
#define WPAD_DEV_NOT_SUPPORTED 252 // invalid device mode?
|
||||
#define WPAD_DEV_NONE 253 // sort of like WPAD_ENODEV (see __wpadAbortInitExtension in WPADHIDParser.c)
|
||||
#define WPAD_DEV_INITIALIZING 255 // see __a1_20_status_report
|
||||
|
||||
#define WPAD_SENSOR_BAR_POS_BOTTOM 0
|
||||
#define WPAD_SENSOR_BAR_POS_TOP 1
|
||||
|
||||
enum WPADResult_et {
|
||||
WPAD_ERR_OK = 0,
|
||||
|
||||
WPAD_ERR_NO_CONTROLLER = -1,
|
||||
WPAD_ERR_BUSY = -2,
|
||||
WPAD_ERR_TRANSFER = -3,
|
||||
WPAD_ERR_INVALID = -4,
|
||||
WPAD_ERR_NOPERM = -5,
|
||||
WPAD_ERR_BROKEN = -6,
|
||||
WPAD_ERR_CORRUPTED = -7,
|
||||
};
|
||||
|
||||
#define WPAD_ESUCCESS WPAD_ERR_OK
|
||||
#define WPAD_ENODEV WPAD_ERR_NO_CONTROLLER
|
||||
#define WPAD_EBUSY WPAD_ERR_BUSY
|
||||
#define WPAD_ETRANSFER WPAD_ERR_TRANSFER // I don't know what the POSIX equivalent is
|
||||
#define WPAD_EINVAL WPAD_ERR_INVALID
|
||||
#define WPAD_ENOPERM WPAD_ERR_NOPERM
|
||||
#define WPAD_EBROKEN WPAD_ERR_BROKEN
|
||||
#define WPAD_EBADE WPAD_ERR_CORRUPTED
|
||||
|
||||
// apparently enum vs constant is a thing. cool
|
||||
#define WPAD_CESUCCESS (WPAD_ESUCCESS + 0)
|
||||
#define WPAD_CENODEV (WPAD_ENODEV + 0)
|
||||
#define WPAD_CEBUSY (WPAD_EBUSY + 0)
|
||||
#define WPAD_CETRANSFER (WPAD_ETRANSFER + 0)
|
||||
#define WPAD_CEINVAL (WPAD_EINVAL + 0)
|
||||
#define WPAD_CENOPERM (WPAD_ENOPERM + 0)
|
||||
#define WPAD_CEBROKEN (WPAD_EBROKEN + 0)
|
||||
#define WPAD_CEBADE (WPAD_EBADE + 0)
|
||||
|
||||
#define WPAD_DPD_MAX_OBJECTS 4
|
||||
#define WPAD_DPD_IMG_RESO_WX 1024
|
||||
#define WPAD_DPD_IMG_RESO_WY 768
|
||||
|
||||
#define WPAD_STATE_DISABLED 0
|
||||
#define WPAD_STATE_ENABLING 1
|
||||
#define WPAD_STATE_ENABLED 2
|
||||
#define WPAD_STATE_SETUP 3
|
||||
#define WPAD_STATE_DISABLING 4
|
||||
|
||||
#define WPAD_CHAN0 0
|
||||
#define WPAD_CHAN1 1
|
||||
#define WPAD_CHAN2 2
|
||||
#define WPAD_CHAN3 3
|
||||
#define WPAD_CHAN_INVALID -1
|
||||
|
||||
#define WPAD_MAX_CONTROLLERS 4
|
||||
|
||||
#define WPAD_HIDREP_BASE 0x10
|
||||
#define WPAD_HIDREP_VIBRATOR 0x10
|
||||
#define WPAD_HIDREP_PORT 0x11
|
||||
#define WPAD_HIDREP_REPTYPE 0x12
|
||||
#define WPAD_HIDREP_ENDPD 0x13
|
||||
#define WPAD_HIDREP_ENSPK 0x14
|
||||
#define WPAD_HIDREP_GETSTAT 0x15
|
||||
#define WPAD_HIDREP_WRDATA 0x16
|
||||
#define WPAD_HIDREP_RDDATA 0x17
|
||||
#define WPAD_HIDREP_STRM 0x18
|
||||
#define WPAD_HIDREP_MUTE 0x19
|
||||
#define WPAD_HIDREP_DPDCSB 0x1A
|
||||
#define WPAD_HIDREP_WAIT 0xFF
|
||||
|
||||
#define WPAD_BTN_HCURSOR_MASK (WPAD_BUTTON_LEFT | WPAD_BUTTON_RIGHT)
|
||||
#define WPAD_BTN_VCURSOR_MASK (WPAD_BUTTON_UP | WPAD_BUTTON_DOWN)
|
||||
#define WPAD_CLB_HCURSOR_MASK (WPAD_CL_BUTTON_LEFT | WPAD_CL_BUTTON_RIGHT)
|
||||
#define WPAD_CLB_VCURSOR_MASK (WPAD_CL_BUTTON_UP | WPAD_CL_BUTTON_DOWN)
|
||||
|
||||
typedef void (*WPADInitFunc)(void);
|
||||
typedef void (*WPADCallback)(s32 chan, s32 result);
|
||||
typedef void (*WPADExtensionCallback)(s32 chan, s32 devType);
|
||||
typedef void* (*WPADAlloc)(u32 size);
|
||||
typedef BOOL (*WPADFree)(void* ptr);
|
||||
typedef void (*WPADSyncDeviceCallback)(s32 result, s32 num);
|
||||
typedef void (*WPADSamplingCallback)(s32 chan);
|
||||
typedef void (*WPADConnectCallback)(s32 chan, s32 result);
|
||||
typedef void (*WPADSimpleSyncCallback)(s32 result, s32 num);
|
||||
typedef void (*WPADFlushCallback)(u32 result);
|
||||
|
||||
typedef u32 WPADDeviceType;
|
||||
typedef s32 WPADChannel;
|
||||
|
||||
typedef struct WPADInfo {
|
||||
/* 0x00 */ BOOL dpd;
|
||||
/* 0x04 */ BOOL speaker;
|
||||
/* 0x08 */ BOOL attach;
|
||||
/* 0x0C */ BOOL lowBat;
|
||||
/* 0x10 */ BOOL nearempty;
|
||||
/* 0x14 */ u8 battery;
|
||||
/* 0x15 */ u8 led;
|
||||
/* 0x16 */ u8 protocol;
|
||||
/* 0x17 */ u8 firmware;
|
||||
} WPADInfo;
|
||||
|
||||
typedef struct WPADAcc {
|
||||
/* 0x00 */ s16 x;
|
||||
/* 0x02 */ s16 y;
|
||||
/* 0x04 */ s16 z;
|
||||
} WPADAcc;
|
||||
|
||||
typedef struct DPDObject {
|
||||
/* 0x00 */ s16 x;
|
||||
@@ -130,7 +186,7 @@ typedef struct WPADStatus {
|
||||
/* 0x02 */ s16 accX;
|
||||
/* 0x04 */ s16 accY;
|
||||
/* 0x06 */ s16 accZ;
|
||||
/* 0x08 */ DPDObject obj[WPAD_MAX_DPD_OBJECTS];
|
||||
/* 0x08 */ DPDObject obj[WPAD_DPD_MAX_OBJECTS];
|
||||
/* 0x28 */ u8 dev;
|
||||
/* 0x29 */ s8 err;
|
||||
} WPADStatus;
|
||||
@@ -145,54 +201,37 @@ typedef struct DPDObjEx {
|
||||
} DPDObjEx;
|
||||
|
||||
typedef struct WPADStatusEx {
|
||||
/* 0x00 */ u16 button;
|
||||
/* 0x02 */ s16 accX;
|
||||
/* 0x04 */ s16 accY;
|
||||
/* 0x06 */ s16 accZ;
|
||||
/* 0x08 */ DPDObject obj[WPAD_MAX_DPD_OBJECTS];
|
||||
/* 0x28 */ u8 dev;
|
||||
/* 0x29 */ s8 err;
|
||||
/* 0x2a */ DPDObjEx exp[WPAD_MAX_DPD_OBJECTS];
|
||||
/* 0x00 */ WPADStatus base;
|
||||
/* 0x2A */ DPDObjEx exp[WPAD_DPD_MAX_OBJECTS];
|
||||
} WPADStatusEx;
|
||||
|
||||
typedef struct WPADFSStatus {
|
||||
/* 0x00 */ u16 button;
|
||||
/* 0x02 */ s16 accX;
|
||||
/* 0x04 */ s16 accY;
|
||||
/* 0x06 */ s16 accZ;
|
||||
/* 0x08 */ DPDObject obj[WPAD_MAX_DPD_OBJECTS];
|
||||
/* 0x28 */ u8 dev;
|
||||
/* 0x29 */ s8 err;
|
||||
/* 0x2a */ s16 fsAccX;
|
||||
/* 0x2c */ s16 fsAccY;
|
||||
/* 0x2e */ s16 fsAccZ;
|
||||
/* 0x00 */ WPADStatus base;
|
||||
/* 0x2A */ s16 fsAccX;
|
||||
/* 0x2C */ s16 fsAccY;
|
||||
/* 0x2E */ s16 fsAccZ;
|
||||
/* 0x30 */ s8 fsStickX;
|
||||
/* 0x31 */ s8 fsStickY;
|
||||
} WPADFSStatus;
|
||||
|
||||
typedef struct WPADCLStatus {
|
||||
/* 0x00 */ u16 button;
|
||||
/* 0x02 */ s16 accX;
|
||||
/* 0x04 */ s16 accY;
|
||||
/* 0x06 */ s16 accZ;
|
||||
/* 0x08 */ DPDObject obj[WPAD_MAX_DPD_OBJECTS];
|
||||
/* 0x28 */ u8 dev;
|
||||
/* 0x29 */ s8 err;
|
||||
/* 0x2a */ u16 clButton;
|
||||
/* 0x2c */ s16 clLStickX;
|
||||
/* 0x2e */ s16 clLStickY;
|
||||
/* 0x00 */ WPADStatus base;
|
||||
/* 0x2A */ u16 clButton;
|
||||
/* 0x2C */ s16 clLStickX;
|
||||
/* 0x2E */ s16 clLStickY;
|
||||
/* 0x30 */ s16 clRStickX;
|
||||
/* 0x32 */ s16 clRStickY;
|
||||
/* 0x34 */ u8 clTriggerL;
|
||||
/* 0x35 */ u8 clTriggerR;
|
||||
} WPADCLStatus;
|
||||
|
||||
#if SDK_AUG2010
|
||||
typedef struct WPADBKStatus {
|
||||
/* 0x00 */ u16 button;
|
||||
/* 0x02 */ s16 accX;
|
||||
/* 0x04 */ s16 accY;
|
||||
/* 0x06 */ s16 accZ;
|
||||
/* 0x08 */ DPDObject obj[WPAD_MAX_DPD_OBJECTS];
|
||||
/* 0x08 */ DPDObject obj[WPAD_DPD_MAX_OBJECTS];
|
||||
/* 0x28 */ u8 dev;
|
||||
/* 0x29 */ s8 err;
|
||||
/* 0x2a */ u8 bulk[21];
|
||||
@@ -204,7 +243,7 @@ typedef struct WPADTRStatus {
|
||||
/* 0x02 */ s16 accX;
|
||||
/* 0x04 */ s16 accY;
|
||||
/* 0x06 */ s16 accZ;
|
||||
/* 0x08 */ DPDObject obj[WPAD_MAX_DPD_OBJECTS];
|
||||
/* 0x08 */ DPDObject obj[WPAD_DPD_MAX_OBJECTS];
|
||||
/* 0x28 */ u8 dev;
|
||||
/* 0x29 */ s8 err;
|
||||
/* 0x2a */ u16 trButton;
|
||||
@@ -217,7 +256,7 @@ typedef struct WPADVSStatus {
|
||||
/* 0x02 */ s16 accX;
|
||||
/* 0x04 */ s16 accY;
|
||||
/* 0x06 */ s16 accZ;
|
||||
/* 0x08 */ DPDObject obj[WPAD_MAX_DPD_OBJECTS];
|
||||
/* 0x08 */ DPDObject obj[WPAD_DPD_MAX_OBJECTS];
|
||||
/* 0x28 */ u8 dev;
|
||||
/* 0x29 */ s8 err;
|
||||
/* 0x2a */ u16 at_0x2a[5];
|
||||
@@ -233,7 +272,7 @@ typedef struct WPADMPStatus {
|
||||
/* 0x02 */ s16 accX;
|
||||
/* 0x04 */ s16 accY;
|
||||
/* 0x06 */ s16 accZ;
|
||||
/* 0x08 */ DPDObject obj[WPAD_MAX_DPD_OBJECTS];
|
||||
/* 0x08 */ DPDObject obj[WPAD_DPD_MAX_OBJECTS];
|
||||
/* 0x28 */ u8 dev;
|
||||
/* 0x29 */ s8 err;
|
||||
union {
|
||||
@@ -255,7 +294,6 @@ typedef struct WPADMPStatus {
|
||||
} cl;
|
||||
} ext;
|
||||
/* 0x36 */ u8 stat;
|
||||
/* 0x37 */ u8 reserved;
|
||||
/* 0x38 */ s16 pitch;
|
||||
/* 0x3a */ s16 yaw;
|
||||
/* 0x3c */ s16 roll;
|
||||
@@ -266,25 +304,14 @@ typedef struct WPADBLStatus {
|
||||
/* 0x02 */ s16 accX;
|
||||
/* 0x04 */ s16 accY;
|
||||
/* 0x06 */ s16 accZ;
|
||||
/* 0x08 */ DPDObject obj[WPAD_MAX_DPD_OBJECTS];
|
||||
/* 0x08 */ DPDObject obj[WPAD_DPD_MAX_OBJECTS];
|
||||
/* 0x28 */ u8 dev;
|
||||
/* 0x29 */ s8 err;
|
||||
/* 0x2a */ u16 press[4];
|
||||
/* 0x32 */ s8 temp;
|
||||
/* 0x33 */ u8 battery;
|
||||
} WPADBLStatus;
|
||||
|
||||
typedef struct WPADInfo {
|
||||
/* 0x00 */ BOOL dpd;
|
||||
/* 0x04 */ BOOL speaker;
|
||||
/* 0x08 */ BOOL attach;
|
||||
/* 0x0C */ BOOL lowBat;
|
||||
/* 0x10 */ BOOL nearempty;
|
||||
/* 0x14 */ u8 battery;
|
||||
/* 0x15 */ u8 led;
|
||||
/* 0x16 */ u8 protocol;
|
||||
/* 0x17 */ u8 firmware;
|
||||
} WPADInfo;
|
||||
#endif
|
||||
|
||||
#define WPAD_FMT_CORE_BTN 0
|
||||
#define WPAD_FMT_CORE_BTN_ACC 1
|
||||
@@ -306,6 +333,7 @@ typedef struct WPADInfo {
|
||||
#define WPAD_FMT_TAIKO 17
|
||||
#define WPAD_FMT_TURNTABLE 18
|
||||
#define WPAD_FMT_BULK 19
|
||||
#define WPAD_FMT_UNK_20 20
|
||||
|
||||
#define WPAD_SPEAKER_DISABLE 0
|
||||
#define WPAD_SPEAKER_ENABLE 1 // might be ON? see HBMRemoteSpk.cpp
|
||||
@@ -317,8 +345,21 @@ typedef struct WPADInfo {
|
||||
#define WPAD_MOTOR_STOP 0
|
||||
#define WPAD_MOTOR_RUMBLE 1
|
||||
|
||||
typedef u32 WPADDpdCommand;
|
||||
enum WPADDpdCommand_et
|
||||
{
|
||||
WPAD_DPD_DISABLE = 0x00,
|
||||
|
||||
// the command here is actually the data format
|
||||
WPAD_DPD_BASIC = 0x01,
|
||||
WPAD_DPD_STANDARD = 0x03,
|
||||
WPAD_DPD_EXTENDED = 0x05,
|
||||
};
|
||||
|
||||
s32 WPADProbe(s32 chan, u32* devType);
|
||||
u8 WPADGetRadioSensitivity(s32 chan);
|
||||
BOOL WPADSetAcceptConnection(u8 accept);
|
||||
BOOL WPADGetAcceptConnection(void);
|
||||
void WPADRead(s32 chan, WPADStatus* status);
|
||||
BOOL WPADIsSpeakerEnabled(s32 chan);
|
||||
s32 WPADControlSpeaker(s32 chan, u32 command, WPADCallback cb);
|
||||
@@ -327,20 +368,54 @@ s32 WPADSendStreamData(s32 chan, void* p_buf, u16 len);
|
||||
WPADConnectCallback WPADSetConnectCallback(s32 chan, WPADConnectCallback cb);
|
||||
WPADExtensionCallback WPADSetExtensionCallback(s32 chan, WPADExtensionCallback cb);
|
||||
WPADSimpleSyncCallback WPADSetSimpleSyncCallback(WPADSimpleSyncCallback cb);
|
||||
WPADSamplingCallback WPADSetSamplingCallback(s32 chan, WPADSamplingCallback cb);
|
||||
|
||||
BOOL WPADIsUsedCallbackByKPAD(void);
|
||||
void WPADSetCallbackByKPAD(BOOL isKPAD);
|
||||
s32 WPADGetInfoAsync(s32 chan, WPADInfo* info, WPADCallback cb);
|
||||
s32 WPADGetInfoAsync(s32 chan, WPADInfo* info, WPADCallback callback);
|
||||
void WPADControlMotor(s32 chan, u32 command);
|
||||
BOOL WPADCanSendStreamData(s32 chan);
|
||||
BOOL WPADStopSimpleSync(void);
|
||||
void WPADDisconnect(s32 chan);
|
||||
BOOL WPADStartSimpleSync();
|
||||
BOOL WPADStartFastSimpleSync(void);
|
||||
BOOL WPADSaveConfig(SCFlushCallback* cb);
|
||||
void WPADSetSpeakerVolume(u8 volume);
|
||||
BOOL WPADSaveConfig(WPADFlushCallback cb);
|
||||
u8 WPADGetSpeakerVolume(void);
|
||||
void WPADSetSpeakerVolume(u8 volume);
|
||||
void WPADEnableMotor(BOOL enabled);
|
||||
BOOL WPADIsMotorEnabled(void);
|
||||
BOOL IsBusyStream(s32 chan);
|
||||
|
||||
void WPADRegisterAllocator(WPADAlloc alloc, WPADFree free);
|
||||
u32 WPADGetWorkMemorySize(void);
|
||||
|
||||
void WPADGetAccGravityUnit(s32 chan, u32 type, WPADAcc* acc);
|
||||
|
||||
BOOL WPADIsDpdEnabled(s32 chan);
|
||||
s32 WPADControlDpd(s32 chan, u32 command, WPADCallback callback);
|
||||
u32 WPADGetLatestIndexInBuf(s32 chan);
|
||||
u32 WPADGetDataFormat(s32 chan);
|
||||
s32 WPADSetDataFormat(s32 chan, u32 fmt);
|
||||
void WPADSetAutoSleepTime(u8 minute);
|
||||
u8 WPADGetSensorBarPosition(void);
|
||||
s32 WPADGetStatus(void);
|
||||
|
||||
void WPADInit(void);
|
||||
BOOL OnShutdown(BOOL final, u32 event);
|
||||
u8 WPADGetDpdSensitivity(void);
|
||||
|
||||
void __WPADShutdown(void);
|
||||
void __WPADReconnect(BOOL);
|
||||
|
||||
BOOL WPADCancelSyncDevice();
|
||||
|
||||
void WPADSetAutoSamplingBuf(s32 chan, void* buf, u32);
|
||||
|
||||
s32 WPADControlLed(s32 chan, u8 pattern, WPADCallback callback);
|
||||
void WPADGetAddress(s32 chan, u8* addr);
|
||||
|
||||
#define WPADStartMotor(chan) WPADControlMotor((chan), WPAD_MOTOR_RUMBLE)
|
||||
#define WPADStopMotor(chan) WPADControlMotor((chan), WPAD_MOTOR_STOP)
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
#define CONTEXT_BTE_H
|
||||
|
||||
#include <stdint.h>
|
||||
#include "types.h"
|
||||
|
||||
// taken from https://github.com/doldecomp/sdk_2009-12-11/blob/main/include/context_bte.h
|
||||
|
||||
@@ -595,13 +596,19 @@ typedef union
|
||||
typedef void (tBTA_DM_SEC_CBACK)(tBTA_DM_SEC_EVT event, tBTA_DM_SEC *p_data);
|
||||
|
||||
/* Search callback events */
|
||||
#define BTA_DM_INQ_RES_EVT 0 /* Inquiry result for a peer device. */
|
||||
#define BTA_DM_INQ_CMPL_EVT 1 /* Inquiry complete. */
|
||||
#define BTA_DM_DISC_RES_EVT 2 /* Discovery result for a peer device. */
|
||||
#define BTA_DM_DISC_BLE_RES_EVT 3 /* Discovery result for BLE GATT based service on a peer device. */
|
||||
#define BTA_DM_DISC_CMPL_EVT 4 /* Discovery complete. */
|
||||
#define BTA_DM_DI_DISC_CMPL_EVT 5 /* Discovery complete. */
|
||||
#define BTA_DM_SEARCH_CANCEL_CMPL_EVT 6 /* Search cancelled */
|
||||
enum BTA_DM_State_e {
|
||||
BTA_DM_INQ_RES_EVT, /* Inquiry result for a peer device. */
|
||||
BTA_DM_INQ_CMPL_EVT, /* Inquiry complete. */
|
||||
BTA_DM_DISC_RES_EVT, /* Discovery result for a peer device. */
|
||||
#if SDK_AUG2010
|
||||
BTA_DM_DISC_BLE_RES_EVT, /* Discovery result for BLE GATT based service on a peer device. */
|
||||
#endif
|
||||
BTA_DM_DISC_CMPL_EVT, /* Discovery complete. */
|
||||
#if SDK_AUG2010
|
||||
BTA_DM_DI_DISC_CMPL_EVT, /* Discovery complete. */
|
||||
#endif
|
||||
BTA_DM_SEARCH_CANCEL_CMPL_EVT, /* Search cancelled */
|
||||
};
|
||||
|
||||
typedef UINT8 tBTA_DM_SEARCH_EVT;
|
||||
|
||||
@@ -1027,18 +1034,4 @@ void BTA_HhGetAclQueueInfo(void);
|
||||
void BTA_Init(void);
|
||||
void BTA_CleanUp(void (*p_cb)(tBTA_STATUS status)); // probably
|
||||
|
||||
// ---
|
||||
/* muff1n: I wrote this definition myself
|
||||
* TODO: would this be part of BLE or WUD?
|
||||
*/
|
||||
|
||||
struct small_dev_info
|
||||
{
|
||||
char devName[20]; // size 0x14? offset 0x00 // might be 0x13?
|
||||
char at_0x14[1]; // size 0x??, offset 0x14?
|
||||
char __pad0[0x20 - (0x14 + 0x01)];
|
||||
LINK_KEY linkKey; // size 0x10, offset 0x20
|
||||
char __pad1[0x10];
|
||||
}; // size 0x40
|
||||
|
||||
#endif // CONTEXT_BTE_H
|
||||
|
||||
@@ -0,0 +1,150 @@
|
||||
#ifndef RVL_SDK_WUD_H
|
||||
#define RVL_SDK_WUD_H
|
||||
|
||||
|
||||
#include <revolution/sc.h>
|
||||
#include <revolution/wpad/bte.h>
|
||||
|
||||
#include "types.h"
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define WUD_MAX_DEV_ENTRY_FOR_STD SC_MAX_DEV_ENTRY_FOR_STD
|
||||
#define WUD_MAX_DEV_ENTRY_FOR_SMP SC_MAX_DEV_ENTRY_FOR_SMP
|
||||
#define WUD_MAX_DEV_ENTRY SC_MAX_DEV_ENTRY
|
||||
#define WUD_DEV_HANDLE_INVALID (-1)
|
||||
#define WUD_ADDR_LEN BD_ADDR_LEN
|
||||
|
||||
// Forward declarations
|
||||
typedef struct WUDDevInfo WUDDevInfo;
|
||||
|
||||
typedef enum {
|
||||
WUD_LIB_STATUS_0,
|
||||
WUD_LIB_STATUS_1,
|
||||
WUD_LIB_STATUS_2,
|
||||
WUD_LIB_STATUS_3,
|
||||
WUD_LIB_STATUS_4,
|
||||
WUD_LIB_STATUS_5,
|
||||
} WUDLibStatus;
|
||||
|
||||
typedef enum {
|
||||
WUD_CHAN0,
|
||||
WUD_CHAN1,
|
||||
WUD_CHAN2,
|
||||
WUD_CHAN3,
|
||||
|
||||
WUD_MAX_CHANNELS,
|
||||
WUD_CHAN_INVALID = -1
|
||||
} WUDChannel;
|
||||
|
||||
typedef enum {
|
||||
WUD_SYNC_TYPE_STANDARD,
|
||||
WUD_SYNC_TYPE_SIMPLE,
|
||||
} WUDSyncType;
|
||||
|
||||
typedef enum {
|
||||
WUD_RESULT_SYNC_BUSY = -1,
|
||||
WUD_RESULT_SYNC_WAITING,
|
||||
WUD_RESULT_SYNC_DONE,
|
||||
} WUDSyncResult;
|
||||
|
||||
typedef void* (*WUDAllocFunc)(u32 size);
|
||||
typedef BOOL (*WUDFreeFunc)(void* pBlock);
|
||||
|
||||
typedef void (*WUDSyncDeviceCallback)(s32 result, s32 num);
|
||||
typedef void (*WUDClearDeviceCallback)(s32 result);
|
||||
|
||||
typedef void (*WUDHidConnCallback)(u8, u8);
|
||||
typedef void (*WUDHidRecvCallback)(UINT8 devHandle, UINT8* pReport, UINT16 len);
|
||||
|
||||
typedef struct WUDDevInfo {
|
||||
SCDevInfo conf; // at 0x0
|
||||
BD_ADDR devAddr; // at 0x40
|
||||
LINK_KEY linkKey; // at 0x46
|
||||
UINT8 devHandle; // at 0x56
|
||||
UINT8 subclass; // at 0x57
|
||||
UINT8 appID; // at 0x58
|
||||
u8 status; // at 0x59
|
||||
s8 UNK_0x5A; // at 0x5A
|
||||
u8 sync_type; // at 0x5B
|
||||
u8 UNK_0x5C; // at 0x5C
|
||||
u8 UNK_0x5D[1];
|
||||
tBTA_HH_ATTR_MASK hhAttrMask; // at 0x5E
|
||||
} WUDDevInfo;
|
||||
|
||||
BOOL WUDInit(void);
|
||||
BOOL WUDIsBusy(void);
|
||||
void WUDRegisterAllocator(WUDAllocFunc pAllocFunc, WUDFreeFunc pFreeFunc);
|
||||
u32 WUDGetAllocatedMemSize(void);
|
||||
void WUDShutdown(void);
|
||||
|
||||
WUDLibStatus WUDGetStatus(void);
|
||||
u8 WUDGetBufferStatus(void);
|
||||
|
||||
void WUDSetSniffMode(BD_ADDR addr, s32 interval);
|
||||
|
||||
// clang-format off
|
||||
WUDSyncDeviceCallback
|
||||
WUDSetSyncSimpleCallback(WUDSyncDeviceCallback pCallback);
|
||||
|
||||
WUDClearDeviceCallback
|
||||
WUDSetClearDeviceCallback(WUDClearDeviceCallback pCallback);
|
||||
// clang-format on
|
||||
|
||||
BOOL WUDStartSyncDevice(void);
|
||||
BOOL WUDStartFastSyncSimple(void);
|
||||
BOOL WUDStartSyncSimple(void);
|
||||
BOOL WUDStopSyncSimple(void);
|
||||
BOOL WUDCancelSyncDevice(void);
|
||||
|
||||
BOOL WUDStartClearDevice(void);
|
||||
BOOL WUDSetDisableChannel(s8 afhChannel);
|
||||
|
||||
WUDHidRecvCallback WUDSetHidRecvCallback(WUDHidRecvCallback pCallback);
|
||||
WUDHidConnCallback WUDSetHidConnCallback(WUDHidConnCallback pCallback);
|
||||
|
||||
void WUDSetVisibility(u8 disc, u8 conn);
|
||||
u8 WUDGetConnectable(void);
|
||||
|
||||
void WUDiGetFirmwareVersion(void);
|
||||
void WUDiInitSub(void);
|
||||
|
||||
void WUDiEnableStack(void);
|
||||
void WUDiAutoSync(void);
|
||||
void WUDiDeleteAllLinkKeys(void);
|
||||
|
||||
void WUDiRegisterDevice(BD_ADDR addr);
|
||||
void WUDiRemoveDevice(BD_ADDR addr);
|
||||
|
||||
WUDDevInfo* WUDiGetDevInfo(BD_ADDR addr);
|
||||
WUDDevInfo* WUDiGetDevInfoIndex(int idx);
|
||||
WUDDevInfo* WUDiGetNewDevInfo(void);
|
||||
void WUDiRemoveDevInfo(BD_ADDR addr);
|
||||
void WUDiClearDevice(void);
|
||||
|
||||
u8 WUDiGetDevNumber(void);
|
||||
u8 WUDiGetDevSmpNumber(void);
|
||||
u8 WUDiGetConnNumber(void);
|
||||
u8 WUDiGetLinkNum(void);
|
||||
|
||||
void WUDiMoveTopSmpDevInfoPtr(WUDDevInfo* pInfo);
|
||||
void WUDiMoveBottomSmpDevInfoPtr(WUDDevInfo* pInfo);
|
||||
WUDDevInfo* WUDiGetRemoveSmpDevice(void);
|
||||
void WUDiMoveTopOfDisconnectedSmpDevice(WUDDevInfo* pInfo);
|
||||
|
||||
void WUDiMoveTopStdDevInfoPtr(WUDDevInfo* pInfo);
|
||||
void WUDiMoveBottomStdDevInfoPtr(WUDDevInfo* pInfo);
|
||||
WUDDevInfo* WUDiGetRemoveStdDevice(void);
|
||||
void WUDiMoveTopOfDisconnectedStdDevice(WUDDevInfo* pInfo);
|
||||
|
||||
BD_ADDR_PTR _WUDGetDevAddr(UINT8 handle);
|
||||
u16 _WUDGetQueuedSize(s8 dev_handle);
|
||||
u16 _WUDGetNotAckedSize(s8 dev_handle);
|
||||
u8 _WUDGetLinkNumber(void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user