mirror of https://github.com/PrimeDecomp/prime.git
56 lines
1.2 KiB
C++
56 lines
1.2 KiB
C++
#ifndef _CGBASUPPORT
|
|
#define _CGBASUPPORT
|
|
|
|
#include "Kyoto/CDvdFile.hpp"
|
|
#include "rstl/auto_ptr.hpp"
|
|
#include "rstl/single_ptr.hpp"
|
|
#include "rstl/rc_ptr.hpp"
|
|
|
|
class CGBASupport {
|
|
public:
|
|
enum EPhase {
|
|
kP_LoadClientPad,
|
|
kP_Standby,
|
|
kP_StartProbeTimeout,
|
|
kP_PollProbe,
|
|
kP_StartJoyBusBoot,
|
|
kP_PollJoyBusBoot,
|
|
kP_DataTransfer,
|
|
kP_Complete,
|
|
kP_Failed
|
|
};
|
|
|
|
private:
|
|
CDvdFile x0_file;
|
|
uint x28_fileSize;
|
|
rstl::single_ptr<uchar> x2c_buffer;
|
|
rstl::single_ptr<CDvdRequest> x30_dvdReq;
|
|
EPhase x34_phase;
|
|
float x38_timeout;
|
|
uchar x3c_status;
|
|
uint x40_siChan;
|
|
bool x44_fusionLinked;
|
|
bool x45_fusionBeat;
|
|
|
|
// this is inlined weirdly... this probably should be handled differently
|
|
bool CheckReadyStatus();
|
|
public:
|
|
static void Initialize();
|
|
static void GlobalPoll();
|
|
|
|
CGBASupport();
|
|
~CGBASupport();
|
|
bool PollResponse();
|
|
void Update(float dt);
|
|
bool IsReady();
|
|
void InitializeSupport();
|
|
void StartLink();
|
|
EPhase GetPhase() const { return x34_phase; }
|
|
bool IsFusionLinked() const { return x44_fusionLinked; }
|
|
bool IsFusionBeat() const { return x45_fusionBeat; }
|
|
};
|
|
|
|
extern CGBASupport* g_GBA;
|
|
|
|
#endif // _CGBASUPPORT
|