nulldc-360/plugins/XMaple/MapleInterface.h
2011-10-15 12:33:03 +02:00

119 lines
No EOL
2.1 KiB
C++

// The lowest of the low! woot
#pragma once
#include <string>
#include "nullDC/types.h"
typedef unsigned int CRITICAL_SECTION;
static inline void InitializeCriticalSection(CRITICAL_SECTION * s){
*s=0;
}
static inline void EnterCriticalSection(CRITICAL_SECTION * s){
}
static inline void LeaveCriticalSection(CRITICAL_SECTION * s){
}
namespace EmulatedDevices
{
enum
{
// May be ORd
REGION_USA = 0x01,
REGION_JAP = 0x02,
REGION_ASIA = 0x04,
REGION_EURO = 0x08,
REGION_ALL = 0xFF, // Only use this, really...
};
enum
{
DIRECTION_UP = 0, // We only really use Up, anyways...
DIRECTION_DOWN = 1,
DIRECTION_LEFT = 2,
DIRECTION_RIGHT = 3,
};
// Maple commands and return codes
enum
{
GetStatus = 0x01,
GetStatusAll,
DeviceReset,
DeviceKill,
//return codes
DeviceInfo,
DeviceInfoEx,
DeviceReply,
DataTransfer,
GetCondition,
GetMediaInfo,
BlockRead,
BlockWrite,
GetLastError,
SetCondition,
FT4Control,
ARControl,
//errors
ARError = 0xF9,
LCDError,
FileError,
TransmitAgain,
CommandUnknown,
FuncTypeUnknown
};
class MapleInterface
{
protected:
// Device ID
u32 m_FuncType;
u32 m_FuncDef[3];
// Destination code
u8 m_Region;
// Connection direction
u8 m_Direction;
// Product name
const char* m_strName;
// License
const char* m_License;
// Standby current consumption
u16 m_mAstandby;
// Maximum current consumption
u16 m_mAmax;
// Free Device Status
const char* m_strNameEx;
// the device ID as determined by nullDC
u32 m_deviceID;
// the xpad this device is mapped to
u8 m_xpad;
public:
virtual u32 DMA(u32 Command,
u32* buffer_in, u32 buffer_in_len,
u32* buffer_out, u32& buffer_out_len) = 0;
static u32 FASTCALL ClassDMA(void* device_instance,
u32 Command,
u32* buffer_in, u32 buffer_in_len,
u32* buffer_out, u32& buffer_out_len)
{
//the class pointer is the device_instance, just cast it
MapleInterface * pthis = (MapleInterface*)device_instance;
return pthis->DMA(Command, buffer_in, buffer_in_len, buffer_out, buffer_out_len);
}
void SetXPad(u8 pad) {m_xpad = pad;}
u8 GetXPad() {return m_xpad;}
u32 GetID() {return m_deviceID;}
};
} //namespace