core: hid: Update motion on a better place
This commit is contained in:
		| @@ -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 { | ||||||
|   | |||||||
| @@ -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 | ||||||
|   | |||||||
| @@ -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, | ||||||
|   | |||||||
| @@ -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; | ||||||
|   | |||||||
| @@ -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; | ||||||
|     } |     } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user