tp/include/JSystem/JHostIO/JHICommonMem.h

78 lines
1.8 KiB
C++

#ifndef JHICOMMONMEM_H
#define JHICOMMONMEM_H
#include <dolphin/types.h>
inline u32 JHIhtonl(u32 v) {
#if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
return v;
#else
// todo
#endif
}
template <typename T>
struct JHITag {
JHITag(u32 tag) {
m_tag = tag;
mp_data = NULL;
}
s32 send(const void* param_0, s32 param_1) {
u32 sp10[2];
sp10[0] = JHIhtonl(m_tag);
sp10[1] = JHIhtonl(param_1);
if (mp_data->sendBegin() >= param_1 + 8) {
mp_data->sendCont(sp10, 8);
mp_data->sendCont(param_0, param_1);
mp_data->sendEnd();
}
return param_1;
}
virtual ~JHITag() {}
virtual void receive(const char*, s32);
/* 0x4 */ u32 m_tag;
/* 0x8 */ T* mp_data;
};
class JHIMemBuf;
class JHICommonMem {
public:
virtual ~JHICommonMem() {}
virtual int create() = 0;
virtual int open() = 0;
virtual void close() = 0;
virtual u8* getPointer() const = 0;
virtual void readIO(u32 position, u32* out_data) const = 0;
virtual u32 readIO(u32 position) const = 0;
virtual void writeIO(u32 position, u32 data) const = 0;
virtual void writeIO(u32 position, u8* src_data, u32 length) const = 0;
static JHIMemBuf* Instance();
static JHIMemBuf* instance;
};
class JHIMemBuf : public JHICommonMem {
public:
JHIMemBuf();
virtual ~JHIMemBuf();
virtual int create();
virtual int open();
virtual void close();
virtual u8* getPointer() const;
virtual void readIO(u32 position, u32* out_data) const;
virtual u32 readIO(u32 position) const;
virtual void writeIO(u32 position, u32 data) const;
virtual void writeIO(u32 position, u8* src_data, u32 length) const;
/* 0x4 */ u8* mp_buffer;
};
#endif /* JHICOMMONMEM_H */