mirror of
				https://git.zaroz.cloud/nintendo-back-up/yuzu/yuzu-mainline.git
				synced 2025-03-21 01:53:15 +00:00 
			
		
		
		
	Remove RealMotionDevice
This commit is contained in:
		
							parent
							
								
									8e18b61972
								
							
						
					
					
						commit
						0774b17846
					
				@ -119,25 +119,7 @@ using ButtonDevice = InputDevice<bool>;
 | 
				
			|||||||
using AnalogDevice = InputDevice<std::tuple<float, float>>;
 | 
					using AnalogDevice = InputDevice<std::tuple<float, float>>;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * A motion device is an input device that returns a tuple of accelerometer state vector and
 | 
					 * A motion status is an object that returns a tuple of accelerometer state vector,
 | 
				
			||||||
 * gyroscope state vector.
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * For both vectors:
 | 
					 | 
				
			||||||
 *   x+ is the same direction as LEFT on D-pad.
 | 
					 | 
				
			||||||
 *   y+ is normal to the touch screen, pointing outward.
 | 
					 | 
				
			||||||
 *   z+ is the same direction as UP on D-pad.
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * For accelerometer state vector
 | 
					 | 
				
			||||||
 *   Units: g (gravitational acceleration)
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * For gyroscope state vector:
 | 
					 | 
				
			||||||
 *   Orientation is determined by right-hand rule.
 | 
					 | 
				
			||||||
 *   Units: deg/sec
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
using MotionDevice = InputDevice<std::tuple<Common::Vec3<float>, Common::Vec3<float>>>;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/**
 | 
					 | 
				
			||||||
 * A real motion device is an input device that returns a tuple of accelerometer state vector,
 | 
					 | 
				
			||||||
 * gyroscope state vector, rotation state vector and orientation state matrix.
 | 
					 * gyroscope state vector, rotation state vector and orientation state matrix.
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * For both vectors:
 | 
					 * For both vectors:
 | 
				
			||||||
@ -160,8 +142,13 @@ using MotionDevice = InputDevice<std::tuple<Common::Vec3<float>, Common::Vec3<fl
 | 
				
			|||||||
 *   y vector
 | 
					 *   y vector
 | 
				
			||||||
 *   z vector
 | 
					 *   z vector
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
using RealMotionDevice = InputDevice<std::tuple<Common::Vec3<float>, Common::Vec3<float>,
 | 
					using MotionStatus = std::tuple<Common::Vec3<float>, Common::Vec3<float>, Common::Vec3<float>,
 | 
				
			||||||
                                                Common::Vec3<float>, std::array<Common::Vec3f, 3>>>;
 | 
					                                std::array<Common::Vec3f, 3>>;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * A motion device is an input device that returns a motion status object
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					using MotionDevice = InputDevice<MotionStatus>;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * A touch device is an input device that returns a tuple of two floats and a bool. The floats are
 | 
					 * A touch device is an input device that returns a tuple of two floats and a bool. The floats are
 | 
				
			||||||
 | 
				
			|||||||
@ -251,7 +251,7 @@ void Controller_NPad::OnLoadInputDevices() {
 | 
				
			|||||||
                       sticks[i].begin(), Input::CreateDevice<Input::AnalogDevice>);
 | 
					                       sticks[i].begin(), Input::CreateDevice<Input::AnalogDevice>);
 | 
				
			||||||
        std::transform(players[i].motions.begin() + Settings::NativeMotion::MOTION_HID_BEGIN,
 | 
					        std::transform(players[i].motions.begin() + Settings::NativeMotion::MOTION_HID_BEGIN,
 | 
				
			||||||
                       players[i].motions.begin() + Settings::NativeMotion::MOTION_HID_END,
 | 
					                       players[i].motions.begin() + Settings::NativeMotion::MOTION_HID_END,
 | 
				
			||||||
                       motions[i].begin(), Input::CreateDevice<Input::RealMotionDevice>);
 | 
					                       motions[i].begin(), Input::CreateDevice<Input::MotionDevice>);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -397,7 +397,8 @@ void Controller_NPad::OnUpdate(const Core::Timing::CoreTiming& core_timing, u8*
 | 
				
			|||||||
                    std::tie(motion_devices[e].accel, motion_devices[e].gyro,
 | 
					                    std::tie(motion_devices[e].accel, motion_devices[e].gyro,
 | 
				
			||||||
                             motion_devices[e].rotation, motion_devices[e].orientation) =
 | 
					                             motion_devices[e].rotation, motion_devices[e].orientation) =
 | 
				
			||||||
                        device->GetStatus();
 | 
					                        device->GetStatus();
 | 
				
			||||||
                    sixaxis_at_rest = sixaxis_at_rest && motion_devices[e].gyro.Length2() < 1.0f;
 | 
					                    sixaxis_at_rest =
 | 
				
			||||||
 | 
					                        sixaxis_at_rest && motion_devices[e].gyro.Length2() < 0.00005f;
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
				
			|||||||
@ -299,9 +299,9 @@ private:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    struct MotionDevice {
 | 
					    struct MotionDevice {
 | 
				
			||||||
        Common::Vec3f accel;
 | 
					        Common::Vec3f accel;
 | 
				
			||||||
        Common::Vec3f gyro{};
 | 
					        Common::Vec3f gyro;
 | 
				
			||||||
        Common::Vec3f rotation;
 | 
					        Common::Vec3f rotation;
 | 
				
			||||||
        std::array<Common::Vec3f, 3> orientation{};
 | 
					        std::array<Common::Vec3f, 3> orientation;
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    struct NPadEntry {
 | 
					    struct NPadEntry {
 | 
				
			||||||
@ -358,9 +358,9 @@ private:
 | 
				
			|||||||
    using StickArray = std::array<
 | 
					    using StickArray = std::array<
 | 
				
			||||||
        std::array<std::unique_ptr<Input::AnalogDevice>, Settings::NativeAnalog::NUM_STICKS_HID>,
 | 
					        std::array<std::unique_ptr<Input::AnalogDevice>, Settings::NativeAnalog::NUM_STICKS_HID>,
 | 
				
			||||||
        10>;
 | 
					        10>;
 | 
				
			||||||
    using MotionArray = std::array<std::array<std::unique_ptr<Input::RealMotionDevice>,
 | 
					    using MotionArray = std::array<
 | 
				
			||||||
                                              Settings::NativeMotion::NUM_MOTION_HID>,
 | 
					        std::array<std::unique_ptr<Input::MotionDevice>, Settings::NativeMotion::NUM_MOTION_HID>,
 | 
				
			||||||
                                   10>;
 | 
					        10>;
 | 
				
			||||||
    ButtonArray buttons;
 | 
					    ButtonArray buttons;
 | 
				
			||||||
    StickArray sticks;
 | 
					    StickArray sticks;
 | 
				
			||||||
    MotionArray motions;
 | 
					    MotionArray motions;
 | 
				
			||||||
 | 
				
			|||||||
@ -56,7 +56,7 @@ public:
 | 
				
			|||||||
        is_tilting = false;
 | 
					        is_tilting = false;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    std::tuple<Common::Vec3<float>, Common::Vec3<float>> GetStatus() {
 | 
					    Input::MotionStatus GetStatus() {
 | 
				
			||||||
        std::lock_guard guard{status_mutex};
 | 
					        std::lock_guard guard{status_mutex};
 | 
				
			||||||
        return status;
 | 
					        return status;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@ -76,7 +76,7 @@ private:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    Common::Event shutdown_event;
 | 
					    Common::Event shutdown_event;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    std::tuple<Common::Vec3<float>, Common::Vec3<float>> status;
 | 
					    Input::MotionStatus status;
 | 
				
			||||||
    std::mutex status_mutex;
 | 
					    std::mutex status_mutex;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Note: always keep the thread declaration at the end so that other objects are initialized
 | 
					    // Note: always keep the thread declaration at the end so that other objects are initialized
 | 
				
			||||||
@ -113,10 +113,19 @@ private:
 | 
				
			|||||||
            gravity = QuaternionRotate(inv_q, gravity);
 | 
					            gravity = QuaternionRotate(inv_q, gravity);
 | 
				
			||||||
            angular_rate = QuaternionRotate(inv_q, angular_rate);
 | 
					            angular_rate = QuaternionRotate(inv_q, angular_rate);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // TODO: Calculate the correct rotation vector and orientation matrix
 | 
				
			||||||
 | 
					            const auto matrix4x4 = q.ToMatrix();
 | 
				
			||||||
 | 
					            const auto rotation = Common::MakeVec(0.0f, 0.0f, 0.0f);
 | 
				
			||||||
 | 
					            const std::array orientation{
 | 
				
			||||||
 | 
					                Common::Vec3f(matrix4x4[0], matrix4x4[1], -matrix4x4[2]),
 | 
				
			||||||
 | 
					                Common::Vec3f(matrix4x4[4], matrix4x4[5], -matrix4x4[6]),
 | 
				
			||||||
 | 
					                Common::Vec3f(-matrix4x4[8], -matrix4x4[9], matrix4x4[10]),
 | 
				
			||||||
 | 
					            };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            // Update the sensor state
 | 
					            // Update the sensor state
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                std::lock_guard guard{status_mutex};
 | 
					                std::lock_guard guard{status_mutex};
 | 
				
			||||||
                status = std::make_tuple(gravity, angular_rate);
 | 
					                status = std::make_tuple(gravity, angular_rate, rotation, orientation);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@ -131,7 +140,7 @@ public:
 | 
				
			|||||||
        device = std::make_shared<MotionEmuDevice>(update_millisecond, sensitivity);
 | 
					        device = std::make_shared<MotionEmuDevice>(update_millisecond, sensitivity);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    std::tuple<Common::Vec3<float>, Common::Vec3<float>> GetStatus() const override {
 | 
					    Input::MotionStatus GetStatus() const override {
 | 
				
			||||||
        return device->GetStatus();
 | 
					        return device->GetStatus();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -170,10 +170,18 @@ void Client::OnPadData(Response::PadData data) {
 | 
				
			|||||||
    // directions correspond to the ones of the Switch
 | 
					    // directions correspond to the ones of the Switch
 | 
				
			||||||
    Common::Vec3f accel = Common::MakeVec<float>(data.accel.x, data.accel.y, data.accel.z);
 | 
					    Common::Vec3f accel = Common::MakeVec<float>(data.accel.x, data.accel.y, data.accel.z);
 | 
				
			||||||
    Common::Vec3f gyro = Common::MakeVec<float>(data.gyro.pitch, data.gyro.yaw, data.gyro.roll);
 | 
					    Common::Vec3f gyro = Common::MakeVec<float>(data.gyro.pitch, data.gyro.yaw, data.gyro.roll);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // TODO: Calculate the correct rotation vector and orientation matrix
 | 
				
			||||||
 | 
					    const auto rotation = Common::MakeVec(0.0f, 0.0f, 0.0f);
 | 
				
			||||||
 | 
					    const std::array orientation{
 | 
				
			||||||
 | 
					        Common::Vec3f(1.0f, 0.0f, 0.0f),
 | 
				
			||||||
 | 
					        Common::Vec3f(0.0f, 1.0f, 0.0f),
 | 
				
			||||||
 | 
					        Common::Vec3f(0.0f, 0.0f, 1.0f),
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        std::lock_guard guard(status->update_mutex);
 | 
					        std::lock_guard guard(status->update_mutex);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        status->motion_status = {accel, gyro};
 | 
					        status->motion_status = {accel, gyro, rotation, orientation};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // TODO: add a setting for "click" touch. Click touch refers to a device that differentiates
 | 
					        // TODO: add a setting for "click" touch. Click touch refers to a device that differentiates
 | 
				
			||||||
        // between a simple "tap" and a hard press that causes the touch screen to click.
 | 
					        // between a simple "tap" and a hard press that causes the touch screen to click.
 | 
				
			||||||
 | 
				
			|||||||
@ -14,6 +14,7 @@
 | 
				
			|||||||
#include "common/common_types.h"
 | 
					#include "common/common_types.h"
 | 
				
			||||||
#include "common/thread.h"
 | 
					#include "common/thread.h"
 | 
				
			||||||
#include "common/vector_math.h"
 | 
					#include "common/vector_math.h"
 | 
				
			||||||
 | 
					#include "core/frontend/input.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace InputCommon::CemuhookUDP {
 | 
					namespace InputCommon::CemuhookUDP {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -30,7 +31,7 @@ struct Version;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
struct DeviceStatus {
 | 
					struct DeviceStatus {
 | 
				
			||||||
    std::mutex update_mutex;
 | 
					    std::mutex update_mutex;
 | 
				
			||||||
    std::tuple<Common::Vec3<float>, Common::Vec3<float>> motion_status;
 | 
					    Input::MotionStatus motion_status;
 | 
				
			||||||
    std::tuple<float, float, bool> touch_status;
 | 
					    std::tuple<float, float, bool> touch_status;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // calibration data for scaling the device's touch area to 3ds
 | 
					    // calibration data for scaling the device's touch area to 3ds
 | 
				
			||||||
 | 
				
			|||||||
@ -29,7 +29,7 @@ private:
 | 
				
			|||||||
class UDPMotionDevice final : public Input::MotionDevice {
 | 
					class UDPMotionDevice final : public Input::MotionDevice {
 | 
				
			||||||
public:
 | 
					public:
 | 
				
			||||||
    explicit UDPMotionDevice(std::shared_ptr<DeviceStatus> status_) : status(std::move(status_)) {}
 | 
					    explicit UDPMotionDevice(std::shared_ptr<DeviceStatus> status_) : status(std::move(status_)) {}
 | 
				
			||||||
    std::tuple<Common::Vec3<float>, Common::Vec3<float>> GetStatus() const override {
 | 
					    Input::MotionStatus GetStatus() const override {
 | 
				
			||||||
        std::lock_guard guard(status->update_mutex);
 | 
					        std::lock_guard guard(status->update_mutex);
 | 
				
			||||||
        return status->motion_status;
 | 
					        return status->motion_status;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user