diff options
Diffstat (limited to 'src/input_common/udp/client.cpp')
| -rw-r--r-- | src/input_common/udp/client.cpp | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/src/input_common/udp/client.cpp b/src/input_common/udp/client.cpp index 8a38a380d..bc1dfab3d 100644 --- a/src/input_common/udp/client.cpp +++ b/src/input_common/udp/client.cpp | |||
| @@ -86,6 +86,7 @@ private: | |||
| 86 | case Type::PadData: { | 86 | case Type::PadData: { |
| 87 | Response::PadData pad_data; | 87 | Response::PadData pad_data; |
| 88 | std::memcpy(&pad_data, &receive_buffer[sizeof(Header)], sizeof(Response::PadData)); | 88 | std::memcpy(&pad_data, &receive_buffer[sizeof(Header)], sizeof(Response::PadData)); |
| 89 | SanitizeMotion(pad_data); | ||
| 89 | callback.pad_data(std::move(pad_data)); | 90 | callback.pad_data(std::move(pad_data)); |
| 90 | break; | 91 | break; |
| 91 | } | 92 | } |
| @@ -114,6 +115,28 @@ private: | |||
| 114 | StartSend(timer.expiry()); | 115 | StartSend(timer.expiry()); |
| 115 | } | 116 | } |
| 116 | 117 | ||
| 118 | void SanitizeMotion(Response::PadData& data) { | ||
| 119 | // Zero out any non number value | ||
| 120 | if (!std::isnormal(data.gyro.pitch)) { | ||
| 121 | data.gyro.pitch = 0; | ||
| 122 | } | ||
| 123 | if (!std::isnormal(data.gyro.roll)) { | ||
| 124 | data.gyro.roll = 0; | ||
| 125 | } | ||
| 126 | if (!std::isnormal(data.gyro.yaw)) { | ||
| 127 | data.gyro.yaw = 0; | ||
| 128 | } | ||
| 129 | if (!std::isnormal(data.accel.x)) { | ||
| 130 | data.accel.x = 0; | ||
| 131 | } | ||
| 132 | if (!std::isnormal(data.accel.y)) { | ||
| 133 | data.accel.y = 0; | ||
| 134 | } | ||
| 135 | if (!std::isnormal(data.accel.z)) { | ||
| 136 | data.accel.z = 0; | ||
| 137 | } | ||
| 138 | } | ||
| 139 | |||
| 117 | SocketCallback callback; | 140 | SocketCallback callback; |
| 118 | boost::asio::io_service io_service; | 141 | boost::asio::io_service io_service; |
| 119 | boost::asio::basic_waitable_timer<clock> timer; | 142 | boost::asio::basic_waitable_timer<clock> timer; |