HID: Initialize correctly the gesture finger_id and filter invalid results

This commit is contained in:
Narr the Reg 2021-03-25 09:58:50 -06:00 committed by german77
parent 65774084fd
commit 7c26a9aefe
2 changed files with 13 additions and 3 deletions

View file

@ -4,6 +4,7 @@
#include <cstring> #include <cstring>
#include "common/common_types.h" #include "common/common_types.h"
#include "common/logging/log.h"
#include "core/core_timing.h" #include "core/core_timing.h"
#include "core/frontend/emu_window.h" #include "core/frontend/emu_window.h"
#include "core/hle/service/hid/controllers/gesture.h" #include "core/hle/service/hid/controllers/gesture.h"
@ -19,9 +20,9 @@ Controller_Gesture::~Controller_Gesture() = default;
void Controller_Gesture::OnInit() { void Controller_Gesture::OnInit() {
for (std::size_t id = 0; id < MAX_FINGERS; ++id) { for (std::size_t id = 0; id < MAX_FINGERS; ++id) {
mouse_finger_id[id] = MAX_FINGERS; mouse_finger_id[id] = MAX_POINTS;
keyboard_finger_id[id] = MAX_FINGERS; keyboard_finger_id[id] = MAX_POINTS;
udp_finger_id[id] = MAX_FINGERS; udp_finger_id[id] = MAX_POINTS;
} }
} }
@ -142,6 +143,10 @@ std::optional<std::size_t> Controller_Gesture::GetUnusedFingerID() const {
std::size_t Controller_Gesture::UpdateTouchInputEvent( std::size_t Controller_Gesture::UpdateTouchInputEvent(
const std::tuple<float, float, bool>& touch_input, std::size_t finger_id) { const std::tuple<float, float, bool>& touch_input, std::size_t finger_id) {
const auto& [x, y, pressed] = touch_input; const auto& [x, y, pressed] = touch_input;
if (finger_id > MAX_POINTS) {
LOG_ERROR(Service_HID, "Invalid finger id {}", finger_id);
return MAX_POINTS;
}
if (pressed) { if (pressed) {
if (finger_id == MAX_POINTS) { if (finger_id == MAX_POINTS) {
const auto first_free_id = GetUnusedFingerID(); const auto first_free_id = GetUnusedFingerID();

View file

@ -5,6 +5,7 @@
#include <algorithm> #include <algorithm>
#include <cstring> #include <cstring>
#include "common/common_types.h" #include "common/common_types.h"
#include "common/logging/log.h"
#include "core/core_timing.h" #include "core/core_timing.h"
#include "core/frontend/emu_window.h" #include "core/frontend/emu_window.h"
#include "core/frontend/input.h" #include "core/frontend/input.h"
@ -118,6 +119,10 @@ std::optional<std::size_t> Controller_Touchscreen::GetUnusedFingerID() const {
std::size_t Controller_Touchscreen::UpdateTouchInputEvent( std::size_t Controller_Touchscreen::UpdateTouchInputEvent(
const std::tuple<float, float, bool>& touch_input, std::size_t finger_id) { const std::tuple<float, float, bool>& touch_input, std::size_t finger_id) {
const auto& [x, y, pressed] = touch_input; const auto& [x, y, pressed] = touch_input;
if (finger_id > MAX_FINGERS) {
LOG_ERROR(Service_HID, "Invalid finger id {}", finger_id);
return MAX_FINGERS;
}
if (pressed) { if (pressed) {
Attributes attribute{}; Attributes attribute{};
if (finger_id == MAX_FINGERS) { if (finger_id == MAX_FINGERS) {