DS4 Support. Supports sixaxis and vibrate

This commit is contained in:
Jake 2017-04-28 20:02:28 -05:00 committed by Ivan
parent 6d7419be0e
commit 6bb32e4e80
10 changed files with 820 additions and 14 deletions

View file

@ -64,7 +64,7 @@ s32 cellPadClearBuf(u32 port_no)
//~399 on sensor y is a level non moving controller
pad.m_sensor_y = 399;
pad.m_sensor_x = pad.m_sensor_z = pad.m_sensor_g = 0;
pad.m_sensor_x = pad.m_sensor_z = pad.m_sensor_g = 512;
return CELL_OK;
}
@ -221,7 +221,7 @@ s32 cellPadGetData(u32 port_no, vm::ptr<CellPadData> data)
}
}
for (const AnalogStick& stick : pads[port_no].m_sticks)
for (const AnalogStick& stick : pad.m_sticks)
{
switch (stick.m_offset)
{
@ -244,6 +244,31 @@ s32 cellPadGetData(u32 port_no, vm::ptr<CellPadData> data)
default: break;
}
}
for (const AnalogSensor& sensor : pad.m_sensors)
{
switch (sensor.m_offset)
{
case CELL_PAD_BTN_OFFSET_SENSOR_X:
if (pad.m_sensor_x != sensor.m_value) btnChanged = true;
pad.m_sensor_x = sensor.m_value;
break;
case CELL_PAD_BTN_OFFSET_SENSOR_Y:
if (pad.m_sensor_y != sensor.m_value) btnChanged = true;
pad.m_sensor_y = sensor.m_value;
break;
case CELL_PAD_BTN_OFFSET_SENSOR_Z:
if (pad.m_sensor_z != sensor.m_value) btnChanged = true;
pad.m_sensor_z = sensor.m_value;
break;
case CELL_PAD_BTN_OFFSET_SENSOR_G:
if (pad.m_sensor_g != sensor.m_value) btnChanged = true;
pad.m_sensor_g = sensor.m_value;
break;
default: break;
}
}
if (d1Initial != pad.m_digital_1 || d2Initial != pad.m_digital_2)
{
btnChanged = true;
@ -252,7 +277,6 @@ s32 cellPadGetData(u32 port_no, vm::ptr<CellPadData> data)
//not sure if this should officially change with capabilities/portsettings :(
data->len = 24;
//report len 0 if nothing changed and if we havent recently cleared buffer
if (pad.m_buffer_cleared)
{
pad.m_buffer_cleared = false;
@ -324,7 +348,7 @@ s32 cellPadGetDataExtra(u32 port_no, vm::ptr<u32> device_type, vm::ptr<CellPadDa
return cellPadGetData(port_no, data);
}
s32 cellPadSetActDirect(u32 port_no, vm::ptr<struct CellPadActParam> param)
s32 cellPadSetActDirect(u32 port_no, vm::ptr<CellPadActParam> param)
{
sys_io.trace("cellPadSetActDirect(port_no=%d, param=*0x%x)", port_no, param);
@ -340,6 +364,8 @@ s32 cellPadSetActDirect(u32 port_no, vm::ptr<struct CellPadActParam> param)
if (port_no >= rinfo.now_connect)
return CELL_PAD_ERROR_NO_DEVICE;
handler->SetRumble(port_no, param->motor[1], param->motor[0] > 0);
return CELL_OK;
}
@ -357,7 +383,6 @@ s32 cellPadGetInfo(vm::ptr<CellPadInfo> info)
info->now_connect = rinfo.now_connect;
info->system_info = rinfo.system_info;
//Can't have this as const, we need to reset Assign Changes Flag here
std::vector<Pad>& pads = handler->GetPads();
for (u32 i=0; i<CELL_MAX_PADS; ++i)