mirror of
https://github.com/gligli/nulldc-360.git
synced 2025-04-02 11:11:56 -04:00
119 lines
No EOL
2.1 KiB
C++
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
|