mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-07-15 19:28:43 +12:00
DS4 Support. Supports sixaxis and vibrate
This commit is contained in:
parent
6d7419be0e
commit
6bb32e4e80
10 changed files with 820 additions and 14 deletions
|
@ -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)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue