summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/common/bit_cast.h20
-rw-r--r--src/common/input.h2
-rw-r--r--src/input_common/drivers/joycon.cpp4
-rw-r--r--src/input_common/drivers/virtual_amiibo.h2
-rw-r--r--src/input_common/helpers/joycon_driver.cpp2
-rw-r--r--src/input_common/helpers/joycon_driver.h2
-rw-r--r--src/input_common/helpers/joycon_protocol/joycon_types.h4
-rw-r--r--src/input_common/helpers/joycon_protocol/poller.cpp72
-rw-r--r--src/input_common/helpers/joycon_protocol/poller.h8
9 files changed, 59 insertions, 57 deletions
diff --git a/src/common/bit_cast.h b/src/common/bit_cast.h
index 535148b4d..c6110c542 100644
--- a/src/common/bit_cast.h
+++ b/src/common/bit_cast.h
@@ -3,19 +3,21 @@
3 3
4#pragma once 4#pragma once
5 5
6#include <cstring> 6#include <version>
7#include <type_traits> 7
8#ifdef __cpp_lib_bit_cast
9#include <bit>
10#endif
8 11
9namespace Common { 12namespace Common {
10 13
11template <typename To, typename From> 14template <typename To, typename From>
12[[nodiscard]] std::enable_if_t<sizeof(To) == sizeof(From) && std::is_trivially_copyable_v<From> && 15constexpr inline To BitCast(const From& from) {
13 std::is_trivially_copyable_v<To>, 16#ifdef __cpp_lib_bit_cast
14 To> 17 return std::bit_cast<To>(from);
15BitCast(const From& src) noexcept { 18#else
16 To dst; 19 return __builtin_bit_cast(To, from);
17 std::memcpy(&dst, &src, sizeof(To)); 20#endif
18 return dst;
19} 21}
20 22
21} // namespace Common 23} // namespace Common
diff --git a/src/common/input.h b/src/common/input.h
index b5748a6c8..98e934685 100644
--- a/src/common/input.h
+++ b/src/common/input.h
@@ -46,7 +46,7 @@ enum class PollingMode {
46 // Constant polling of buttons, analogs and motion data 46 // Constant polling of buttons, analogs and motion data
47 Active, 47 Active,
48 // Only update on button change, digital analogs 48 // Only update on button change, digital analogs
49 Pasive, 49 Passive,
50 // Enable near field communication polling 50 // Enable near field communication polling
51 NFC, 51 NFC,
52 // Enable infrared camera polling 52 // Enable infrared camera polling
diff --git a/src/input_common/drivers/joycon.cpp b/src/input_common/drivers/joycon.cpp
index b4cd39a20..8b57ebe07 100644
--- a/src/input_common/drivers/joycon.cpp
+++ b/src/input_common/drivers/joycon.cpp
@@ -307,8 +307,8 @@ Common::Input::DriverResult Joycons::SetPollingMode(const PadIdentifier& identif
307 switch (polling_mode) { 307 switch (polling_mode) {
308 case Common::Input::PollingMode::Active: 308 case Common::Input::PollingMode::Active:
309 return static_cast<Common::Input::DriverResult>(handle->SetActiveMode()); 309 return static_cast<Common::Input::DriverResult>(handle->SetActiveMode());
310 case Common::Input::PollingMode::Pasive: 310 case Common::Input::PollingMode::Passive:
311 return static_cast<Common::Input::DriverResult>(handle->SetPasiveMode()); 311 return static_cast<Common::Input::DriverResult>(handle->SetPassiveMode());
312 case Common::Input::PollingMode::IR: 312 case Common::Input::PollingMode::IR:
313 return static_cast<Common::Input::DriverResult>(handle->SetIrMode()); 313 return static_cast<Common::Input::DriverResult>(handle->SetIrMode());
314 case Common::Input::PollingMode::NFC: 314 case Common::Input::PollingMode::NFC:
diff --git a/src/input_common/drivers/virtual_amiibo.h b/src/input_common/drivers/virtual_amiibo.h
index 13cacfc0a..488d00b31 100644
--- a/src/input_common/drivers/virtual_amiibo.h
+++ b/src/input_common/drivers/virtual_amiibo.h
@@ -60,6 +60,6 @@ private:
60 std::string file_path{}; 60 std::string file_path{};
61 State state{State::Initialized}; 61 State state{State::Initialized};
62 std::vector<u8> nfc_data; 62 std::vector<u8> nfc_data;
63 Common::Input::PollingMode polling_mode{Common::Input::PollingMode::Pasive}; 63 Common::Input::PollingMode polling_mode{Common::Input::PollingMode::Passive};
64}; 64};
65} // namespace InputCommon 65} // namespace InputCommon
diff --git a/src/input_common/helpers/joycon_driver.cpp b/src/input_common/helpers/joycon_driver.cpp
index e65b6b845..78cc5893c 100644
--- a/src/input_common/helpers/joycon_driver.cpp
+++ b/src/input_common/helpers/joycon_driver.cpp
@@ -410,7 +410,7 @@ DriverResult JoyconDriver::SetIrsConfig(IrsMode mode_, IrsResolution format_) {
410 return result; 410 return result;
411} 411}
412 412
413DriverResult JoyconDriver::SetPasiveMode() { 413DriverResult JoyconDriver::SetPassiveMode() {
414 std::scoped_lock lock{mutex}; 414 std::scoped_lock lock{mutex};
415 motion_enabled = false; 415 motion_enabled = false;
416 hidbus_enabled = false; 416 hidbus_enabled = false;
diff --git a/src/input_common/helpers/joycon_driver.h b/src/input_common/helpers/joycon_driver.h
index c1e189fa5..b52a13ecf 100644
--- a/src/input_common/helpers/joycon_driver.h
+++ b/src/input_common/helpers/joycon_driver.h
@@ -44,7 +44,7 @@ public:
44 DriverResult SetVibration(const VibrationValue& vibration); 44 DriverResult SetVibration(const VibrationValue& vibration);
45 DriverResult SetLedConfig(u8 led_pattern); 45 DriverResult SetLedConfig(u8 led_pattern);
46 DriverResult SetIrsConfig(IrsMode mode_, IrsResolution format_); 46 DriverResult SetIrsConfig(IrsMode mode_, IrsResolution format_);
47 DriverResult SetPasiveMode(); 47 DriverResult SetPassiveMode();
48 DriverResult SetActiveMode(); 48 DriverResult SetActiveMode();
49 DriverResult SetIrMode(); 49 DriverResult SetIrMode();
50 DriverResult SetNfcMode(); 50 DriverResult SetNfcMode();
diff --git a/src/input_common/helpers/joycon_protocol/joycon_types.h b/src/input_common/helpers/joycon_protocol/joycon_types.h
index 2e50a99a8..dcac0e422 100644
--- a/src/input_common/helpers/joycon_protocol/joycon_types.h
+++ b/src/input_common/helpers/joycon_protocol/joycon_types.h
@@ -78,7 +78,7 @@ enum class PadButton : u32 {
78 Capture = 0x200000, 78 Capture = 0x200000,
79}; 79};
80 80
81enum class PasivePadButton : u32 { 81enum class PassivePadButton : u32 {
82 Down_A = 0x0001, 82 Down_A = 0x0001,
83 Right_X = 0x0002, 83 Right_X = 0x0002,
84 Left_B = 0x0004, 84 Left_B = 0x0004,
@@ -95,7 +95,7 @@ enum class PasivePadButton : u32 {
95 ZL_ZR = 0x8000, 95 ZL_ZR = 0x8000,
96}; 96};
97 97
98enum class PasivePadStick : u8 { 98enum class PassivePadStick : u8 {
99 Right = 0x00, 99 Right = 0x00,
100 RightDown = 0x01, 100 RightDown = 0x01,
101 Down = 0x02, 101 Down = 0x02,
diff --git a/src/input_common/helpers/joycon_protocol/poller.cpp b/src/input_common/helpers/joycon_protocol/poller.cpp
index ab48352b8..dca797f7a 100644
--- a/src/input_common/helpers/joycon_protocol/poller.cpp
+++ b/src/input_common/helpers/joycon_protocol/poller.cpp
@@ -48,13 +48,13 @@ void JoyconPoller::ReadPassiveMode(std::span<u8> buffer) {
48 48
49 switch (device_type) { 49 switch (device_type) {
50 case ControllerType::Left: 50 case ControllerType::Left:
51 UpdatePasiveLeftPadInput(data); 51 UpdatePassiveLeftPadInput(data);
52 break; 52 break;
53 case ControllerType::Right: 53 case ControllerType::Right:
54 UpdatePasiveRightPadInput(data); 54 UpdatePassiveRightPadInput(data);
55 break; 55 break;
56 case ControllerType::Pro: 56 case ControllerType::Pro:
57 UpdatePasiveProPadInput(data); 57 UpdatePassiveProPadInput(data);
58 break; 58 break;
59 default: 59 default:
60 break; 60 break;
@@ -210,12 +210,12 @@ void JoyconPoller::UpdateActiveProPadInput(const InputReportActive& input,
210 } 210 }
211} 211}
212 212
213void JoyconPoller::UpdatePasiveLeftPadInput(const InputReportPassive& input) { 213void JoyconPoller::UpdatePassiveLeftPadInput(const InputReportPassive& input) {
214 static constexpr std::array<PasivePadButton, 11> left_buttons{ 214 static constexpr std::array<PassivePadButton, 11> left_buttons{
215 PasivePadButton::Down_A, PasivePadButton::Right_X, PasivePadButton::Left_B, 215 PassivePadButton::Down_A, PassivePadButton::Right_X, PassivePadButton::Left_B,
216 PasivePadButton::Up_Y, PasivePadButton::SL, PasivePadButton::SR, 216 PassivePadButton::Up_Y, PassivePadButton::SL, PassivePadButton::SR,
217 PasivePadButton::L_R, PasivePadButton::ZL_ZR, PasivePadButton::Minus, 217 PassivePadButton::L_R, PassivePadButton::ZL_ZR, PassivePadButton::Minus,
218 PasivePadButton::Capture, PasivePadButton::StickL, 218 PassivePadButton::Capture, PassivePadButton::StickL,
219 }; 219 };
220 220
221 for (auto left_button : left_buttons) { 221 for (auto left_button : left_buttons) {
@@ -225,17 +225,17 @@ void JoyconPoller::UpdatePasiveLeftPadInput(const InputReportPassive& input) {
225 } 225 }
226 226
227 const auto [left_axis_x, left_axis_y] = 227 const auto [left_axis_x, left_axis_y] =
228 GetPassiveAxisValue(static_cast<PasivePadStick>(input.stick_state)); 228 GetPassiveAxisValue(static_cast<PassivePadStick>(input.stick_state));
229 callbacks.on_stick_data(static_cast<int>(PadAxes::LeftStickX), left_axis_x); 229 callbacks.on_stick_data(static_cast<int>(PadAxes::LeftStickX), left_axis_x);
230 callbacks.on_stick_data(static_cast<int>(PadAxes::LeftStickY), left_axis_y); 230 callbacks.on_stick_data(static_cast<int>(PadAxes::LeftStickY), left_axis_y);
231} 231}
232 232
233void JoyconPoller::UpdatePasiveRightPadInput(const InputReportPassive& input) { 233void JoyconPoller::UpdatePassiveRightPadInput(const InputReportPassive& input) {
234 static constexpr std::array<PasivePadButton, 11> right_buttons{ 234 static constexpr std::array<PassivePadButton, 11> right_buttons{
235 PasivePadButton::Down_A, PasivePadButton::Right_X, PasivePadButton::Left_B, 235 PassivePadButton::Down_A, PassivePadButton::Right_X, PassivePadButton::Left_B,
236 PasivePadButton::Up_Y, PasivePadButton::SL, PasivePadButton::SR, 236 PassivePadButton::Up_Y, PassivePadButton::SL, PassivePadButton::SR,
237 PasivePadButton::L_R, PasivePadButton::ZL_ZR, PasivePadButton::Plus, 237 PassivePadButton::L_R, PassivePadButton::ZL_ZR, PassivePadButton::Plus,
238 PasivePadButton::Home, PasivePadButton::StickR, 238 PassivePadButton::Home, PassivePadButton::StickR,
239 }; 239 };
240 240
241 for (auto right_button : right_buttons) { 241 for (auto right_button : right_buttons) {
@@ -245,18 +245,18 @@ void JoyconPoller::UpdatePasiveRightPadInput(const InputReportPassive& input) {
245 } 245 }
246 246
247 const auto [right_axis_x, right_axis_y] = 247 const auto [right_axis_x, right_axis_y] =
248 GetPassiveAxisValue(static_cast<PasivePadStick>(input.stick_state)); 248 GetPassiveAxisValue(static_cast<PassivePadStick>(input.stick_state));
249 callbacks.on_stick_data(static_cast<int>(PadAxes::RightStickX), right_axis_x); 249 callbacks.on_stick_data(static_cast<int>(PadAxes::RightStickX), right_axis_x);
250 callbacks.on_stick_data(static_cast<int>(PadAxes::RightStickY), right_axis_y); 250 callbacks.on_stick_data(static_cast<int>(PadAxes::RightStickY), right_axis_y);
251} 251}
252 252
253void JoyconPoller::UpdatePasiveProPadInput(const InputReportPassive& input) { 253void JoyconPoller::UpdatePassiveProPadInput(const InputReportPassive& input) {
254 static constexpr std::array<PasivePadButton, 14> pro_buttons{ 254 static constexpr std::array<PassivePadButton, 14> pro_buttons{
255 PasivePadButton::Down_A, PasivePadButton::Right_X, PasivePadButton::Left_B, 255 PassivePadButton::Down_A, PassivePadButton::Right_X, PassivePadButton::Left_B,
256 PasivePadButton::Up_Y, PasivePadButton::SL, PasivePadButton::SR, 256 PassivePadButton::Up_Y, PassivePadButton::SL, PassivePadButton::SR,
257 PasivePadButton::L_R, PasivePadButton::ZL_ZR, PasivePadButton::Minus, 257 PassivePadButton::L_R, PassivePadButton::ZL_ZR, PassivePadButton::Minus,
258 PasivePadButton::Plus, PasivePadButton::Capture, PasivePadButton::Home, 258 PassivePadButton::Plus, PassivePadButton::Capture, PassivePadButton::Home,
259 PasivePadButton::StickL, PasivePadButton::StickR, 259 PassivePadButton::StickL, PassivePadButton::StickR,
260 }; 260 };
261 261
262 for (auto pro_button : pro_buttons) { 262 for (auto pro_button : pro_buttons) {
@@ -266,9 +266,9 @@ void JoyconPoller::UpdatePasiveProPadInput(const InputReportPassive& input) {
266 } 266 }
267 267
268 const auto [left_axis_x, left_axis_y] = 268 const auto [left_axis_x, left_axis_y] =
269 GetPassiveAxisValue(static_cast<PasivePadStick>(input.stick_state && 0xf)); 269 GetPassiveAxisValue(static_cast<PassivePadStick>(input.stick_state & 0xf));
270 const auto [right_axis_x, right_axis_y] = 270 const auto [right_axis_x, right_axis_y] =
271 GetPassiveAxisValue(static_cast<PasivePadStick>(input.stick_state >> 4)); 271 GetPassiveAxisValue(static_cast<PassivePadStick>(input.stick_state >> 4));
272 callbacks.on_stick_data(static_cast<int>(PadAxes::LeftStickX), left_axis_x); 272 callbacks.on_stick_data(static_cast<int>(PadAxes::LeftStickX), left_axis_x);
273 callbacks.on_stick_data(static_cast<int>(PadAxes::LeftStickY), left_axis_y); 273 callbacks.on_stick_data(static_cast<int>(PadAxes::LeftStickY), left_axis_y);
274 callbacks.on_stick_data(static_cast<int>(PadAxes::RightStickX), right_axis_x); 274 callbacks.on_stick_data(static_cast<int>(PadAxes::RightStickX), right_axis_x);
@@ -283,25 +283,25 @@ f32 JoyconPoller::GetAxisValue(u16 raw_value, Joycon::JoyStickAxisCalibration ca
283 return value / calibration.min; 283 return value / calibration.min;
284} 284}
285 285
286std::pair<f32, f32> JoyconPoller::GetPassiveAxisValue(PasivePadStick raw_value) const { 286std::pair<f32, f32> JoyconPoller::GetPassiveAxisValue(PassivePadStick raw_value) const {
287 switch (raw_value) { 287 switch (raw_value) {
288 case PasivePadStick::Right: 288 case PassivePadStick::Right:
289 return {1.0f, 0.0f}; 289 return {1.0f, 0.0f};
290 case PasivePadStick::RightDown: 290 case PassivePadStick::RightDown:
291 return {1.0f, -1.0f}; 291 return {1.0f, -1.0f};
292 case PasivePadStick::Down: 292 case PassivePadStick::Down:
293 return {0.0f, -1.0f}; 293 return {0.0f, -1.0f};
294 case PasivePadStick::DownLeft: 294 case PassivePadStick::DownLeft:
295 return {-1.0f, -1.0f}; 295 return {-1.0f, -1.0f};
296 case PasivePadStick::Left: 296 case PassivePadStick::Left:
297 return {-1.0f, 0.0f}; 297 return {-1.0f, 0.0f};
298 case PasivePadStick::LeftUp: 298 case PassivePadStick::LeftUp:
299 return {-1.0f, 1.0f}; 299 return {-1.0f, 1.0f};
300 case PasivePadStick::Up: 300 case PassivePadStick::Up:
301 return {0.0f, 1.0f}; 301 return {0.0f, 1.0f};
302 case PasivePadStick::UpRight: 302 case PassivePadStick::UpRight:
303 return {1.0f, 1.0f}; 303 return {1.0f, 1.0f};
304 case PasivePadStick::Neutral: 304 case PassivePadStick::Neutral:
305 default: 305 default:
306 return {0.0f, 0.0f}; 306 return {0.0f, 0.0f};
307 } 307 }
diff --git a/src/input_common/helpers/joycon_protocol/poller.h b/src/input_common/helpers/joycon_protocol/poller.h
index 5c897f070..0fa72c6db 100644
--- a/src/input_common/helpers/joycon_protocol/poller.h
+++ b/src/input_common/helpers/joycon_protocol/poller.h
@@ -46,15 +46,15 @@ private:
46 const MotionStatus& motion_status); 46 const MotionStatus& motion_status);
47 void UpdateActiveProPadInput(const InputReportActive& input, const MotionStatus& motion_status); 47 void UpdateActiveProPadInput(const InputReportActive& input, const MotionStatus& motion_status);
48 48
49 void UpdatePasiveLeftPadInput(const InputReportPassive& buffer); 49 void UpdatePassiveLeftPadInput(const InputReportPassive& buffer);
50 void UpdatePasiveRightPadInput(const InputReportPassive& buffer); 50 void UpdatePassiveRightPadInput(const InputReportPassive& buffer);
51 void UpdatePasiveProPadInput(const InputReportPassive& buffer); 51 void UpdatePassiveProPadInput(const InputReportPassive& buffer);
52 52
53 /// Returns a calibrated joystick axis from raw axis data 53 /// Returns a calibrated joystick axis from raw axis data
54 f32 GetAxisValue(u16 raw_value, JoyStickAxisCalibration calibration) const; 54 f32 GetAxisValue(u16 raw_value, JoyStickAxisCalibration calibration) const;
55 55
56 /// Returns a digital joystick axis from passive axis data 56 /// Returns a digital joystick axis from passive axis data
57 std::pair<f32, f32> GetPassiveAxisValue(PasivePadStick raw_value) const; 57 std::pair<f32, f32> GetPassiveAxisValue(PassivePadStick raw_value) const;
58 58
59 /// Returns a calibrated accelerometer axis from raw motion data 59 /// Returns a calibrated accelerometer axis from raw motion data
60 f32 GetAccelerometerValue(s16 raw, const MotionSensorCalibration& cal, 60 f32 GetAccelerometerValue(s16 raw, const MotionSensorCalibration& cal,