From 1bd9549e4509949925ef927f71b3ad27e472e441 Mon Sep 17 00:00:00 2001 From: Megamouse Date: Mon, 12 Jun 2023 01:05:31 +0200 Subject: [PATCH] input: merge some duplicate code --- rpcs3/Input/dualsense_pad_handler.cpp | 123 ++------------------------ rpcs3/Input/hid_pad_handler.cpp | 2 +- 2 files changed, 10 insertions(+), 115 deletions(-) diff --git a/rpcs3/Input/dualsense_pad_handler.cpp b/rpcs3/Input/dualsense_pad_handler.cpp index 88657af93d..68d9a565fd 100644 --- a/rpcs3/Input/dualsense_pad_handler.cpp +++ b/rpcs3/Input/dualsense_pad_handler.cpp @@ -181,8 +181,6 @@ void dualsense_pad_handler::check_add_device(hid_device* hidDevice, std::string_ return; } - std::string serial; - std::array 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 dualsense_pad_handler::get_button_values(const std: const std::array& 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 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 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 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; diff --git a/rpcs3/Input/hid_pad_handler.cpp b/rpcs3/Input/hid_pad_handler.cpp index 7c7354dbbd..0ed9a06d3e 100644 --- a/rpcs3/Input/hid_pad_handler.cpp +++ b/rpcs3/Input/hid_pad_handler.cpp @@ -198,7 +198,7 @@ void hid_pad_handler::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]);