summaryrefslogtreecommitdiffstats
path: root/src/core/hid
diff options
context:
space:
mode:
authorgerman77 <juangerman-13@hotmail.com>2021-10-24 18:22:20 +0200
committerNarr the Reg <juangerman-13@hotmail.com>2021-11-25 03:30:25 +0100
commit464c4d26ac8e7af6302390684445b357e5cda4e4 (patch)
tree160f98a8bce324756f46b7b5aee889bb5b53f8af /src/core/hid
parentweb_applet: Replace HIDButton with NpadButton (diff)
downloadyuzu-464c4d26ac8e7af6302390684445b357e5cda4e4.tar
yuzu-464c4d26ac8e7af6302390684445b357e5cda4e4.tar.gz
yuzu-464c4d26ac8e7af6302390684445b357e5cda4e4.tar.bz2
yuzu-464c4d26ac8e7af6302390684445b357e5cda4e4.tar.lz
yuzu-464c4d26ac8e7af6302390684445b357e5cda4e4.tar.xz
yuzu-464c4d26ac8e7af6302390684445b357e5cda4e4.tar.zst
yuzu-464c4d26ac8e7af6302390684445b357e5cda4e4.zip
Diffstat (limited to '')
-rw-r--r--src/core/hid/emulated_controller.cpp8
-rw-r--r--src/core/hid/emulated_devices.cpp19
-rw-r--r--src/core/hid/emulated_devices.h3
3 files changed, 19 insertions, 11 deletions
diff --git a/src/core/hid/emulated_controller.cpp b/src/core/hid/emulated_controller.cpp
index 228f80183..bd0b89c05 100644
--- a/src/core/hid/emulated_controller.cpp
+++ b/src/core/hid/emulated_controller.cpp
@@ -246,7 +246,7 @@ std::vector<Common::ParamPackage> EmulatedController::GetMappedDevices() const {
devices.begin(), devices.end(), [param](const Common::ParamPackage param_) {
return param.Get("engine", "") == param_.Get("engine", "") &&
param.Get("guid", "") == param_.Get("guid", "") &&
- param.Get("port", "") == param_.Get("port", "");
+ param.Get("port", 0) == param_.Get("port", 0);
});
if (devices_it != devices.end()) {
continue;
@@ -254,7 +254,7 @@ std::vector<Common::ParamPackage> EmulatedController::GetMappedDevices() const {
Common::ParamPackage device{};
device.Set("engine", param.Get("engine", ""));
device.Set("guid", param.Get("guid", ""));
- device.Set("port", param.Get("port", ""));
+ device.Set("port", param.Get("port", 0));
devices.push_back(device);
}
@@ -269,7 +269,7 @@ std::vector<Common::ParamPackage> EmulatedController::GetMappedDevices() const {
devices.begin(), devices.end(), [param](const Common::ParamPackage param_) {
return param.Get("engine", "") == param_.Get("engine", "") &&
param.Get("guid", "") == param_.Get("guid", "") &&
- param.Get("port", "") == param_.Get("port", "");
+ param.Get("port", 0) == param_.Get("port", 0);
});
if (devices_it != devices.end()) {
continue;
@@ -277,7 +277,7 @@ std::vector<Common::ParamPackage> EmulatedController::GetMappedDevices() const {
Common::ParamPackage device{};
device.Set("engine", param.Get("engine", ""));
device.Set("guid", param.Get("guid", ""));
- device.Set("port", param.Get("port", ""));
+ device.Set("port", param.Get("port", 0));
devices.push_back(device);
}
return devices;
diff --git a/src/core/hid/emulated_devices.cpp b/src/core/hid/emulated_devices.cpp
index 1c4065cd8..5afd83f62 100644
--- a/src/core/hid/emulated_devices.cpp
+++ b/src/core/hid/emulated_devices.cpp
@@ -162,17 +162,22 @@ void EmulatedDevices::SetKeyboardButton(Input::CallbackStatus callback, std::siz
return;
}
- // TODO(german77): Do this properly
- // switch (index) {
- // case Settings::NativeKeyboard::A:
- // interface_status.keyboard_state.a.Assign(current_status.value);
- // break;
- // ....
- // }
+ UpdateKey(index, current_status.value);
TriggerOnChange(DeviceTriggerType::Keyboard);
}
+void EmulatedDevices::UpdateKey(std::size_t key_index, bool status) {
+ constexpr u8 KEYS_PER_BYTE = 8;
+ auto& entry = device_status.keyboard_state.key[key_index / KEYS_PER_BYTE];
+ const u8 mask = 1 << (key_index % KEYS_PER_BYTE);
+ if (status) {
+ entry = entry | mask;
+ } else {
+ entry = entry & ~mask;
+ }
+}
+
void EmulatedDevices::SetKeyboardModifier(Input::CallbackStatus callback, std::size_t index) {
if (index >= device_status.keyboard_moddifier_values.size()) {
return;
diff --git a/src/core/hid/emulated_devices.h b/src/core/hid/emulated_devices.h
index c6c19fae4..7ed95eac6 100644
--- a/src/core/hid/emulated_devices.h
+++ b/src/core/hid/emulated_devices.h
@@ -143,6 +143,9 @@ public:
void DeleteCallback(int key);
private:
+ /// Helps assigning a value to keyboard_state
+ void UpdateKey(std::size_t key_index, bool status);
+
/**
* Updates the touch status of the console
* @param callback: A CallbackStatus containing the key status