|
|
|
@ -884,18 +884,42 @@ bool EmulatedController::SetVibration(std::size_t device_index, VibrationValue v |
|
|
|
} |
|
|
|
|
|
|
|
bool EmulatedController::TestVibration(std::size_t device_index) { |
|
|
|
static constexpr VibrationValue test_vibration = { |
|
|
|
if (device_index >= output_devices.size()) { |
|
|
|
return false; |
|
|
|
} |
|
|
|
if (!output_devices[device_index]) { |
|
|
|
return false; |
|
|
|
} |
|
|
|
|
|
|
|
const auto player_index = NpadIdTypeToIndex(npad_id_type); |
|
|
|
const auto& player = Settings::values.players.GetValue()[player_index]; |
|
|
|
|
|
|
|
if (!player.vibration_enabled) { |
|
|
|
return false; |
|
|
|
} |
|
|
|
|
|
|
|
const Common::Input::VibrationStatus test_vibration = { |
|
|
|
.low_amplitude = 0.001f, |
|
|
|
.low_frequency = 160.0f, |
|
|
|
.low_frequency = DEFAULT_VIBRATION_VALUE.low_frequency, |
|
|
|
.high_amplitude = 0.001f, |
|
|
|
.high_frequency = 320.0f, |
|
|
|
.high_frequency = DEFAULT_VIBRATION_VALUE.high_frequency, |
|
|
|
.type = Common::Input::VibrationAmplificationType::Test, |
|
|
|
}; |
|
|
|
|
|
|
|
const Common::Input::VibrationStatus zero_vibration = { |
|
|
|
.low_amplitude = DEFAULT_VIBRATION_VALUE.low_amplitude, |
|
|
|
.low_frequency = DEFAULT_VIBRATION_VALUE.low_frequency, |
|
|
|
.high_amplitude = DEFAULT_VIBRATION_VALUE.high_amplitude, |
|
|
|
.high_frequency = DEFAULT_VIBRATION_VALUE.high_frequency, |
|
|
|
.type = Common::Input::VibrationAmplificationType::Test, |
|
|
|
}; |
|
|
|
|
|
|
|
// Send a slight vibration to test for rumble support
|
|
|
|
SetVibration(device_index, test_vibration); |
|
|
|
output_devices[device_index]->SetVibration(test_vibration); |
|
|
|
|
|
|
|
// Stop any vibration and return the result
|
|
|
|
return SetVibration(device_index, DEFAULT_VIBRATION_VALUE); |
|
|
|
return output_devices[device_index]->SetVibration(zero_vibration) == |
|
|
|
Common::Input::VibrationError::None; |
|
|
|
} |
|
|
|
|
|
|
|
bool EmulatedController::SetPollingMode(Common::Input::PollingMode polling_mode) { |
|
|
|
|