diff options
Diffstat (limited to 'src/input_common')
| -rw-r--r-- | src/input_common/motion_emu.cpp | 17 | ||||
| -rw-r--r-- | src/input_common/udp/client.cpp | 10 | ||||
| -rw-r--r-- | src/input_common/udp/client.h | 3 | ||||
| -rw-r--r-- | src/input_common/udp/udp.cpp | 2 |
4 files changed, 25 insertions, 7 deletions
diff --git a/src/input_common/motion_emu.cpp b/src/input_common/motion_emu.cpp index d4cdf76a3..69fd3c1d2 100644 --- a/src/input_common/motion_emu.cpp +++ b/src/input_common/motion_emu.cpp | |||
| @@ -56,7 +56,7 @@ public: | |||
| 56 | is_tilting = false; | 56 | is_tilting = false; |
| 57 | } | 57 | } |
| 58 | 58 | ||
| 59 | std::tuple<Common::Vec3<float>, Common::Vec3<float>> GetStatus() { | 59 | Input::MotionStatus GetStatus() { |
| 60 | std::lock_guard guard{status_mutex}; | 60 | std::lock_guard guard{status_mutex}; |
| 61 | return status; | 61 | return status; |
| 62 | } | 62 | } |
| @@ -76,7 +76,7 @@ private: | |||
| 76 | 76 | ||
| 77 | Common::Event shutdown_event; | 77 | Common::Event shutdown_event; |
| 78 | 78 | ||
| 79 | std::tuple<Common::Vec3<float>, Common::Vec3<float>> status; | 79 | Input::MotionStatus status; |
| 80 | std::mutex status_mutex; | 80 | std::mutex status_mutex; |
| 81 | 81 | ||
| 82 | // Note: always keep the thread declaration at the end so that other objects are initialized | 82 | // Note: always keep the thread declaration at the end so that other objects are initialized |
| @@ -113,10 +113,19 @@ private: | |||
| 113 | gravity = QuaternionRotate(inv_q, gravity); | 113 | gravity = QuaternionRotate(inv_q, gravity); |
| 114 | angular_rate = QuaternionRotate(inv_q, angular_rate); | 114 | angular_rate = QuaternionRotate(inv_q, angular_rate); |
| 115 | 115 | ||
| 116 | // TODO: Calculate the correct rotation vector and orientation matrix | ||
| 117 | const auto matrix4x4 = q.ToMatrix(); | ||
| 118 | const auto rotation = Common::MakeVec(0.0f, 0.0f, 0.0f); | ||
| 119 | const std::array orientation{ | ||
| 120 | Common::Vec3f(matrix4x4[0], matrix4x4[1], -matrix4x4[2]), | ||
| 121 | Common::Vec3f(matrix4x4[4], matrix4x4[5], -matrix4x4[6]), | ||
| 122 | Common::Vec3f(-matrix4x4[8], -matrix4x4[9], matrix4x4[10]), | ||
| 123 | }; | ||
| 124 | |||
| 116 | // Update the sensor state | 125 | // Update the sensor state |
| 117 | { | 126 | { |
| 118 | std::lock_guard guard{status_mutex}; | 127 | std::lock_guard guard{status_mutex}; |
| 119 | status = std::make_tuple(gravity, angular_rate); | 128 | status = std::make_tuple(gravity, angular_rate, rotation, orientation); |
| 120 | } | 129 | } |
| 121 | } | 130 | } |
| 122 | } | 131 | } |
| @@ -131,7 +140,7 @@ public: | |||
| 131 | device = std::make_shared<MotionEmuDevice>(update_millisecond, sensitivity); | 140 | device = std::make_shared<MotionEmuDevice>(update_millisecond, sensitivity); |
| 132 | } | 141 | } |
| 133 | 142 | ||
| 134 | std::tuple<Common::Vec3<float>, Common::Vec3<float>> GetStatus() const override { | 143 | Input::MotionStatus GetStatus() const override { |
| 135 | return device->GetStatus(); | 144 | return device->GetStatus(); |
| 136 | } | 145 | } |
| 137 | 146 | ||
diff --git a/src/input_common/udp/client.cpp b/src/input_common/udp/client.cpp index 3f4eaf448..91e13482d 100644 --- a/src/input_common/udp/client.cpp +++ b/src/input_common/udp/client.cpp | |||
| @@ -170,10 +170,18 @@ void Client::OnPadData(Response::PadData data) { | |||
| 170 | // directions correspond to the ones of the Switch | 170 | // directions correspond to the ones of the Switch |
| 171 | Common::Vec3f accel = Common::MakeVec<float>(data.accel.x, data.accel.y, data.accel.z); | 171 | Common::Vec3f accel = Common::MakeVec<float>(data.accel.x, data.accel.y, data.accel.z); |
| 172 | Common::Vec3f gyro = Common::MakeVec<float>(data.gyro.pitch, data.gyro.yaw, data.gyro.roll); | 172 | Common::Vec3f gyro = Common::MakeVec<float>(data.gyro.pitch, data.gyro.yaw, data.gyro.roll); |
| 173 | |||
| 174 | // TODO: Calculate the correct rotation vector and orientation matrix | ||
| 175 | const auto rotation = Common::MakeVec(0.0f, 0.0f, 0.0f); | ||
| 176 | const std::array orientation{ | ||
| 177 | Common::Vec3f(1.0f, 0.0f, 0.0f), | ||
| 178 | Common::Vec3f(0.0f, 1.0f, 0.0f), | ||
| 179 | Common::Vec3f(0.0f, 0.0f, 1.0f), | ||
| 180 | }; | ||
| 173 | { | 181 | { |
| 174 | std::lock_guard guard(status->update_mutex); | 182 | std::lock_guard guard(status->update_mutex); |
| 175 | 183 | ||
| 176 | status->motion_status = {accel, gyro}; | 184 | status->motion_status = {accel, gyro, rotation, orientation}; |
| 177 | 185 | ||
| 178 | // TODO: add a setting for "click" touch. Click touch refers to a device that differentiates | 186 | // TODO: add a setting for "click" touch. Click touch refers to a device that differentiates |
| 179 | // between a simple "tap" and a hard press that causes the touch screen to click. | 187 | // between a simple "tap" and a hard press that causes the touch screen to click. |
diff --git a/src/input_common/udp/client.h b/src/input_common/udp/client.h index b8c654755..a73283ae8 100644 --- a/src/input_common/udp/client.h +++ b/src/input_common/udp/client.h | |||
| @@ -14,6 +14,7 @@ | |||
| 14 | #include "common/common_types.h" | 14 | #include "common/common_types.h" |
| 15 | #include "common/thread.h" | 15 | #include "common/thread.h" |
| 16 | #include "common/vector_math.h" | 16 | #include "common/vector_math.h" |
| 17 | #include "core/frontend/input.h" | ||
| 17 | 18 | ||
| 18 | namespace InputCommon::CemuhookUDP { | 19 | namespace InputCommon::CemuhookUDP { |
| 19 | 20 | ||
| @@ -30,7 +31,7 @@ struct Version; | |||
| 30 | 31 | ||
| 31 | struct DeviceStatus { | 32 | struct DeviceStatus { |
| 32 | std::mutex update_mutex; | 33 | std::mutex update_mutex; |
| 33 | std::tuple<Common::Vec3<float>, Common::Vec3<float>> motion_status; | 34 | Input::MotionStatus motion_status; |
| 34 | std::tuple<float, float, bool> touch_status; | 35 | std::tuple<float, float, bool> touch_status; |
| 35 | 36 | ||
| 36 | // calibration data for scaling the device's touch area to 3ds | 37 | // calibration data for scaling the device's touch area to 3ds |
diff --git a/src/input_common/udp/udp.cpp b/src/input_common/udp/udp.cpp index 4b347e47e..03bae5752 100644 --- a/src/input_common/udp/udp.cpp +++ b/src/input_common/udp/udp.cpp | |||
| @@ -29,7 +29,7 @@ private: | |||
| 29 | class UDPMotionDevice final : public Input::MotionDevice { | 29 | class UDPMotionDevice final : public Input::MotionDevice { |
| 30 | public: | 30 | public: |
| 31 | explicit UDPMotionDevice(std::shared_ptr<DeviceStatus> status_) : status(std::move(status_)) {} | 31 | explicit UDPMotionDevice(std::shared_ptr<DeviceStatus> status_) : status(std::move(status_)) {} |
| 32 | std::tuple<Common::Vec3<float>, Common::Vec3<float>> GetStatus() const override { | 32 | Input::MotionStatus GetStatus() const override { |
| 33 | std::lock_guard guard(status->update_mutex); | 33 | std::lock_guard guard(status->update_mutex); |
| 34 | return status->motion_status; | 34 | return status->motion_status; |
| 35 | } | 35 | } |