diff options
Diffstat (limited to 'src/input_common')
| -rw-r--r-- | src/input_common/drivers/joycon.cpp | 4 | ||||
| -rw-r--r-- | src/input_common/drivers/mouse.cpp | 27 | ||||
| -rw-r--r-- | src/input_common/drivers/virtual_amiibo.h | 2 | ||||
| -rw-r--r-- | src/input_common/helpers/joycon_driver.cpp | 2 | ||||
| -rw-r--r-- | src/input_common/helpers/joycon_driver.h | 2 | ||||
| -rw-r--r-- | src/input_common/helpers/joycon_protocol/joycon_types.h | 4 | ||||
| -rw-r--r-- | src/input_common/helpers/joycon_protocol/poller.cpp | 72 | ||||
| -rw-r--r-- | src/input_common/helpers/joycon_protocol/poller.h | 8 | ||||
| -rw-r--r-- | src/input_common/input_mapping.cpp | 1 | 
9 files changed, 66 insertions, 56 deletions
| diff --git a/src/input_common/drivers/joycon.cpp b/src/input_common/drivers/joycon.cpp index b4cd39a20..8b57ebe07 100644 --- a/src/input_common/drivers/joycon.cpp +++ b/src/input_common/drivers/joycon.cpp @@ -307,8 +307,8 @@ Common::Input::DriverResult Joycons::SetPollingMode(const PadIdentifier& identif      switch (polling_mode) {      case Common::Input::PollingMode::Active:          return static_cast<Common::Input::DriverResult>(handle->SetActiveMode()); -    case Common::Input::PollingMode::Pasive: -        return static_cast<Common::Input::DriverResult>(handle->SetPasiveMode()); +    case Common::Input::PollingMode::Passive: +        return static_cast<Common::Input::DriverResult>(handle->SetPassiveMode());      case Common::Input::PollingMode::IR:          return static_cast<Common::Input::DriverResult>(handle->SetIrMode());      case Common::Input::PollingMode::NFC: diff --git a/src/input_common/drivers/mouse.cpp b/src/input_common/drivers/mouse.cpp index 8b7f9aee9..94e92c37d 100644 --- a/src/input_common/drivers/mouse.cpp +++ b/src/input_common/drivers/mouse.cpp @@ -3,6 +3,7 @@  #include <thread>  #include <fmt/format.h> +#include <math.h>  #include "common/param_package.h"  #include "common/settings.h" @@ -11,8 +12,9 @@  namespace InputCommon {  constexpr int update_time = 10; -constexpr float default_stick_sensitivity = 0.022f; -constexpr float default_motion_sensitivity = 0.008f; +constexpr float default_stick_sensitivity = 0.0044f; +constexpr float default_motion_sensitivity = 0.0003f; +constexpr float maximum_rotation_speed = 2.0f;  constexpr int mouse_axis_x = 0;  constexpr int mouse_axis_y = 1;  constexpr int wheel_axis_x = 2; @@ -99,11 +101,13 @@ void Mouse::UpdateMotionInput() {      const float sensitivity =          Settings::values.mouse_panning_sensitivity.GetValue() * default_motion_sensitivity; -    // Slow movement by 7% -    if (Settings::values.mouse_panning) { -        last_motion_change *= 0.93f; -    } else { -        last_motion_change.z *= 0.93f; +    const float rotation_velocity = std::sqrt(last_motion_change.x * last_motion_change.x + +                                              last_motion_change.y * last_motion_change.y); + +    if (rotation_velocity > maximum_rotation_speed / sensitivity) { +        const float multiplier = maximum_rotation_speed / rotation_velocity / sensitivity; +        last_motion_change.x = last_motion_change.x * multiplier; +        last_motion_change.y = last_motion_change.y * multiplier;      }      const BasicMotion motion_data{ @@ -116,6 +120,12 @@ void Mouse::UpdateMotionInput() {          .delta_timestamp = update_time * 1000,      }; +    if (Settings::values.mouse_panning) { +        last_motion_change.x = 0; +        last_motion_change.y = 0; +    } +    last_motion_change.z = 0; +      SetMotion(motion_identifier, 0, motion_data);  } @@ -125,7 +135,7 @@ void Mouse::Move(int x, int y, int center_x, int center_y) {          auto mouse_change =              (Common::MakeVec(x, y) - Common::MakeVec(center_x, center_y)).Cast<float>(); -        Common::Vec3<float> motion_change{-mouse_change.y, -mouse_change.x, last_motion_change.z}; +        last_motion_change += {-mouse_change.y, -mouse_change.x, last_motion_change.z};          const auto move_distance = mouse_change.Length();          if (move_distance == 0) { @@ -141,7 +151,6 @@ void Mouse::Move(int x, int y, int center_x, int center_y) {          // Average mouse movements          last_mouse_change = (last_mouse_change * 0.91f) + (mouse_change * 0.09f); -        last_motion_change = (last_motion_change * 0.69f) + (motion_change * 0.31f);          const auto last_move_distance = last_mouse_change.Length(); diff --git a/src/input_common/drivers/virtual_amiibo.h b/src/input_common/drivers/virtual_amiibo.h index 13cacfc0a..488d00b31 100644 --- a/src/input_common/drivers/virtual_amiibo.h +++ b/src/input_common/drivers/virtual_amiibo.h @@ -60,6 +60,6 @@ private:      std::string file_path{};      State state{State::Initialized};      std::vector<u8> nfc_data; -    Common::Input::PollingMode polling_mode{Common::Input::PollingMode::Pasive}; +    Common::Input::PollingMode polling_mode{Common::Input::PollingMode::Passive};  };  } // namespace InputCommon diff --git a/src/input_common/helpers/joycon_driver.cpp b/src/input_common/helpers/joycon_driver.cpp index e65b6b845..78cc5893c 100644 --- a/src/input_common/helpers/joycon_driver.cpp +++ b/src/input_common/helpers/joycon_driver.cpp @@ -410,7 +410,7 @@ DriverResult JoyconDriver::SetIrsConfig(IrsMode mode_, IrsResolution format_) {      return result;  } -DriverResult JoyconDriver::SetPasiveMode() { +DriverResult JoyconDriver::SetPassiveMode() {      std::scoped_lock lock{mutex};      motion_enabled = false;      hidbus_enabled = false; diff --git a/src/input_common/helpers/joycon_driver.h b/src/input_common/helpers/joycon_driver.h index c1e189fa5..b52a13ecf 100644 --- a/src/input_common/helpers/joycon_driver.h +++ b/src/input_common/helpers/joycon_driver.h @@ -44,7 +44,7 @@ public:      DriverResult SetVibration(const VibrationValue& vibration);      DriverResult SetLedConfig(u8 led_pattern);      DriverResult SetIrsConfig(IrsMode mode_, IrsResolution format_); -    DriverResult SetPasiveMode(); +    DriverResult SetPassiveMode();      DriverResult SetActiveMode();      DriverResult SetIrMode();      DriverResult SetNfcMode(); diff --git a/src/input_common/helpers/joycon_protocol/joycon_types.h b/src/input_common/helpers/joycon_protocol/joycon_types.h index 2e50a99a8..dcac0e422 100644 --- a/src/input_common/helpers/joycon_protocol/joycon_types.h +++ b/src/input_common/helpers/joycon_protocol/joycon_types.h @@ -78,7 +78,7 @@ enum class PadButton : u32 {      Capture = 0x200000,  }; -enum class PasivePadButton : u32 { +enum class PassivePadButton : u32 {      Down_A = 0x0001,      Right_X = 0x0002,      Left_B = 0x0004, @@ -95,7 +95,7 @@ enum class PasivePadButton : u32 {      ZL_ZR = 0x8000,  }; -enum class PasivePadStick : u8 { +enum class PassivePadStick : u8 {      Right = 0x00,      RightDown = 0x01,      Down = 0x02, diff --git a/src/input_common/helpers/joycon_protocol/poller.cpp b/src/input_common/helpers/joycon_protocol/poller.cpp index ab48352b8..dca797f7a 100644 --- a/src/input_common/helpers/joycon_protocol/poller.cpp +++ b/src/input_common/helpers/joycon_protocol/poller.cpp @@ -48,13 +48,13 @@ void JoyconPoller::ReadPassiveMode(std::span<u8> buffer) {      switch (device_type) {      case ControllerType::Left: -        UpdatePasiveLeftPadInput(data); +        UpdatePassiveLeftPadInput(data);          break;      case ControllerType::Right: -        UpdatePasiveRightPadInput(data); +        UpdatePassiveRightPadInput(data);          break;      case ControllerType::Pro: -        UpdatePasiveProPadInput(data); +        UpdatePassiveProPadInput(data);          break;      default:          break; @@ -210,12 +210,12 @@ void JoyconPoller::UpdateActiveProPadInput(const InputReportActive& input,      }  } -void JoyconPoller::UpdatePasiveLeftPadInput(const InputReportPassive& input) { -    static constexpr std::array<PasivePadButton, 11> left_buttons{ -        PasivePadButton::Down_A,  PasivePadButton::Right_X, PasivePadButton::Left_B, -        PasivePadButton::Up_Y,    PasivePadButton::SL,      PasivePadButton::SR, -        PasivePadButton::L_R,     PasivePadButton::ZL_ZR,   PasivePadButton::Minus, -        PasivePadButton::Capture, PasivePadButton::StickL, +void JoyconPoller::UpdatePassiveLeftPadInput(const InputReportPassive& input) { +    static constexpr std::array<PassivePadButton, 11> left_buttons{ +        PassivePadButton::Down_A,  PassivePadButton::Right_X, PassivePadButton::Left_B, +        PassivePadButton::Up_Y,    PassivePadButton::SL,      PassivePadButton::SR, +        PassivePadButton::L_R,     PassivePadButton::ZL_ZR,   PassivePadButton::Minus, +        PassivePadButton::Capture, PassivePadButton::StickL,      };      for (auto left_button : left_buttons) { @@ -225,17 +225,17 @@ void JoyconPoller::UpdatePasiveLeftPadInput(const InputReportPassive& input) {      }      const auto [left_axis_x, left_axis_y] = -        GetPassiveAxisValue(static_cast<PasivePadStick>(input.stick_state)); +        GetPassiveAxisValue(static_cast<PassivePadStick>(input.stick_state));      callbacks.on_stick_data(static_cast<int>(PadAxes::LeftStickX), left_axis_x);      callbacks.on_stick_data(static_cast<int>(PadAxes::LeftStickY), left_axis_y);  } -void JoyconPoller::UpdatePasiveRightPadInput(const InputReportPassive& input) { -    static constexpr std::array<PasivePadButton, 11> right_buttons{ -        PasivePadButton::Down_A, PasivePadButton::Right_X, PasivePadButton::Left_B, -        PasivePadButton::Up_Y,   PasivePadButton::SL,      PasivePadButton::SR, -        PasivePadButton::L_R,    PasivePadButton::ZL_ZR,   PasivePadButton::Plus, -        PasivePadButton::Home,   PasivePadButton::StickR, +void JoyconPoller::UpdatePassiveRightPadInput(const InputReportPassive& input) { +    static constexpr std::array<PassivePadButton, 11> right_buttons{ +        PassivePadButton::Down_A, PassivePadButton::Right_X, PassivePadButton::Left_B, +        PassivePadButton::Up_Y,   PassivePadButton::SL,      PassivePadButton::SR, +        PassivePadButton::L_R,    PassivePadButton::ZL_ZR,   PassivePadButton::Plus, +        PassivePadButton::Home,   PassivePadButton::StickR,      };      for (auto right_button : right_buttons) { @@ -245,18 +245,18 @@ void JoyconPoller::UpdatePasiveRightPadInput(const InputReportPassive& input) {      }      const auto [right_axis_x, right_axis_y] = -        GetPassiveAxisValue(static_cast<PasivePadStick>(input.stick_state)); +        GetPassiveAxisValue(static_cast<PassivePadStick>(input.stick_state));      callbacks.on_stick_data(static_cast<int>(PadAxes::RightStickX), right_axis_x);      callbacks.on_stick_data(static_cast<int>(PadAxes::RightStickY), right_axis_y);  } -void JoyconPoller::UpdatePasiveProPadInput(const InputReportPassive& input) { -    static constexpr std::array<PasivePadButton, 14> pro_buttons{ -        PasivePadButton::Down_A, PasivePadButton::Right_X, PasivePadButton::Left_B, -        PasivePadButton::Up_Y,   PasivePadButton::SL,      PasivePadButton::SR, -        PasivePadButton::L_R,    PasivePadButton::ZL_ZR,   PasivePadButton::Minus, -        PasivePadButton::Plus,   PasivePadButton::Capture, PasivePadButton::Home, -        PasivePadButton::StickL, PasivePadButton::StickR, +void JoyconPoller::UpdatePassiveProPadInput(const InputReportPassive& input) { +    static constexpr std::array<PassivePadButton, 14> pro_buttons{ +        PassivePadButton::Down_A, PassivePadButton::Right_X, PassivePadButton::Left_B, +        PassivePadButton::Up_Y,   PassivePadButton::SL,      PassivePadButton::SR, +        PassivePadButton::L_R,    PassivePadButton::ZL_ZR,   PassivePadButton::Minus, +        PassivePadButton::Plus,   PassivePadButton::Capture, PassivePadButton::Home, +        PassivePadButton::StickL, PassivePadButton::StickR,      };      for (auto pro_button : pro_buttons) { @@ -266,9 +266,9 @@ void JoyconPoller::UpdatePasiveProPadInput(const InputReportPassive& input) {      }      const auto [left_axis_x, left_axis_y] = -        GetPassiveAxisValue(static_cast<PasivePadStick>(input.stick_state && 0xf)); +        GetPassiveAxisValue(static_cast<PassivePadStick>(input.stick_state & 0xf));      const auto [right_axis_x, right_axis_y] = -        GetPassiveAxisValue(static_cast<PasivePadStick>(input.stick_state >> 4)); +        GetPassiveAxisValue(static_cast<PassivePadStick>(input.stick_state >> 4));      callbacks.on_stick_data(static_cast<int>(PadAxes::LeftStickX), left_axis_x);      callbacks.on_stick_data(static_cast<int>(PadAxes::LeftStickY), left_axis_y);      callbacks.on_stick_data(static_cast<int>(PadAxes::RightStickX), right_axis_x); @@ -283,25 +283,25 @@ f32 JoyconPoller::GetAxisValue(u16 raw_value, Joycon::JoyStickAxisCalibration ca      return value / calibration.min;  } -std::pair<f32, f32> JoyconPoller::GetPassiveAxisValue(PasivePadStick raw_value) const { +std::pair<f32, f32> JoyconPoller::GetPassiveAxisValue(PassivePadStick raw_value) const {      switch (raw_value) { -    case PasivePadStick::Right: +    case PassivePadStick::Right:          return {1.0f, 0.0f}; -    case PasivePadStick::RightDown: +    case PassivePadStick::RightDown:          return {1.0f, -1.0f}; -    case PasivePadStick::Down: +    case PassivePadStick::Down:          return {0.0f, -1.0f}; -    case PasivePadStick::DownLeft: +    case PassivePadStick::DownLeft:          return {-1.0f, -1.0f}; -    case PasivePadStick::Left: +    case PassivePadStick::Left:          return {-1.0f, 0.0f}; -    case PasivePadStick::LeftUp: +    case PassivePadStick::LeftUp:          return {-1.0f, 1.0f}; -    case PasivePadStick::Up: +    case PassivePadStick::Up:          return {0.0f, 1.0f}; -    case PasivePadStick::UpRight: +    case PassivePadStick::UpRight:          return {1.0f, 1.0f}; -    case PasivePadStick::Neutral: +    case PassivePadStick::Neutral:      default:          return {0.0f, 0.0f};      } diff --git a/src/input_common/helpers/joycon_protocol/poller.h b/src/input_common/helpers/joycon_protocol/poller.h index 5c897f070..0fa72c6db 100644 --- a/src/input_common/helpers/joycon_protocol/poller.h +++ b/src/input_common/helpers/joycon_protocol/poller.h @@ -46,15 +46,15 @@ private:                                     const MotionStatus& motion_status);      void UpdateActiveProPadInput(const InputReportActive& input, const MotionStatus& motion_status); -    void UpdatePasiveLeftPadInput(const InputReportPassive& buffer); -    void UpdatePasiveRightPadInput(const InputReportPassive& buffer); -    void UpdatePasiveProPadInput(const InputReportPassive& buffer); +    void UpdatePassiveLeftPadInput(const InputReportPassive& buffer); +    void UpdatePassiveRightPadInput(const InputReportPassive& buffer); +    void UpdatePassiveProPadInput(const InputReportPassive& buffer);      /// Returns a calibrated joystick axis from raw axis data      f32 GetAxisValue(u16 raw_value, JoyStickAxisCalibration calibration) const;      /// Returns a digital joystick axis from passive axis data -    std::pair<f32, f32> GetPassiveAxisValue(PasivePadStick raw_value) const; +    std::pair<f32, f32> GetPassiveAxisValue(PassivePadStick raw_value) const;      /// Returns a calibrated accelerometer axis from raw motion data      f32 GetAccelerometerValue(s16 raw, const MotionSensorCalibration& cal, diff --git a/src/input_common/input_mapping.cpp b/src/input_common/input_mapping.cpp index 2ff480ff9..9361b00c5 100644 --- a/src/input_common/input_mapping.cpp +++ b/src/input_common/input_mapping.cpp @@ -146,6 +146,7 @@ void MappingFactory::RegisterMotion(const MappingData& data) {      if (data.engine == "mouse") {          new_input.Set("motion", 0);          new_input.Set("pad", 1); +        new_input.Set("threshold", 0.001f);          input_queue.Push(new_input);          return;      } | 
