From 0876a7d37e507b9087c0e1f99e23f5064ab53545 Mon Sep 17 00:00:00 2001 From: Megamouse Date: Wed, 10 Sep 2025 17:49:09 +0200 Subject: [PATCH] input: Memorize original small motor value for display purposes --- rpcs3/Emu/Cell/Modules/cellGem.cpp | 2 +- rpcs3/Emu/Cell/Modules/cellPad.cpp | 6 +++--- rpcs3/Emu/Io/PadHandler.cpp | 10 +++++----- rpcs3/Emu/Io/pad_config.cpp | 27 ++++++++++++-------------- rpcs3/Emu/Io/pad_config.h | 1 + rpcs3/Emu/Io/pad_types.h | 10 +++++----- rpcs3/Input/ds3_pad_handler.cpp | 4 ++-- rpcs3/Input/ds4_pad_handler.cpp | 4 ++-- rpcs3/Input/dualsense_pad_handler.cpp | 4 ++-- rpcs3/Input/evdev_joystick_handler.cpp | 8 ++++---- rpcs3/Input/keyboard_pad_handler.cpp | 4 ++-- rpcs3/Input/pad_thread.cpp | 10 +++++----- rpcs3/Input/pad_thread.h | 2 +- rpcs3/Input/ps_move_handler.cpp | 2 +- rpcs3/Input/sdl_pad_handler.cpp | 4 ++-- rpcs3/Input/xinput_pad_handler.cpp | 4 ++-- 16 files changed, 50 insertions(+), 52 deletions(-) diff --git a/rpcs3/Emu/Cell/Modules/cellGem.cpp b/rpcs3/Emu/Cell/Modules/cellGem.cpp index ba796be28e..9d39b3c7eb 100644 --- a/rpcs3/Emu/Cell/Modules/cellGem.cpp +++ b/rpcs3/Emu/Cell/Modules/cellGem.cpp @@ -3482,7 +3482,7 @@ error_code cellGemSetRumble(u32 gem_num, u8 rumble) { if (!binding.device || binding.device->player_id != pad_index) continue; - handler->SetRumble(pad_index, rumble, rumble > 0); + handler->SetRumble(pad_index, rumble, rumble); break; } } diff --git a/rpcs3/Emu/Cell/Modules/cellPad.cpp b/rpcs3/Emu/Cell/Modules/cellPad.cpp index 8d717ab87f..be9194fd84 100644 --- a/rpcs3/Emu/Cell/Modules/cellPad.cpp +++ b/rpcs3/Emu/Cell/Modules/cellPad.cpp @@ -128,8 +128,8 @@ void show_debug_overlay(const CellPadData& data, const Pad& pad, const pad_info& "on", data.len >= CELL_PAD_LEN_CHANGE_DEFAULT ? "on" : "off", (setting & CELL_PAD_SETTING_PRESS_ON) ? "on" : "off", data.len >= CELL_PAD_LEN_CHANGE_PRESS_ON ? "on" : "off", (setting & CELL_PAD_SETTING_SENSOR_ON) ? "on" : "off", data.len >= CELL_PAD_LEN_CHANGE_SENSOR_ON ? "on" : "off", - pad.m_vibrateMotors[0].m_value, pad.m_vibrateMotors[0].m_adjusted_value, - pad.m_vibrateMotors[1].m_value, pad.m_vibrateMotors[1].m_adjusted_value, + pad.m_vibrate_motors[0].value, pad.m_vibrate_motors[0].adjusted_value, + pad.m_vibrate_motors[1].value, pad.m_vibrate_motors[1].adjusted_value, pad.m_digital_1, d1, pad.m_digital_2, d2, pad.m_press_up, !!(d1 & CELL_PAD_CTRL_UP), data.button[CELL_PAD_BTN_OFFSET_PRESS_UP], @@ -905,7 +905,7 @@ error_code cellPadSetActDirect(u32 port_no, vm::ptr param) if (!(pad->m_device_capability & CELL_PAD_CAPABILITY_ACTUATOR)) return CELL_PAD_ERROR_UNSUPPORTED_GAMEPAD; - handler->SetRumble(port_no, param->motor[1], param->motor[0] > 0); + handler->SetRumble(port_no, param->motor[1], param->motor[0]); return CELL_OK; } diff --git a/rpcs3/Emu/Io/PadHandler.cpp b/rpcs3/Emu/Io/PadHandler.cpp index a37d6b69da..c4c636cfa7 100644 --- a/rpcs3/Emu/Io/PadHandler.cpp +++ b/rpcs3/Emu/Io/PadHandler.cpp @@ -538,8 +538,8 @@ bool PadHandlerBase::bindPadToDevice(std::shared_ptr pad) pad->m_sensors[2] = AnalogSensor(CELL_PAD_BTN_OFFSET_SENSOR_Z, 0, 0, 0, DEFAULT_MOTION_Z); pad->m_sensors[3] = AnalogSensor(CELL_PAD_BTN_OFFSET_SENSOR_G, 0, 0, 0, DEFAULT_MOTION_G); - pad->m_vibrateMotors[0] = VibrateMotor(true); - pad->m_vibrateMotors[1] = VibrateMotor(false); + pad->m_vibrate_motors[0] = VibrateMotor(true); + pad->m_vibrate_motors[1] = VibrateMotor(false); m_bindings.emplace_back(pad, pad_device, nullptr); @@ -759,10 +759,10 @@ void PadHandlerBase::process() if ((get_system_time() - pad->m_last_rumble_time_us) > 3'000'000) { - for (VibrateMotor& motor : pad->m_vibrateMotors) + for (VibrateMotor& motor : pad->m_vibrate_motors) { - motor.m_value = 0; - motor.m_adjusted_value = 0; + motor.value = 0; + motor.adjusted_value = 0; } pad->m_last_rumble_time_us = 0; diff --git a/rpcs3/Emu/Io/pad_config.cpp b/rpcs3/Emu/Io/pad_config.cpp index 8d1ec42953..614d972716 100644 --- a/rpcs3/Emu/Io/pad_config.cpp +++ b/rpcs3/Emu/Io/pad_config.cpp @@ -31,30 +31,27 @@ std::string cfg_pad::get_buttons(std::vector vec) return fmt::merge(vec, ","); } -u8 cfg_pad::get_large_motor_speed(std::array& motors) const +u8 cfg_pad::get_motor_speed(VibrateMotor& motor, f32 multiplier) const { - VibrateMotor& motor = motors[switch_vibration_motors ? 1 : 0]; - const f32 multiplier = multiplier_vibration_motor_large / 100.0f; + // If motor is small, use either 0 or 255. + const u8 value = motor.is_large_motor ? motor.value : (motor.value > 0 ? 255 : 0); // Ignore lower range. Scale remaining range to full range. - const f32 adjusted = PadHandlerBase::ScaledInput(motor.m_value, static_cast(vibration_threshold.get()), 255.0f, 0.0f, 255.0f); + const f32 adjusted = PadHandlerBase::ScaledInput(value, static_cast(vibration_threshold.get()), 255.0f, 0.0f, 255.0f); // Apply multiplier - motor.m_adjusted_value = static_cast(std::clamp(adjusted * multiplier, 0.0f, 255.0f)); - return motor.m_adjusted_value; + motor.adjusted_value = static_cast(std::clamp(adjusted * multiplier, 0.0f, 255.0f)); + return motor.adjusted_value; +} + +u8 cfg_pad::get_large_motor_speed(std::array& motors) const +{ + return get_motor_speed(motors[switch_vibration_motors ? 1 : 0], multiplier_vibration_motor_large / 100.0f); } u8 cfg_pad::get_small_motor_speed(std::array& motors) const { - VibrateMotor& motor = motors[switch_vibration_motors ? 0 : 1]; - const f32 multiplier = multiplier_vibration_motor_small / 100.0f; - - // Ignore lower range. Scale remaining range to full range. - const f32 adjusted = PadHandlerBase::ScaledInput(motor.m_value, static_cast(vibration_threshold.get()), 255.0f, 0.0f, 255.0f); - - // Apply multiplier - motor.m_adjusted_value = static_cast(std::clamp(adjusted * multiplier, 0.0f, 255.0f)); - return motor.m_adjusted_value; + return get_motor_speed(motors[switch_vibration_motors ? 0 : 1], multiplier_vibration_motor_small / 100.0f); } bool cfg_input::load(const std::string& title_id, const std::string& config_file, bool strict) diff --git a/rpcs3/Emu/Io/pad_config.h b/rpcs3/Emu/Io/pad_config.h index 7f5aa1081d..5f8ea18a74 100644 --- a/rpcs3/Emu/Io/pad_config.h +++ b/rpcs3/Emu/Io/pad_config.h @@ -28,6 +28,7 @@ struct cfg_pad final : cfg::node static std::vector get_buttons(const std::string& str); static std::string get_buttons(std::vector vec); + u8 get_motor_speed(VibrateMotor& motor, f32 multiplier) const; u8 get_large_motor_speed(std::array& motors) const; u8 get_small_motor_speed(std::array& motors) const; diff --git a/rpcs3/Emu/Io/pad_types.h b/rpcs3/Emu/Io/pad_types.h index 9a3ef1ff68..c903f2fae4 100644 --- a/rpcs3/Emu/Io/pad_types.h +++ b/rpcs3/Emu/Io/pad_types.h @@ -459,13 +459,13 @@ struct AnalogSensor struct VibrateMotor { - bool m_is_large_motor = false; - u8 m_value = 0; - u8 m_adjusted_value = 0; + bool is_large_motor = false; + u8 value = 0; + u8 adjusted_value = 0; VibrateMotor() {} VibrateMotor(bool is_large_motor) - : m_is_large_motor(is_large_motor) + : is_large_motor(is_large_motor) {} }; @@ -546,7 +546,7 @@ struct Pad std::vector