summaryrefslogtreecommitdiffstats
path: root/src/input_common
diff options
context:
space:
mode:
Diffstat (limited to 'src/input_common')
-rw-r--r--src/input_common/drivers/tas_input.cpp31
-rw-r--r--src/input_common/drivers/udp_client.cpp24
-rw-r--r--src/input_common/input_engine.cpp12
3 files changed, 50 insertions, 17 deletions
diff --git a/src/input_common/drivers/tas_input.cpp b/src/input_common/drivers/tas_input.cpp
index 579fd9473..944e141bf 100644
--- a/src/input_common/drivers/tas_input.cpp
+++ b/src/input_common/drivers/tas_input.cpp
@@ -106,10 +106,16 @@ void Tas::LoadTasFile(size_t player_index, size_t file_index) {
continue;
}
- const auto num_frames = std::stoi(seg_list[0]);
- while (frame_no < num_frames) {
- commands[player_index].emplace_back();
- frame_no++;
+ try {
+ const auto num_frames = std::stoi(seg_list[0]);
+ while (frame_no < num_frames) {
+ commands[player_index].emplace_back();
+ frame_no++;
+ }
+ } catch (const std::invalid_argument&) {
+ LOG_ERROR(Input, "Invalid argument: '{}' at command {}", seg_list[0], frame_no);
+ } catch (const std::out_of_range&) {
+ LOG_ERROR(Input, "Out of range: '{}' at command {}", seg_list[0], frame_no);
}
TASCommand command = {
@@ -234,10 +240,21 @@ TasAnalog Tas::ReadCommandAxis(const std::string& line) const {
}
}
- const float x = std::stof(seg_list.at(0)) / 32767.0f;
- const float y = std::stof(seg_list.at(1)) / 32767.0f;
+ if (seg_list.size() < 2) {
+ LOG_ERROR(Input, "Invalid axis data: '{}'", line);
+ return {};
+ }
- return {x, y};
+ try {
+ const float x = std::stof(seg_list.at(0)) / 32767.0f;
+ const float y = std::stof(seg_list.at(1)) / 32767.0f;
+ return {x, y};
+ } catch (const std::invalid_argument&) {
+ LOG_ERROR(Input, "Invalid argument: '{}'", line);
+ } catch (const std::out_of_range&) {
+ LOG_ERROR(Input, "Out of range: '{}'", line);
+ }
+ return {};
}
u64 Tas::ReadCommandButtons(const std::string& line) const {
diff --git a/src/input_common/drivers/udp_client.cpp b/src/input_common/drivers/udp_client.cpp
index a1ce4525d..c8a12c7d5 100644
--- a/src/input_common/drivers/udp_client.cpp
+++ b/src/input_common/drivers/udp_client.cpp
@@ -442,14 +442,22 @@ MotionMapping UDPClient::GetMotionMappingForDevice(const Common::ParamPackage& p
}
MotionMapping mapping = {};
- Common::ParamPackage motion_params;
- motion_params.Set("engine", GetEngineName());
- motion_params.Set("guid", params.Get("guid", ""));
- motion_params.Set("port", params.Get("port", 0));
- motion_params.Set("pad", params.Get("pad", 0));
- motion_params.Set("motion", 0);
- mapping.insert_or_assign(Settings::NativeMotion::MotionLeft, std::move(motion_params));
- mapping.insert_or_assign(Settings::NativeMotion::MotionRight, std::move(motion_params));
+ Common::ParamPackage left_motion_params;
+ left_motion_params.Set("engine", GetEngineName());
+ left_motion_params.Set("guid", params.Get("guid", ""));
+ left_motion_params.Set("port", params.Get("port", 0));
+ left_motion_params.Set("pad", params.Get("pad", 0));
+ left_motion_params.Set("motion", 0);
+
+ Common::ParamPackage right_motion_params;
+ right_motion_params.Set("engine", GetEngineName());
+ right_motion_params.Set("guid", params.Get("guid", ""));
+ right_motion_params.Set("port", params.Get("port", 0));
+ right_motion_params.Set("pad", params.Get("pad", 0));
+ right_motion_params.Set("motion", 0);
+
+ mapping.insert_or_assign(Settings::NativeMotion::MotionLeft, std::move(left_motion_params));
+ mapping.insert_or_assign(Settings::NativeMotion::MotionRight, std::move(right_motion_params));
return mapping;
}
diff --git a/src/input_common/input_engine.cpp b/src/input_common/input_engine.cpp
index 9c17ca4f7..b57330e51 100644
--- a/src/input_common/input_engine.cpp
+++ b/src/input_common/input_engine.cpp
@@ -298,8 +298,16 @@ void InputEngine::TriggerOnMotionChange(const PadIdentifier& identifier, int mot
if (!configuring || !mapping_callback.on_data) {
return;
}
- if (std::abs(value.gyro_x) < 0.6f && std::abs(value.gyro_y) < 0.6f &&
- std::abs(value.gyro_z) < 0.6f) {
+ bool is_active = false;
+ if (std::abs(value.accel_x) > 1.5f || std::abs(value.accel_y) > 1.5f ||
+ std::abs(value.accel_z) > 1.5f) {
+ is_active = true;
+ }
+ if (std::abs(value.gyro_x) > 0.6f || std::abs(value.gyro_y) > 0.6f ||
+ std::abs(value.gyro_z) > 0.6f) {
+ is_active = true;
+ }
+ if (!is_active) {
return;
}
mapping_callback.on_data(MappingData{