core: hid: Update motion on a better place

This commit is contained in:
german77 2023-05-07 16:38:41 -06:00
parent e58090c9c7
commit cf023aa8ec
5 changed files with 20 additions and 22 deletions

View file

@ -979,7 +979,6 @@ void EmulatedController::SetMotion(const Common::Input::CallbackStatus& callback
emulated.SetUserGyroThreshold(raw_status.gyro.x.properties.threshold); emulated.SetUserGyroThreshold(raw_status.gyro.x.properties.threshold);
emulated.UpdateRotation(raw_status.delta_timestamp); emulated.UpdateRotation(raw_status.delta_timestamp);
emulated.UpdateOrientation(raw_status.delta_timestamp); emulated.UpdateOrientation(raw_status.delta_timestamp);
force_update_motion = raw_status.force_update;
auto& motion = controller.motion_state[index]; auto& motion = controller.motion_state[index];
motion.accel = emulated.GetAcceleration(); motion.accel = emulated.GetAcceleration();
@ -1618,19 +1617,6 @@ NpadGcTriggerState EmulatedController::GetTriggers() const {
MotionState EmulatedController::GetMotions() const { MotionState EmulatedController::GetMotions() const {
std::unique_lock lock{mutex}; std::unique_lock lock{mutex};
// Some drivers like mouse motion need constant refreshing
if (force_update_motion) {
for (auto& device : motion_devices) {
if (!device) {
continue;
}
lock.unlock();
device->ForceUpdate();
lock.lock();
}
}
return controller.motion_state; return controller.motion_state;
} }
@ -1696,8 +1682,21 @@ void EmulatedController::DeleteCallback(int key) {
callback_list.erase(iterator); callback_list.erase(iterator);
} }
void EmulatedController::TurboButtonUpdate() { void EmulatedController::StatusUpdate() {
turbo_button_state = (turbo_button_state + 1) % (TURBO_BUTTON_DELAY * 2); turbo_button_state = (turbo_button_state + 1) % (TURBO_BUTTON_DELAY * 2);
// Some drivers like key motion need constant refreshing
for (std::size_t index = 0; index < motion_devices.size(); ++index) {
const auto& raw_status = controller.motion_values[index].raw_status;
auto& device = motion_devices[index];
if (!raw_status.force_update) {
continue;
}
if (!device) {
continue;
}
device->ForceUpdate();
}
} }
NpadButton EmulatedController::GetTurboButtonMask() const { NpadButton EmulatedController::GetTurboButtonMask() const {

View file

@ -415,8 +415,8 @@ public:
*/ */
void DeleteCallback(int key); void DeleteCallback(int key);
/// Swaps the state of the turbo buttons /// Swaps the state of the turbo buttons and updates motion input
void TurboButtonUpdate(); void StatusUpdate();
private: private:
/// creates input devices from params /// creates input devices from params
@ -528,7 +528,6 @@ private:
bool is_configuring{false}; bool is_configuring{false};
bool system_buttons_enabled{true}; bool system_buttons_enabled{true};
f32 motion_sensitivity{Core::HID::MotionInput::IsAtRestStandard}; f32 motion_sensitivity{Core::HID::MotionInput::IsAtRestStandard};
bool force_update_motion{false};
u32 turbo_button_state{0}; u32 turbo_button_state{0};
// Temporary values to avoid doing changes while the controller is in configuring mode // Temporary values to avoid doing changes while the controller is in configuring mode

View file

@ -86,7 +86,7 @@ Common::Input::MotionStatus TransformToMotion(const Common::Input::CallbackStatu
.range = 1.0f, .range = 1.0f,
.offset = 0.0f, .offset = 0.0f,
}; };
status.delta_timestamp = 5000; status.delta_timestamp = 1000;
status.force_update = true; status.force_update = true;
status.accel.x = { status.accel.x = {
.value = 0.0f, .value = 0.0f,

View file

@ -423,8 +423,8 @@ void Controller_NPad::RequestPadStateUpdate(Core::HID::NpadIdType npad_id) {
return; return;
} }
// This function is unique to yuzu for the turbo buttons to work properly // This function is unique to yuzu for the turbo buttons and motion to work properly
controller.device->TurboButtonUpdate(); controller.device->StatusUpdate();
auto& pad_entry = controller.npad_pad_state; auto& pad_entry = controller.npad_pad_state;
auto& trigger_entry = controller.npad_trigger_state; auto& trigger_entry = controller.npad_trigger_state;

View file

@ -667,7 +667,7 @@ public:
.raw_value = input_engine->GetAxis(identifier, axis_z), .raw_value = input_engine->GetAxis(identifier, axis_z),
.properties = properties_z, .properties = properties_z,
}; };
status.delta_timestamp = 5000; status.delta_timestamp = 1000;
status.force_update = true; status.force_update = true;
return status; return status;
} }