mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-04-22 04:25:19 +00:00
input: merge some duplicate code
This commit is contained in:
parent
2409a0d04e
commit
1bd9549e45
2 changed files with 10 additions and 115 deletions
|
@ -181,8 +181,6 @@ void dualsense_pad_handler::check_add_device(hid_device* hidDevice, std::string_
|
|||
return;
|
||||
}
|
||||
|
||||
std::string serial;
|
||||
|
||||
std::array<u8, 64> buf{};
|
||||
buf[0] = 0x09;
|
||||
|
||||
|
@ -196,6 +194,8 @@ void dualsense_pad_handler::check_add_device(hid_device* hidDevice, std::string_
|
|||
return;
|
||||
}
|
||||
|
||||
std::string serial;
|
||||
|
||||
if (res == 21)
|
||||
{
|
||||
serial = fmt::format("%x%x%x%x%x%x", buf[6], buf[5], buf[4], buf[3], buf[2], buf[1]);
|
||||
|
@ -686,112 +686,7 @@ std::unordered_map<u64, u16> dualsense_pad_handler::get_button_values(const std:
|
|||
|
||||
const std::array<u8, 64>& buf = dualsense_dev->padData;
|
||||
|
||||
if (dualsense_dev->data_mode == DualSenseDevice::DualSenseDataMode::Simple)
|
||||
{
|
||||
// Left Stick X Axis
|
||||
keyBuffer[DualSenseKeyCodes::LSXNeg] = Clamp0To255((127.5f - buf[0]) * 2.0f);
|
||||
keyBuffer[DualSenseKeyCodes::LSXPos] = Clamp0To255((buf[0] - 127.5f) * 2.0f);
|
||||
|
||||
// Left Stick Y Axis (Up is the negative for some reason)
|
||||
keyBuffer[DualSenseKeyCodes::LSYNeg] = Clamp0To255((buf[1] - 127.5f) * 2.0f);
|
||||
keyBuffer[DualSenseKeyCodes::LSYPos] = Clamp0To255((127.5f - buf[1]) * 2.0f);
|
||||
|
||||
// Right Stick X Axis
|
||||
keyBuffer[DualSenseKeyCodes::RSXNeg] = Clamp0To255((127.5f - buf[2]) * 2.0f);
|
||||
keyBuffer[DualSenseKeyCodes::RSXPos] = Clamp0To255((buf[2] - 127.5f) * 2.0f);
|
||||
|
||||
// Right Stick Y Axis (Up is the negative for some reason)
|
||||
keyBuffer[DualSenseKeyCodes::RSYNeg] = Clamp0To255((buf[3] - 127.5f) * 2.0f);
|
||||
keyBuffer[DualSenseKeyCodes::RSYPos] = Clamp0To255((127.5f - buf[3]) * 2.0f);
|
||||
|
||||
// bleh, dpad in buffer is stored in a different state
|
||||
u8 data = buf[4] & 0xf;
|
||||
switch (data)
|
||||
{
|
||||
case 0x08: // none pressed
|
||||
keyBuffer[DualSenseKeyCodes::Up] = 0;
|
||||
keyBuffer[DualSenseKeyCodes::Down] = 0;
|
||||
keyBuffer[DualSenseKeyCodes::Left] = 0;
|
||||
keyBuffer[DualSenseKeyCodes::Right] = 0;
|
||||
break;
|
||||
case 0x07: // NW...left and up
|
||||
keyBuffer[DualSenseKeyCodes::Up] = 255;
|
||||
keyBuffer[DualSenseKeyCodes::Down] = 0;
|
||||
keyBuffer[DualSenseKeyCodes::Left] = 255;
|
||||
keyBuffer[DualSenseKeyCodes::Right] = 0;
|
||||
break;
|
||||
case 0x06: // W..left
|
||||
keyBuffer[DualSenseKeyCodes::Up] = 0;
|
||||
keyBuffer[DualSenseKeyCodes::Down] = 0;
|
||||
keyBuffer[DualSenseKeyCodes::Left] = 255;
|
||||
keyBuffer[DualSenseKeyCodes::Right] = 0;
|
||||
break;
|
||||
case 0x05: // SW..left down
|
||||
keyBuffer[DualSenseKeyCodes::Up] = 0;
|
||||
keyBuffer[DualSenseKeyCodes::Down] = 255;
|
||||
keyBuffer[DualSenseKeyCodes::Left] = 255;
|
||||
keyBuffer[DualSenseKeyCodes::Right] = 0;
|
||||
break;
|
||||
case 0x04: // S..down
|
||||
keyBuffer[DualSenseKeyCodes::Up] = 0;
|
||||
keyBuffer[DualSenseKeyCodes::Down] = 255;
|
||||
keyBuffer[DualSenseKeyCodes::Left] = 0;
|
||||
keyBuffer[DualSenseKeyCodes::Right] = 0;
|
||||
break;
|
||||
case 0x03: // SE..down and right
|
||||
keyBuffer[DualSenseKeyCodes::Up] = 0;
|
||||
keyBuffer[DualSenseKeyCodes::Down] = 255;
|
||||
keyBuffer[DualSenseKeyCodes::Left] = 0;
|
||||
keyBuffer[DualSenseKeyCodes::Right] = 255;
|
||||
break;
|
||||
case 0x02: // E... right
|
||||
keyBuffer[DualSenseKeyCodes::Up] = 0;
|
||||
keyBuffer[DualSenseKeyCodes::Down] = 0;
|
||||
keyBuffer[DualSenseKeyCodes::Left] = 0;
|
||||
keyBuffer[DualSenseKeyCodes::Right] = 255;
|
||||
break;
|
||||
case 0x01: // NE.. up right
|
||||
keyBuffer[DualSenseKeyCodes::Up] = 255;
|
||||
keyBuffer[DualSenseKeyCodes::Down] = 0;
|
||||
keyBuffer[DualSenseKeyCodes::Left] = 0;
|
||||
keyBuffer[DualSenseKeyCodes::Right] = 255;
|
||||
break;
|
||||
case 0x00: // n.. up
|
||||
keyBuffer[DualSenseKeyCodes::Up] = 255;
|
||||
keyBuffer[DualSenseKeyCodes::Down] = 0;
|
||||
keyBuffer[DualSenseKeyCodes::Left] = 0;
|
||||
keyBuffer[DualSenseKeyCodes::Right] = 0;
|
||||
break;
|
||||
default:
|
||||
fmt::throw_exception("dualsense dpad state encountered unexpected input");
|
||||
}
|
||||
|
||||
data = buf[4] >> 4;
|
||||
keyBuffer[DualSenseKeyCodes::Square] = ((data & 0x01) != 0) ? 255 : 0;
|
||||
keyBuffer[DualSenseKeyCodes::Cross] = ((data & 0x02) != 0) ? 255 : 0;
|
||||
keyBuffer[DualSenseKeyCodes::Circle] = ((data & 0x04) != 0) ? 255 : 0;
|
||||
keyBuffer[DualSenseKeyCodes::Triangle] = ((data & 0x08) != 0) ? 255 : 0;
|
||||
|
||||
data = buf[5];
|
||||
keyBuffer[DualSenseKeyCodes::L1] = ((data & 0x01) != 0) ? 255 : 0;
|
||||
keyBuffer[DualSenseKeyCodes::R1] = ((data & 0x02) != 0) ? 255 : 0;
|
||||
//keyBuffer[DualSenseKeyCodes::L2] = ((data & 0x04) != 0) ? 255 : 0; // active when L2 is pressed
|
||||
//keyBuffer[DualSenseKeyCodes::R2] = ((data & 0x08) != 0) ? 255 : 0; // active when R2 is pressed
|
||||
keyBuffer[DualSenseKeyCodes::Share] = ((data & 0x10) != 0) ? 255 : 0;
|
||||
keyBuffer[DualSenseKeyCodes::Options] = ((data & 0x20) != 0) ? 255 : 0;
|
||||
keyBuffer[DualSenseKeyCodes::L3] = ((data & 0x40) != 0) ? 255 : 0;
|
||||
keyBuffer[DualSenseKeyCodes::R3] = ((data & 0x80) != 0) ? 255 : 0;
|
||||
|
||||
data = buf[6];
|
||||
keyBuffer[DualSenseKeyCodes::PSButton] = ((data & 0x01) != 0) ? 255 : 0;
|
||||
keyBuffer[DualSenseKeyCodes::TouchPad] = ((data & 0x02) != 0) ? 255 : 0;
|
||||
keyBuffer[DualSenseKeyCodes::Mic] = ((data & 0x04) != 0) ? 255 : 0;
|
||||
|
||||
keyBuffer[DualSenseKeyCodes::L2] = buf[7];
|
||||
keyBuffer[DualSenseKeyCodes::R2] = buf[8];
|
||||
|
||||
return keyBuffer;
|
||||
}
|
||||
const bool is_simple_mode = dualsense_dev->data_mode == DualSenseDevice::DualSenseDataMode::Simple;
|
||||
|
||||
// Left Stick X Axis
|
||||
keyBuffer[DualSenseKeyCodes::LSXNeg] = Clamp0To255((127.5f - buf[0]) * 2.0f);
|
||||
|
@ -809,10 +704,10 @@ std::unordered_map<u64, u16> dualsense_pad_handler::get_button_values(const std:
|
|||
keyBuffer[DualSenseKeyCodes::RSYNeg] = Clamp0To255((buf[3] - 127.5f) * 2.0f);
|
||||
keyBuffer[DualSenseKeyCodes::RSYPos] = Clamp0To255((127.5f - buf[3]) * 2.0f);
|
||||
|
||||
keyBuffer[DualSenseKeyCodes::L2] = buf[4];
|
||||
keyBuffer[DualSenseKeyCodes::R2] = buf[5];
|
||||
keyBuffer[DualSenseKeyCodes::L2] = buf[is_simple_mode ? 7 : 4];
|
||||
keyBuffer[DualSenseKeyCodes::R2] = buf[is_simple_mode ? 8 : 5];
|
||||
|
||||
u8 data = buf[7] & 0xf;
|
||||
u8 data = buf[is_simple_mode ? 4 : 7] & 0xf;
|
||||
switch (data)
|
||||
{
|
||||
case 0x08: // none pressed
|
||||
|
@ -873,13 +768,13 @@ std::unordered_map<u64, u16> dualsense_pad_handler::get_button_values(const std:
|
|||
fmt::throw_exception("dualsense dpad state encountered unexpected input");
|
||||
}
|
||||
|
||||
data = buf[7] >> 4;
|
||||
data = buf[is_simple_mode ? 4 : 7] >> 4;
|
||||
keyBuffer[DualSenseKeyCodes::Square] = ((data & 0x01) != 0) ? 255 : 0;
|
||||
keyBuffer[DualSenseKeyCodes::Cross] = ((data & 0x02) != 0) ? 255 : 0;
|
||||
keyBuffer[DualSenseKeyCodes::Circle] = ((data & 0x04) != 0) ? 255 : 0;
|
||||
keyBuffer[DualSenseKeyCodes::Triangle] = ((data & 0x08) != 0) ? 255 : 0;
|
||||
|
||||
data = buf[8];
|
||||
data = buf[is_simple_mode ? 5 : 8];
|
||||
keyBuffer[DualSenseKeyCodes::L1] = ((data & 0x01) != 0) ? 255 : 0;
|
||||
keyBuffer[DualSenseKeyCodes::R1] = ((data & 0x02) != 0) ? 255 : 0;
|
||||
//keyBuffer[DualSenseKeyCodes::L2] = ((data & 0x04) != 0) ? 255 : 0; // active when L2 is pressed
|
||||
|
@ -889,7 +784,7 @@ std::unordered_map<u64, u16> dualsense_pad_handler::get_button_values(const std:
|
|||
keyBuffer[DualSenseKeyCodes::L3] = ((data & 0x40) != 0) ? 255 : 0;
|
||||
keyBuffer[DualSenseKeyCodes::R3] = ((data & 0x80) != 0) ? 255 : 0;
|
||||
|
||||
data = buf[9];
|
||||
data = buf[is_simple_mode ? 6 : 9];
|
||||
keyBuffer[DualSenseKeyCodes::PSButton] = ((data & 0x01) != 0) ? 255 : 0;
|
||||
keyBuffer[DualSenseKeyCodes::TouchPad] = ((data & 0x02) != 0) ? 255 : 0;
|
||||
keyBuffer[DualSenseKeyCodes::Mic] = ((data & 0x04) != 0) ? 255 : 0;
|
||||
|
|
|
@ -198,7 +198,7 @@ void hid_pad_handler<Device>::update_devices()
|
|||
}
|
||||
else
|
||||
{
|
||||
hid_log.warning("%s adding device: vid=N/A, pid=N/A, path='%s'", m_type, path);
|
||||
hid_log.warning("%s adding device: vid=N/A, pid=N/A, path='%s', error='%s'", m_type, path, hid_error(dev));
|
||||
}
|
||||
|
||||
check_add_device(dev, path, m_enumerated_serials[path]);
|
||||
|
|
Loading…
Add table
Reference in a new issue