summaryrefslogtreecommitdiff
path: root/src/core/hid
diff options
context:
space:
mode:
authorGravatar german772021-11-14 21:28:38 -0600
committerGravatar Narr the Reg2021-11-24 20:30:28 -0600
commitf4e5f89e6fb9d68cd4ba7d98c281584c50f0e149 (patch)
tree9e9f9114d9b7528e74e78102279411595632f048 /src/core/hid
parentcore/hid: Fully implement native mouse (diff)
downloadyuzu-f4e5f89e6fb9d68cd4ba7d98c281584c50f0e149.tar.gz
yuzu-f4e5f89e6fb9d68cd4ba7d98c281584c50f0e149.tar.xz
yuzu-f4e5f89e6fb9d68cd4ba7d98c281584c50f0e149.zip
core/hid: Improve accuary of mouse implementation
Diffstat (limited to 'src/core/hid')
-rw-r--r--src/core/hid/emulated_devices.cpp10
-rw-r--r--src/core/hid/emulated_devices.h4
-rw-r--r--src/core/hid/hid_types.h35
-rw-r--r--src/core/hid/input_converter.cpp4
4 files changed, 33 insertions, 20 deletions
diff --git a/src/core/hid/emulated_devices.cpp b/src/core/hid/emulated_devices.cpp
index 70a494097..874780ec2 100644
--- a/src/core/hid/emulated_devices.cpp
+++ b/src/core/hid/emulated_devices.cpp
@@ -376,9 +376,9 @@ void EmulatedDevices::SetMouseAnalog(Common::Input::CallbackStatus callback, std
376 376
377void EmulatedDevices::SetMouseStick(Common::Input::CallbackStatus callback) { 377void EmulatedDevices::SetMouseStick(Common::Input::CallbackStatus callback) {
378 std::lock_guard lock{mutex}; 378 std::lock_guard lock{mutex};
379 const auto stick_value = TransformToStick(callback); 379 const auto touch_value = TransformToTouch(callback);
380 380
381 device_status.mouse_stick_value = stick_value; 381 device_status.mouse_stick_value = touch_value;
382 382
383 if (is_configuring) { 383 if (is_configuring) {
384 device_status.mouse_position_state = {}; 384 device_status.mouse_position_state = {};
@@ -386,8 +386,8 @@ void EmulatedDevices::SetMouseStick(Common::Input::CallbackStatus callback) {
386 return; 386 return;
387 } 387 }
388 388
389 device_status.mouse_position_state.x = stick_value.x.value; 389 device_status.mouse_position_state.x = touch_value.x.value;
390 device_status.mouse_position_state.y = stick_value.y.value; 390 device_status.mouse_position_state.y = touch_value.y.value;
391 391
392 TriggerOnChange(DeviceTriggerType::Mouse); 392 TriggerOnChange(DeviceTriggerType::Mouse);
393} 393}
@@ -420,7 +420,7 @@ MousePosition EmulatedDevices::GetMousePosition() const {
420 return device_status.mouse_position_state; 420 return device_status.mouse_position_state;
421} 421}
422 422
423AnalogStickState EmulatedDevices::GetMouseDeltaWheel() const { 423AnalogStickState EmulatedDevices::GetMouseWheel() const {
424 return device_status.mouse_wheel_state; 424 return device_status.mouse_wheel_state;
425} 425}
426 426
diff --git a/src/core/hid/emulated_devices.h b/src/core/hid/emulated_devices.h
index 49edfd255..05a945d08 100644
--- a/src/core/hid/emulated_devices.h
+++ b/src/core/hid/emulated_devices.h
@@ -38,7 +38,7 @@ using MouseButtonValues =
38 std::array<Common::Input::ButtonStatus, Settings::NativeMouseButton::NumMouseButtons>; 38 std::array<Common::Input::ButtonStatus, Settings::NativeMouseButton::NumMouseButtons>;
39using MouseAnalogValues = 39using MouseAnalogValues =
40 std::array<Common::Input::AnalogStatus, Settings::NativeMouseWheel::NumMouseWheels>; 40 std::array<Common::Input::AnalogStatus, Settings::NativeMouseWheel::NumMouseWheels>;
41using MouseStickValue = Common::Input::StickStatus; 41using MouseStickValue = Common::Input::TouchStatus;
42 42
43struct MousePosition { 43struct MousePosition {
44 f32 x; 44 f32 x;
@@ -130,7 +130,7 @@ public:
130 MousePosition GetMousePosition() const; 130 MousePosition GetMousePosition() const;
131 131
132 /// Returns the latest mouse wheel change 132 /// Returns the latest mouse wheel change
133 AnalogStickState GetMouseDeltaWheel() const; 133 AnalogStickState GetMouseWheel() const;
134 134
135 /** 135 /**
136 * Adds a callback to the list of events 136 * Adds a callback to the list of events
diff --git a/src/core/hid/hid_types.h b/src/core/hid/hid_types.h
index af95f3aff..8b12f63ad 100644
--- a/src/core/hid/hid_types.h
+++ b/src/core/hid/hid_types.h
@@ -502,21 +502,30 @@ static_assert(sizeof(VibrationDeviceInfo) == 0x8, "VibrationDeviceInfo has incor
502// This is nn::hid::KeyboardModifier 502// This is nn::hid::KeyboardModifier
503struct KeyboardModifier { 503struct KeyboardModifier {
504 union { 504 union {
505 u64 raw{}; 505 u32 raw{};
506 BitField<0, 1, u64> control; 506 BitField<0, 1, u32> control;
507 BitField<1, 1, u64> shift; 507 BitField<1, 1, u32> shift;
508 BitField<2, 1, u64> left_alt; 508 BitField<2, 1, u32> left_alt;
509 BitField<3, 1, u64> right_alt; 509 BitField<3, 1, u32> right_alt;
510 BitField<4, 1, u64> gui; 510 BitField<4, 1, u32> gui;
511 BitField<8, 1, u64> caps_lock; 511 BitField<8, 1, u32> caps_lock;
512 BitField<9, 1, u64> scroll_lock; 512 BitField<9, 1, u32> scroll_lock;
513 BitField<10, 1, u64> num_lock; 513 BitField<10, 1, u32> num_lock;
514 BitField<11, 1, u64> katakana; 514 BitField<11, 1, u32> katakana;
515 BitField<12, 1, u64> hiragana; 515 BitField<12, 1, u32> hiragana;
516 BitField<32, 1, u64> unknown; 516 };
517};
518
519static_assert(sizeof(KeyboardModifier) == 0x4, "KeyboardModifier is an invalid size");
520
521// This is nn::hid::KeyboardAttribute
522struct KeyboardAttribute {
523 union {
524 u32 raw{};
525 BitField<0, 1, u32> is_connected;
517 }; 526 };
518}; 527};
519static_assert(sizeof(KeyboardModifier) == 0x8, "KeyboardModifier is an invalid size"); 528static_assert(sizeof(KeyboardAttribute) == 0x4, "KeyboardAttribute is an invalid size");
520 529
521// This is nn::hid::KeyboardKey 530// This is nn::hid::KeyboardKey
522struct KeyboardKey { 531struct KeyboardKey {
diff --git a/src/core/hid/input_converter.cpp b/src/core/hid/input_converter.cpp
index c4e653956..f5acff6e0 100644
--- a/src/core/hid/input_converter.cpp
+++ b/src/core/hid/input_converter.cpp
@@ -175,6 +175,10 @@ Common::Input::TouchStatus TransformToTouch(const Common::Input::CallbackStatus&
175 case Common::Input::InputType::Touch: 175 case Common::Input::InputType::Touch:
176 status = callback.touch_status; 176 status = callback.touch_status;
177 break; 177 break;
178 case Common::Input::InputType::Stick:
179 status.x = callback.stick_status.x;
180 status.y = callback.stick_status.y;
181 break;
178 default: 182 default:
179 LOG_ERROR(Input, "Conversion from type {} to touch not implemented", callback.type); 183 LOG_ERROR(Input, "Conversion from type {} to touch not implemented", callback.type);
180 break; 184 break;