Add in cellPadGetCapabilityInfo function

This commit is contained in:
Jake 2014-05-06 22:46:18 -05:00
parent 199845a9d1
commit 604eecf5d4
5 changed files with 30 additions and 1 deletions

View File

@ -86,6 +86,7 @@ enum ButtonDataOffset
static const u32 CELL_MAX_PADS = 127;
static const u32 CELL_PAD_MAX_PORT_NUM = 7;
static const u32 CELL_PAD_MAX_CODES = 64;
static const u32 CELL_PAD_MAX_CAPABILITY_INFO = 32;
struct Button
{

View File

@ -3041,7 +3041,7 @@ s64 SysCalls::DoFunc(const u32 id)
case 0xd9a4f812: FUNC_LOG_ERROR("TODO: atoff");
case 0xda5a7eb8: FUNC_LOG_ERROR("TODO: strtoul");
case 0xdaeada07: FUNC_LOG_ERROR("TODO: mallopt");
case 0xdbf4c59c: FUNC_LOG_ERROR("TODO: cellPadGetCapabilityInfo");
//case 0xdbf4c59c: FUNC_LOG_ERROR("TODO: cellPadGetCapabilityInfo");
case 0xddbac025: FUNC_LOG_ERROR("TODO: strcasecmp_ascii");
case 0xddc71a75: FUNC_LOG_ERROR("TODO: _SCE_Assert");
case 0xde1bb092: FUNC_LOG_ERROR("TODO: init_by_array_TT800");

View File

@ -20,6 +20,7 @@ void sys_io_init()
sys_io.AddFunc(0x78200559, cellPadInfoSensorMode);
sys_io.AddFunc(0xf83f8182, cellPadSetPressMode);
sys_io.AddFunc(0xbe5be3ba, cellPadSetSensorMode);
sys_io.AddFunc(0xdbf4c59c, cellPadGetCapabilityInfo);
sys_io.AddFunc(0x433f6ec0, cellKbInit);
sys_io.AddFunc(0xbfce3285, cellKbEnd);

View File

@ -314,6 +314,7 @@ extern int cellPadInfoPressMode(u32 port_no);
extern int cellPadInfoSensorMode(u32 port_no);
extern int cellPadSetPressMode(u32 port_no, u32 mode);
extern int cellPadSetSensorMode(u32 port_no, u32 mode);
extern int cellPadGetCapabilityInfo(u32 port_no, mem32_t info_addr);
//cellKb
extern int cellKbInit(u32 max_connect);

View File

@ -45,6 +45,11 @@ struct CellPadInfo2
be_t<u32> device_type[CELL_PAD_MAX_PORT_NUM];
};
struct CellCapabilityInfo
{
be_t<u32> info[CELL_PAD_MAX_CAPABILITY_INFO];
};
int cellPadInit(u32 max_connect)
{
sys_io.Log("cellPadInit(max_connect=%d)", max_connect);
@ -240,6 +245,27 @@ int cellPadGetInfo2(u32 info_addr)
return CELL_OK;
}
int cellPadGetCapabilityInfo(u32 port_no, mem32_t info_addr)
{
sys_io.Log("cellPadGetCapabilityInfo[port_no: %d, data_addr: 0x%x]", port_no, info_addr.GetAddr());
if (!Emu.GetPadManager().IsInited()) return CELL_PAD_ERROR_UNINITIALIZED;
const PadInfo& rinfo = Emu.GetPadManager().GetInfo();
if (port_no >= rinfo.max_connect) return CELL_PAD_ERROR_INVALID_PARAMETER;
if (port_no >= rinfo.now_connect) return CELL_PAD_ERROR_NO_DEVICE;
const std::vector<Pad>& pads = Emu.GetPadManager().GetPads();
CellCapabilityInfo data;
memset(&data, 0, sizeof(CellCapabilityInfo));
//Should return the same as device capability mask, psl1ght has it backwards in pad.h
data.info[0] = pads[port_no].m_device_capability;
Memory.WriteData(info_addr.GetAddr(), data);
return CELL_OK;
}
int cellPadSetPortSetting(u32 port_no, u32 port_setting)
{
sys_io.Log("cellPadSetPortSetting(port_no=%d, port_setting=0x%x)", port_no, port_setting);