summaryrefslogtreecommitdiff
path: root/src/input_common/input_engine.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/input_common/input_engine.cpp')
-rw-r--r--src/input_common/input_engine.cpp51
1 files changed, 25 insertions, 26 deletions
diff --git a/src/input_common/input_engine.cpp b/src/input_common/input_engine.cpp
index 738022ece..12214d146 100644
--- a/src/input_common/input_engine.cpp
+++ b/src/input_common/input_engine.cpp
@@ -1,6 +1,5 @@
1// Copyright 2021 yuzu Emulator Project 1// SPDX-FileCopyrightText: Copyright 2021 yuzu Emulator Project
2// Licensed under GPLv2 or any later version 2// SPDX-License-Identifier: GPL-2.0-or-later
3// Refer to the license.txt file included
4 3
5#include "common/logging/log.h" 4#include "common/logging/log.h"
6#include "input_common/input_engine.h" 5#include "input_common/input_engine.h"
@@ -8,37 +7,37 @@
8namespace InputCommon { 7namespace InputCommon {
9 8
10void InputEngine::PreSetController(const PadIdentifier& identifier) { 9void InputEngine::PreSetController(const PadIdentifier& identifier) {
11 std::lock_guard lock{mutex}; 10 std::scoped_lock lock{mutex};
12 controller_list.try_emplace(identifier); 11 controller_list.try_emplace(identifier);
13} 12}
14 13
15void InputEngine::PreSetButton(const PadIdentifier& identifier, int button) { 14void InputEngine::PreSetButton(const PadIdentifier& identifier, int button) {
16 std::lock_guard lock{mutex}; 15 std::scoped_lock lock{mutex};
17 ControllerData& controller = controller_list.at(identifier); 16 ControllerData& controller = controller_list.at(identifier);
18 controller.buttons.try_emplace(button, false); 17 controller.buttons.try_emplace(button, false);
19} 18}
20 19
21void InputEngine::PreSetHatButton(const PadIdentifier& identifier, int button) { 20void InputEngine::PreSetHatButton(const PadIdentifier& identifier, int button) {
22 std::lock_guard lock{mutex}; 21 std::scoped_lock lock{mutex};
23 ControllerData& controller = controller_list.at(identifier); 22 ControllerData& controller = controller_list.at(identifier);
24 controller.hat_buttons.try_emplace(button, u8{0}); 23 controller.hat_buttons.try_emplace(button, u8{0});
25} 24}
26 25
27void InputEngine::PreSetAxis(const PadIdentifier& identifier, int axis) { 26void InputEngine::PreSetAxis(const PadIdentifier& identifier, int axis) {
28 std::lock_guard lock{mutex}; 27 std::scoped_lock lock{mutex};
29 ControllerData& controller = controller_list.at(identifier); 28 ControllerData& controller = controller_list.at(identifier);
30 controller.axes.try_emplace(axis, 0.0f); 29 controller.axes.try_emplace(axis, 0.0f);
31} 30}
32 31
33void InputEngine::PreSetMotion(const PadIdentifier& identifier, int motion) { 32void InputEngine::PreSetMotion(const PadIdentifier& identifier, int motion) {
34 std::lock_guard lock{mutex}; 33 std::scoped_lock lock{mutex};
35 ControllerData& controller = controller_list.at(identifier); 34 ControllerData& controller = controller_list.at(identifier);
36 controller.motions.try_emplace(motion); 35 controller.motions.try_emplace(motion);
37} 36}
38 37
39void InputEngine::SetButton(const PadIdentifier& identifier, int button, bool value) { 38void InputEngine::SetButton(const PadIdentifier& identifier, int button, bool value) {
40 { 39 {
41 std::lock_guard lock{mutex}; 40 std::scoped_lock lock{mutex};
42 ControllerData& controller = controller_list.at(identifier); 41 ControllerData& controller = controller_list.at(identifier);
43 if (!configuring) { 42 if (!configuring) {
44 controller.buttons.insert_or_assign(button, value); 43 controller.buttons.insert_or_assign(button, value);
@@ -49,7 +48,7 @@ void InputEngine::SetButton(const PadIdentifier& identifier, int button, bool va
49 48
50void InputEngine::SetHatButton(const PadIdentifier& identifier, int button, u8 value) { 49void InputEngine::SetHatButton(const PadIdentifier& identifier, int button, u8 value) {
51 { 50 {
52 std::lock_guard lock{mutex}; 51 std::scoped_lock lock{mutex};
53 ControllerData& controller = controller_list.at(identifier); 52 ControllerData& controller = controller_list.at(identifier);
54 if (!configuring) { 53 if (!configuring) {
55 controller.hat_buttons.insert_or_assign(button, value); 54 controller.hat_buttons.insert_or_assign(button, value);
@@ -60,7 +59,7 @@ void InputEngine::SetHatButton(const PadIdentifier& identifier, int button, u8 v
60 59
61void InputEngine::SetAxis(const PadIdentifier& identifier, int axis, f32 value) { 60void InputEngine::SetAxis(const PadIdentifier& identifier, int axis, f32 value) {
62 { 61 {
63 std::lock_guard lock{mutex}; 62 std::scoped_lock lock{mutex};
64 ControllerData& controller = controller_list.at(identifier); 63 ControllerData& controller = controller_list.at(identifier);
65 if (!configuring) { 64 if (!configuring) {
66 controller.axes.insert_or_assign(axis, value); 65 controller.axes.insert_or_assign(axis, value);
@@ -71,7 +70,7 @@ void InputEngine::SetAxis(const PadIdentifier& identifier, int axis, f32 value)
71 70
72void InputEngine::SetBattery(const PadIdentifier& identifier, Common::Input::BatteryLevel value) { 71void InputEngine::SetBattery(const PadIdentifier& identifier, Common::Input::BatteryLevel value) {
73 { 72 {
74 std::lock_guard lock{mutex}; 73 std::scoped_lock lock{mutex};
75 ControllerData& controller = controller_list.at(identifier); 74 ControllerData& controller = controller_list.at(identifier);
76 if (!configuring) { 75 if (!configuring) {
77 controller.battery = value; 76 controller.battery = value;
@@ -82,7 +81,7 @@ void InputEngine::SetBattery(const PadIdentifier& identifier, Common::Input::Bat
82 81
83void InputEngine::SetMotion(const PadIdentifier& identifier, int motion, const BasicMotion& value) { 82void InputEngine::SetMotion(const PadIdentifier& identifier, int motion, const BasicMotion& value) {
84 { 83 {
85 std::lock_guard lock{mutex}; 84 std::scoped_lock lock{mutex};
86 ControllerData& controller = controller_list.at(identifier); 85 ControllerData& controller = controller_list.at(identifier);
87 if (!configuring) { 86 if (!configuring) {
88 controller.motions.insert_or_assign(motion, value); 87 controller.motions.insert_or_assign(motion, value);
@@ -92,7 +91,7 @@ void InputEngine::SetMotion(const PadIdentifier& identifier, int motion, const B
92} 91}
93 92
94bool InputEngine::GetButton(const PadIdentifier& identifier, int button) const { 93bool InputEngine::GetButton(const PadIdentifier& identifier, int button) const {
95 std::lock_guard lock{mutex}; 94 std::scoped_lock lock{mutex};
96 const auto controller_iter = controller_list.find(identifier); 95 const auto controller_iter = controller_list.find(identifier);
97 if (controller_iter == controller_list.cend()) { 96 if (controller_iter == controller_list.cend()) {
98 LOG_ERROR(Input, "Invalid identifier guid={}, pad={}, port={}", identifier.guid.RawString(), 97 LOG_ERROR(Input, "Invalid identifier guid={}, pad={}, port={}", identifier.guid.RawString(),
@@ -109,7 +108,7 @@ bool InputEngine::GetButton(const PadIdentifier& identifier, int button) const {
109} 108}
110 109
111bool InputEngine::GetHatButton(const PadIdentifier& identifier, int button, u8 direction) const { 110bool InputEngine::GetHatButton(const PadIdentifier& identifier, int button, u8 direction) const {
112 std::lock_guard lock{mutex}; 111 std::scoped_lock lock{mutex};
113 const auto controller_iter = controller_list.find(identifier); 112 const auto controller_iter = controller_list.find(identifier);
114 if (controller_iter == controller_list.cend()) { 113 if (controller_iter == controller_list.cend()) {
115 LOG_ERROR(Input, "Invalid identifier guid={}, pad={}, port={}", identifier.guid.RawString(), 114 LOG_ERROR(Input, "Invalid identifier guid={}, pad={}, port={}", identifier.guid.RawString(),
@@ -126,7 +125,7 @@ bool InputEngine::GetHatButton(const PadIdentifier& identifier, int button, u8 d
126} 125}
127 126
128f32 InputEngine::GetAxis(const PadIdentifier& identifier, int axis) const { 127f32 InputEngine::GetAxis(const PadIdentifier& identifier, int axis) const {
129 std::lock_guard lock{mutex}; 128 std::scoped_lock lock{mutex};
130 const auto controller_iter = controller_list.find(identifier); 129 const auto controller_iter = controller_list.find(identifier);
131 if (controller_iter == controller_list.cend()) { 130 if (controller_iter == controller_list.cend()) {
132 LOG_ERROR(Input, "Invalid identifier guid={}, pad={}, port={}", identifier.guid.RawString(), 131 LOG_ERROR(Input, "Invalid identifier guid={}, pad={}, port={}", identifier.guid.RawString(),
@@ -143,7 +142,7 @@ f32 InputEngine::GetAxis(const PadIdentifier& identifier, int axis) const {
143} 142}
144 143
145Common::Input::BatteryLevel InputEngine::GetBattery(const PadIdentifier& identifier) const { 144Common::Input::BatteryLevel InputEngine::GetBattery(const PadIdentifier& identifier) const {
146 std::lock_guard lock{mutex}; 145 std::scoped_lock lock{mutex};
147 const auto controller_iter = controller_list.find(identifier); 146 const auto controller_iter = controller_list.find(identifier);
148 if (controller_iter == controller_list.cend()) { 147 if (controller_iter == controller_list.cend()) {
149 LOG_ERROR(Input, "Invalid identifier guid={}, pad={}, port={}", identifier.guid.RawString(), 148 LOG_ERROR(Input, "Invalid identifier guid={}, pad={}, port={}", identifier.guid.RawString(),
@@ -155,7 +154,7 @@ Common::Input::BatteryLevel InputEngine::GetBattery(const PadIdentifier& identif
155} 154}
156 155
157BasicMotion InputEngine::GetMotion(const PadIdentifier& identifier, int motion) const { 156BasicMotion InputEngine::GetMotion(const PadIdentifier& identifier, int motion) const {
158 std::lock_guard lock{mutex}; 157 std::scoped_lock lock{mutex};
159 const auto controller_iter = controller_list.find(identifier); 158 const auto controller_iter = controller_list.find(identifier);
160 if (controller_iter == controller_list.cend()) { 159 if (controller_iter == controller_list.cend()) {
161 LOG_ERROR(Input, "Invalid identifier guid={}, pad={}, port={}", identifier.guid.RawString(), 160 LOG_ERROR(Input, "Invalid identifier guid={}, pad={}, port={}", identifier.guid.RawString(),
@@ -186,7 +185,7 @@ void InputEngine::ResetAnalogState() {
186} 185}
187 186
188void InputEngine::TriggerOnButtonChange(const PadIdentifier& identifier, int button, bool value) { 187void InputEngine::TriggerOnButtonChange(const PadIdentifier& identifier, int button, bool value) {
189 std::lock_guard lock{mutex_callback}; 188 std::scoped_lock lock{mutex_callback};
190 for (const auto& poller_pair : callback_list) { 189 for (const auto& poller_pair : callback_list) {
191 const InputIdentifier& poller = poller_pair.second; 190 const InputIdentifier& poller = poller_pair.second;
192 if (!IsInputIdentifierEqual(poller, identifier, EngineInputType::Button, button)) { 191 if (!IsInputIdentifierEqual(poller, identifier, EngineInputType::Button, button)) {
@@ -214,7 +213,7 @@ void InputEngine::TriggerOnButtonChange(const PadIdentifier& identifier, int but
214} 213}
215 214
216void InputEngine::TriggerOnHatButtonChange(const PadIdentifier& identifier, int button, u8 value) { 215void InputEngine::TriggerOnHatButtonChange(const PadIdentifier& identifier, int button, u8 value) {
217 std::lock_guard lock{mutex_callback}; 216 std::scoped_lock lock{mutex_callback};
218 for (const auto& poller_pair : callback_list) { 217 for (const auto& poller_pair : callback_list) {
219 const InputIdentifier& poller = poller_pair.second; 218 const InputIdentifier& poller = poller_pair.second;
220 if (!IsInputIdentifierEqual(poller, identifier, EngineInputType::HatButton, button)) { 219 if (!IsInputIdentifierEqual(poller, identifier, EngineInputType::HatButton, button)) {
@@ -243,7 +242,7 @@ void InputEngine::TriggerOnHatButtonChange(const PadIdentifier& identifier, int
243} 242}
244 243
245void InputEngine::TriggerOnAxisChange(const PadIdentifier& identifier, int axis, f32 value) { 244void InputEngine::TriggerOnAxisChange(const PadIdentifier& identifier, int axis, f32 value) {
246 std::lock_guard lock{mutex_callback}; 245 std::scoped_lock lock{mutex_callback};
247 for (const auto& poller_pair : callback_list) { 246 for (const auto& poller_pair : callback_list) {
248 const InputIdentifier& poller = poller_pair.second; 247 const InputIdentifier& poller = poller_pair.second;
249 if (!IsInputIdentifierEqual(poller, identifier, EngineInputType::Analog, axis)) { 248 if (!IsInputIdentifierEqual(poller, identifier, EngineInputType::Analog, axis)) {
@@ -270,7 +269,7 @@ void InputEngine::TriggerOnAxisChange(const PadIdentifier& identifier, int axis,
270 269
271void InputEngine::TriggerOnBatteryChange(const PadIdentifier& identifier, 270void InputEngine::TriggerOnBatteryChange(const PadIdentifier& identifier,
272 [[maybe_unused]] Common::Input::BatteryLevel value) { 271 [[maybe_unused]] Common::Input::BatteryLevel value) {
273 std::lock_guard lock{mutex_callback}; 272 std::scoped_lock lock{mutex_callback};
274 for (const auto& poller_pair : callback_list) { 273 for (const auto& poller_pair : callback_list) {
275 const InputIdentifier& poller = poller_pair.second; 274 const InputIdentifier& poller = poller_pair.second;
276 if (!IsInputIdentifierEqual(poller, identifier, EngineInputType::Battery, 0)) { 275 if (!IsInputIdentifierEqual(poller, identifier, EngineInputType::Battery, 0)) {
@@ -284,7 +283,7 @@ void InputEngine::TriggerOnBatteryChange(const PadIdentifier& identifier,
284 283
285void InputEngine::TriggerOnMotionChange(const PadIdentifier& identifier, int motion, 284void InputEngine::TriggerOnMotionChange(const PadIdentifier& identifier, int motion,
286 const BasicMotion& value) { 285 const BasicMotion& value) {
287 std::lock_guard lock{mutex_callback}; 286 std::scoped_lock lock{mutex_callback};
288 for (const auto& poller_pair : callback_list) { 287 for (const auto& poller_pair : callback_list) {
289 const InputIdentifier& poller = poller_pair.second; 288 const InputIdentifier& poller = poller_pair.second;
290 if (!IsInputIdentifierEqual(poller, identifier, EngineInputType::Motion, motion)) { 289 if (!IsInputIdentifierEqual(poller, identifier, EngineInputType::Motion, motion)) {
@@ -346,18 +345,18 @@ const std::string& InputEngine::GetEngineName() const {
346} 345}
347 346
348int InputEngine::SetCallback(InputIdentifier input_identifier) { 347int InputEngine::SetCallback(InputIdentifier input_identifier) {
349 std::lock_guard lock{mutex_callback}; 348 std::scoped_lock lock{mutex_callback};
350 callback_list.insert_or_assign(last_callback_key, std::move(input_identifier)); 349 callback_list.insert_or_assign(last_callback_key, std::move(input_identifier));
351 return last_callback_key++; 350 return last_callback_key++;
352} 351}
353 352
354void InputEngine::SetMappingCallback(MappingCallback callback) { 353void InputEngine::SetMappingCallback(MappingCallback callback) {
355 std::lock_guard lock{mutex_callback}; 354 std::scoped_lock lock{mutex_callback};
356 mapping_callback = std::move(callback); 355 mapping_callback = std::move(callback);
357} 356}
358 357
359void InputEngine::DeleteCallback(int key) { 358void InputEngine::DeleteCallback(int key) {
360 std::lock_guard lock{mutex_callback}; 359 std::scoped_lock lock{mutex_callback};
361 const auto& iterator = callback_list.find(key); 360 const auto& iterator = callback_list.find(key);
362 if (iterator == callback_list.end()) { 361 if (iterator == callback_list.end()) {
363 LOG_ERROR(Input, "Tried to delete non-existent callback {}", key); 362 LOG_ERROR(Input, "Tried to delete non-existent callback {}", key);