From 74fbca8c809475cb5acee29761d42d8723593436 Mon Sep 17 00:00:00 2001 From: Megamouse Date: Sun, 15 Mar 2026 11:17:23 +0100 Subject: [PATCH] input: simplify mmjoy handler --- rpcs3/Emu/Io/PadHandler.cpp | 147 +++++++++++++-------- rpcs3/Emu/Io/PadHandler.h | 91 ++----------- rpcs3/Input/ds3_pad_handler.cpp | 14 +- rpcs3/Input/ds3_pad_handler.h | 12 +- rpcs3/Input/ds4_pad_handler.cpp | 16 +-- rpcs3/Input/ds4_pad_handler.h | 14 +- rpcs3/Input/dualsense_pad_handler.cpp | 16 +-- rpcs3/Input/dualsense_pad_handler.h | 14 +- rpcs3/Input/evdev_joystick_handler.cpp | 38 +++--- rpcs3/Input/evdev_joystick_handler.h | 10 +- rpcs3/Input/keyboard_pad_handler.cpp | 2 +- rpcs3/Input/mm_joystick_handler.cpp | 170 ++++++++++++------------- rpcs3/Input/mm_joystick_handler.h | 39 +++--- rpcs3/Input/ps_move_handler.cpp | 10 +- rpcs3/Input/ps_move_handler.h | 8 +- rpcs3/Input/sdl_pad_handler.cpp | 16 +-- rpcs3/Input/sdl_pad_handler.h | 14 +- rpcs3/Input/skateboard_pad_handler.cpp | 6 +- rpcs3/Input/skateboard_pad_handler.h | 4 +- rpcs3/Input/xinput_pad_handler.cpp | 22 ++-- rpcs3/Input/xinput_pad_handler.h | 18 ++- 21 files changed, 325 insertions(+), 356 deletions(-) diff --git a/rpcs3/Emu/Io/PadHandler.cpp b/rpcs3/Emu/Io/PadHandler.cpp index a2ae41349e..953e6be55f 100644 --- a/rpcs3/Emu/Io/PadHandler.cpp +++ b/rpcs3/Emu/Io/PadHandler.cpp @@ -11,17 +11,69 @@ PadHandlerBase::PadHandlerBase(pad_handler type) : m_type(type) { } -std::set PadHandlerBase::narrow_set(const std::set& src) +std::set PadHandlerBase::FindKeyCodes(const std::unordered_map& map, const cfg::string& cfg_string, bool fallback) { - if (src.empty()) - return {}; + std::set key_codes; - std::set dst; - for (const u64& s : src) + const std::string& def = cfg_string.def; + const std::vector names = cfg_pad::get_buttons(cfg_string.to_string()); + u32 def_code = umax; + + for (const std::string& nam : names) { - dst.insert(::narrow(s)); + for (const auto& [code, name] : map) + { + if (name == nam) + { + key_codes.insert(code); + } + + if (fallback && name == def) + def_code = code; + } } - return dst; + + if (!key_codes.empty()) + { + return key_codes; + } + + if (fallback) + { + if (!names.empty()) + input_log.error("FindKeyCode for [name = %s] returned with [def_code = %d] for [def = %s]", cfg_string.to_string(), def_code, def); + + if (def_code != umax) + { + return { def_code }; + } + } + + return {}; +} + +std::set PadHandlerBase::FindKeyCodes(const std::unordered_map& map, const std::vector& names) +{ + std::set key_codes; + + for (const std::string& name : names) + { + for (const auto& [code, nam] : map) + { + if (nam == name) + { + key_codes.insert(code); + break; + } + } + } + + if (!key_codes.empty()) + { + return key_codes; + } + + return {}; } s32 PadHandlerBase::MultipliedInput(s32 raw_value, s32 multiplier) @@ -396,7 +448,7 @@ void PadHandlerBase::convert_stick_values(u16& x_out, u16& y_out, s32 x_in, s32 } // Update the pad button values based on their type and thresholds. With this you can use axis or triggers as buttons or vice versa -void PadHandlerBase::TranslateButtonPress(const std::shared_ptr& device, u64 keyCode, bool& pressed, u16& val, bool use_stick_multipliers, bool ignore_stick_threshold, bool ignore_trigger_threshold) +void PadHandlerBase::TranslateButtonPress(const std::shared_ptr& device, u32 keyCode, bool& pressed, u16& val, bool use_stick_multipliers, bool ignore_stick_threshold, bool ignore_trigger_threshold) { if (!device || !device->config) { @@ -556,63 +608,52 @@ std::array, PadHandlerBase::button::button_count> PadHandlerBase:: if (!device || !cfg) return mapping; - device->trigger_code_left = FindKeyCodes(button_list, cfg->l2); - device->trigger_code_right = FindKeyCodes(button_list, cfg->r2); - device->axis_code_left[0] = FindKeyCodes(button_list, cfg->ls_left); - device->axis_code_left[1] = FindKeyCodes(button_list, cfg->ls_right); - device->axis_code_left[2] = FindKeyCodes(button_list, cfg->ls_down); - device->axis_code_left[3] = FindKeyCodes(button_list, cfg->ls_up); - device->axis_code_right[0] = FindKeyCodes(button_list, cfg->rs_left); - device->axis_code_right[1] = FindKeyCodes(button_list, cfg->rs_right); - device->axis_code_right[2] = FindKeyCodes(button_list, cfg->rs_down); - device->axis_code_right[3] = FindKeyCodes(button_list, cfg->rs_up); + mapping[button::up] = FindKeyCodes(button_list, cfg->up); + mapping[button::down] = FindKeyCodes(button_list, cfg->down); + mapping[button::left] = FindKeyCodes(button_list, cfg->left); + mapping[button::right] = FindKeyCodes(button_list, cfg->right); + mapping[button::cross] = FindKeyCodes(button_list, cfg->cross); + mapping[button::square] = FindKeyCodes(button_list, cfg->square); + mapping[button::circle] = FindKeyCodes(button_list, cfg->circle); + mapping[button::triangle] = FindKeyCodes(button_list, cfg->triangle); + mapping[button::start] = FindKeyCodes(button_list, cfg->start); + mapping[button::select] = FindKeyCodes(button_list, cfg->select); + mapping[button::l1] = FindKeyCodes(button_list, cfg->l1); + mapping[button::l2] = FindKeyCodes(button_list, cfg->l2); + mapping[button::l3] = FindKeyCodes(button_list, cfg->l3); + mapping[button::r1] = FindKeyCodes(button_list, cfg->r1); + mapping[button::r2] = FindKeyCodes(button_list, cfg->r2); + mapping[button::r3] = FindKeyCodes(button_list, cfg->r3); + mapping[button::ls_left] = FindKeyCodes(button_list, cfg->ls_left); + mapping[button::ls_right] = FindKeyCodes(button_list, cfg->ls_right); + mapping[button::ls_down] = FindKeyCodes(button_list, cfg->ls_down); + mapping[button::ls_up] = FindKeyCodes(button_list, cfg->ls_up); + mapping[button::rs_left] = FindKeyCodes(button_list, cfg->rs_left); + mapping[button::rs_right] = FindKeyCodes(button_list, cfg->rs_right); + mapping[button::rs_down] = FindKeyCodes(button_list, cfg->rs_down); + mapping[button::rs_up] = FindKeyCodes(button_list, cfg->rs_up); + mapping[button::ps] = FindKeyCodes(button_list, cfg->ps); - mapping[button::up] = FindKeyCodes(button_list, cfg->up); - mapping[button::down] = FindKeyCodes(button_list, cfg->down); - mapping[button::left] = FindKeyCodes(button_list, cfg->left); - mapping[button::right] = FindKeyCodes(button_list, cfg->right); - mapping[button::cross] = FindKeyCodes(button_list, cfg->cross); - mapping[button::square] = FindKeyCodes(button_list, cfg->square); - mapping[button::circle] = FindKeyCodes(button_list, cfg->circle); - mapping[button::triangle] = FindKeyCodes(button_list, cfg->triangle); - mapping[button::start] = FindKeyCodes(button_list, cfg->start); - mapping[button::select] = FindKeyCodes(button_list, cfg->select); - mapping[button::l1] = FindKeyCodes(button_list, cfg->l1); - mapping[button::l2] = narrow_set(device->trigger_code_left); - mapping[button::l3] = FindKeyCodes(button_list, cfg->l3); - mapping[button::r1] = FindKeyCodes(button_list, cfg->r1); - mapping[button::r2] = narrow_set(device->trigger_code_right); - mapping[button::r3] = FindKeyCodes(button_list, cfg->r3); - mapping[button::ls_left] = narrow_set(device->axis_code_left[0]); - mapping[button::ls_right] = narrow_set(device->axis_code_left[1]); - mapping[button::ls_down] = narrow_set(device->axis_code_left[2]); - mapping[button::ls_up] = narrow_set(device->axis_code_left[3]); - mapping[button::rs_left] = narrow_set(device->axis_code_right[0]); - mapping[button::rs_right] = narrow_set(device->axis_code_right[1]); - mapping[button::rs_down] = narrow_set(device->axis_code_right[2]); - mapping[button::rs_up] = narrow_set(device->axis_code_right[3]); - mapping[button::ps] = FindKeyCodes(button_list, cfg->ps); - - mapping[button::skateboard_ir_nose] = FindKeyCodes(button_list, cfg->ir_nose); - mapping[button::skateboard_ir_tail] = FindKeyCodes(button_list, cfg->ir_tail); - mapping[button::skateboard_ir_left] = FindKeyCodes(button_list, cfg->ir_left); - mapping[button::skateboard_ir_right] = FindKeyCodes(button_list, cfg->ir_right); - mapping[button::skateboard_tilt_left] = FindKeyCodes(button_list, cfg->tilt_left); - mapping[button::skateboard_tilt_right] = FindKeyCodes(button_list, cfg->tilt_right); + mapping[button::skateboard_ir_nose] = FindKeyCodes(button_list, cfg->ir_nose); + mapping[button::skateboard_ir_tail] = FindKeyCodes(button_list, cfg->ir_tail); + mapping[button::skateboard_ir_left] = FindKeyCodes(button_list, cfg->ir_left); + mapping[button::skateboard_ir_right] = FindKeyCodes(button_list, cfg->ir_right); + mapping[button::skateboard_tilt_left] = FindKeyCodes(button_list, cfg->tilt_left); + mapping[button::skateboard_tilt_right] = FindKeyCodes(button_list, cfg->tilt_right); if (b_has_pressure_intensity_button) { - mapping[button::pressure_intensity_button] = FindKeyCodes(button_list, cfg->pressure_intensity_button); + mapping[button::pressure_intensity_button] = FindKeyCodes(button_list, cfg->pressure_intensity_button); } if (b_has_analog_limiter_button) { - mapping[button::analog_limiter_button] = FindKeyCodes(button_list, cfg->analog_limiter_button); + mapping[button::analog_limiter_button] = FindKeyCodes(button_list, cfg->analog_limiter_button); } if (b_has_orientation) { - mapping[button::orientation_reset_button] = FindKeyCodes(button_list, cfg->orientation_reset_button); + mapping[button::orientation_reset_button] = FindKeyCodes(button_list, cfg->orientation_reset_button); } return mapping; diff --git a/rpcs3/Emu/Io/PadHandler.h b/rpcs3/Emu/Io/PadHandler.h index a273beb3de..f6d18a63ca 100644 --- a/rpcs3/Emu/Io/PadHandler.h +++ b/rpcs3/Emu/Io/PadHandler.h @@ -36,10 +36,6 @@ public: u8 small_motor{0}; bool new_output_data{true}; steady_clock::time_point last_output; - std::set trigger_code_left{}; - std::set trigger_code_right{}; - std::array, 4> axis_code_left{}; - std::array, 4> axis_code_right{}; struct color { @@ -196,76 +192,11 @@ protected: std::shared_ptr m_pad_for_pad_settings; - static std::set narrow_set(const std::set& src); + // Search an unordered map for a string value and return found keycode + static std::set FindKeyCodes(const std::unordered_map& map, const cfg::string& cfg_string, bool fallback = true); // Search an unordered map for a string value and return found keycode - template - static std::set FindKeyCodes(const std::unordered_map& map, const cfg::string& cfg_string, bool fallback = true) - { - std::set key_codes; - - const std::string& def = cfg_string.def; - const std::vector names = cfg_pad::get_buttons(cfg_string.to_string()); - T def_code = umax; - - for (const std::string& nam : names) - { - for (const auto& [code, name] : map) - { - if (name == nam) - { - key_codes.insert(static_cast(code)); - } - - if (fallback && name == def) - def_code = static_cast(code); - } - } - - if (!key_codes.empty()) - { - return key_codes; - } - - if (fallback) - { - if (!names.empty()) - input_log.error("FindKeyCode for [name = %s] returned with [def_code = %d] for [def = %s]", cfg_string.to_string(), def_code, def); - - if (def_code != umax) - { - return { def_code }; - } - } - - return {}; - } - - // Search an unordered map for a string value and return found keycode - template - static std::set FindKeyCodes(const std::unordered_map& map, const std::vector& names) - { - std::set key_codes; - - for (const std::string& name : names) - { - for (const auto& [code, nam] : map) - { - if (nam == name) - { - key_codes.insert(static_cast(code)); - break; - } - } - } - - if (!key_codes.empty()) - { - return key_codes; - } - - return {}; - } + static std::set FindKeyCodes(const std::unordered_map& map, const std::vector& names); // Get normalized trigger value based on the range defined by a threshold u16 NormalizeTriggerInput(u16 value, u32 threshold) const; @@ -375,23 +306,23 @@ public: private: virtual std::shared_ptr get_device(const std::string& /*device*/) { return nullptr; } - virtual bool get_is_left_trigger(const std::shared_ptr& /*device*/, u64 /*keyCode*/) { return false; } - virtual bool get_is_right_trigger(const std::shared_ptr& /*device*/, u64 /*keyCode*/) { return false; } - virtual bool get_is_left_stick(const std::shared_ptr& /*device*/, u64 /*keyCode*/) { return false; } - virtual bool get_is_right_stick(const std::shared_ptr& /*device*/, u64 /*keyCode*/) { return false; } - virtual bool get_is_touch_pad_motion(const std::shared_ptr& /*device*/, u64 /*keyCode*/) { return false; } + virtual bool get_is_left_trigger(const std::shared_ptr& /*device*/, u32 /*keyCode*/) { return false; } + virtual bool get_is_right_trigger(const std::shared_ptr& /*device*/, u32 /*keyCode*/) { return false; } + virtual bool get_is_left_stick(const std::shared_ptr& /*device*/, u32 /*keyCode*/) { return false; } + virtual bool get_is_right_stick(const std::shared_ptr& /*device*/, u32 /*keyCode*/) { return false; } + virtual bool get_is_touch_pad_motion(const std::shared_ptr& /*device*/, u32 /*keyCode*/) { return false; } virtual PadHandlerBase::connection update_connection(const std::shared_ptr& /*device*/) { return connection::disconnected; } virtual void get_extended_info(const pad_ensemble& /*binding*/) {} virtual void apply_pad_data(const pad_ensemble& /*binding*/) {} - virtual std::unordered_map get_button_values(const std::shared_ptr& /*device*/) { return {}; } - virtual pad_preview_values get_preview_values(const std::unordered_map& /*data*/) { return {}; } + virtual std::unordered_map get_button_values(const std::shared_ptr& /*device*/) { return {}; } + virtual pad_preview_values get_preview_values(const std::unordered_map& /*data*/) { return {}; } void get_orientation(const pad_ensemble& binding) const; protected: virtual std::array, PadHandlerBase::button::button_count> get_mapped_key_codes(const std::shared_ptr& device, const cfg_pad* cfg); virtual void get_mapping(const pad_ensemble& binding); - void TranslateButtonPress(const std::shared_ptr& device, u64 keyCode, bool& pressed, u16& val, bool use_stick_multipliers, bool ignore_stick_threshold = false, bool ignore_trigger_threshold = false); + void TranslateButtonPress(const std::shared_ptr& device, u32 keyCode, bool& pressed, u16& val, bool use_stick_multipliers, bool ignore_stick_threshold = false, bool ignore_trigger_threshold = false); void init_configs(); cfg_pad* get_config(const std::string& pad_id); diff --git a/rpcs3/Input/ds3_pad_handler.cpp b/rpcs3/Input/ds3_pad_handler.cpp index 8d8318ce45..dfeb174a2c 100644 --- a/rpcs3/Input/ds3_pad_handler.cpp +++ b/rpcs3/Input/ds3_pad_handler.cpp @@ -348,9 +348,9 @@ ds3_pad_handler::DataStatus ds3_pad_handler::get_data(ds3_device* ds3dev) return DataStatus::NoNewData; } -std::unordered_map ds3_pad_handler::get_button_values(const std::shared_ptr& device) +std::unordered_map ds3_pad_handler::get_button_values(const std::shared_ptr& device) { - std::unordered_map key_buf; + std::unordered_map key_buf; ds3_device* dev = static_cast(device.get()); if (!dev) return key_buf; @@ -397,7 +397,7 @@ std::unordered_map ds3_pad_handler::get_button_values(const std::share return key_buf; } -pad_preview_values ds3_pad_handler::get_preview_values(const std::unordered_map& data) +pad_preview_values ds3_pad_handler::get_preview_values(const std::unordered_map& data) { return { ::at32(data, L2), @@ -460,17 +460,17 @@ void ds3_pad_handler::get_extended_info(const pad_ensemble& binding) set_raw_orientation(*pad); } -bool ds3_pad_handler::get_is_left_trigger(const std::shared_ptr& /*device*/, u64 keyCode) +bool ds3_pad_handler::get_is_left_trigger(const std::shared_ptr& /*device*/, u32 keyCode) { return keyCode == DS3KeyCodes::L2; } -bool ds3_pad_handler::get_is_right_trigger(const std::shared_ptr& /*device*/, u64 keyCode) +bool ds3_pad_handler::get_is_right_trigger(const std::shared_ptr& /*device*/, u32 keyCode) { return keyCode == DS3KeyCodes::R2; } -bool ds3_pad_handler::get_is_left_stick(const std::shared_ptr& /*device*/, u64 keyCode) +bool ds3_pad_handler::get_is_left_stick(const std::shared_ptr& /*device*/, u32 keyCode) { switch (keyCode) { @@ -484,7 +484,7 @@ bool ds3_pad_handler::get_is_left_stick(const std::shared_ptr& /*devi } } -bool ds3_pad_handler::get_is_right_stick(const std::shared_ptr& /*device*/, u64 keyCode) +bool ds3_pad_handler::get_is_right_stick(const std::shared_ptr& /*device*/, u32 keyCode) { switch (keyCode) { diff --git a/rpcs3/Input/ds3_pad_handler.h b/rpcs3/Input/ds3_pad_handler.h index 47dfbf4587..6b0423903c 100644 --- a/rpcs3/Input/ds3_pad_handler.h +++ b/rpcs3/Input/ds3_pad_handler.h @@ -147,13 +147,13 @@ private: int send_output_report(ds3_device* ds3dev) override; void check_add_device(hid_device* hidDevice, hid_enumerated_device_view path, std::wstring_view serial) override; - bool get_is_left_trigger(const std::shared_ptr& device, u64 keyCode) override; - bool get_is_right_trigger(const std::shared_ptr& device, u64 keyCode) override; - bool get_is_left_stick(const std::shared_ptr& device, u64 keyCode) override; - bool get_is_right_stick(const std::shared_ptr& device, u64 keyCode) override; + bool get_is_left_trigger(const std::shared_ptr& device, u32 keyCode) override; + bool get_is_right_trigger(const std::shared_ptr& device, u32 keyCode) override; + bool get_is_left_stick(const std::shared_ptr& device, u32 keyCode) override; + bool get_is_right_stick(const std::shared_ptr& device, u32 keyCode) override; PadHandlerBase::connection update_connection(const std::shared_ptr& device) override; void get_extended_info(const pad_ensemble& binding) override; void apply_pad_data(const pad_ensemble& binding) override; - std::unordered_map get_button_values(const std::shared_ptr& device) override; - pad_preview_values get_preview_values(const std::unordered_map& data) override; + std::unordered_map get_button_values(const std::shared_ptr& device) override; + pad_preview_values get_preview_values(const std::unordered_map& data) override; }; diff --git a/rpcs3/Input/ds4_pad_handler.cpp b/rpcs3/Input/ds4_pad_handler.cpp index 77c59fc48f..50d38773a3 100644 --- a/rpcs3/Input/ds4_pad_handler.cpp +++ b/rpcs3/Input/ds4_pad_handler.cpp @@ -250,9 +250,9 @@ void ds4_pad_handler::SetPadData(const std::string& padId, u8 player_id, u8 larg } } -std::unordered_map ds4_pad_handler::get_button_values(const std::shared_ptr& device) +std::unordered_map ds4_pad_handler::get_button_values(const std::shared_ptr& device) { - std::unordered_map keyBuffer; + std::unordered_map keyBuffer; DS4Device* dev = static_cast(device.get()); if (!dev) return keyBuffer; @@ -405,7 +405,7 @@ std::unordered_map ds4_pad_handler::get_button_values(const std::share return keyBuffer; } -pad_preview_values ds4_pad_handler::get_preview_values(const std::unordered_map& data) +pad_preview_values ds4_pad_handler::get_preview_values(const std::unordered_map& data) { return { ::at32(data, L2), @@ -774,17 +774,17 @@ ds4_pad_handler::DataStatus ds4_pad_handler::get_data(DS4Device* device) return DataStatus::NewData; } -bool ds4_pad_handler::get_is_left_trigger(const std::shared_ptr& /*device*/, u64 keyCode) +bool ds4_pad_handler::get_is_left_trigger(const std::shared_ptr& /*device*/, u32 keyCode) { return keyCode == DS4KeyCodes::L2; } -bool ds4_pad_handler::get_is_right_trigger(const std::shared_ptr& /*device*/, u64 keyCode) +bool ds4_pad_handler::get_is_right_trigger(const std::shared_ptr& /*device*/, u32 keyCode) { return keyCode == DS4KeyCodes::R2; } -bool ds4_pad_handler::get_is_left_stick(const std::shared_ptr& /*device*/, u64 keyCode) +bool ds4_pad_handler::get_is_left_stick(const std::shared_ptr& /*device*/, u32 keyCode) { switch (keyCode) { @@ -798,7 +798,7 @@ bool ds4_pad_handler::get_is_left_stick(const std::shared_ptr& /*devi } } -bool ds4_pad_handler::get_is_right_stick(const std::shared_ptr& /*device*/, u64 keyCode) +bool ds4_pad_handler::get_is_right_stick(const std::shared_ptr& /*device*/, u32 keyCode) { switch (keyCode) { @@ -812,7 +812,7 @@ bool ds4_pad_handler::get_is_right_stick(const std::shared_ptr& /*dev } } -bool ds4_pad_handler::get_is_touch_pad_motion(const std::shared_ptr& /*device*/, u64 keyCode) +bool ds4_pad_handler::get_is_touch_pad_motion(const std::shared_ptr& /*device*/, u32 keyCode) { switch (keyCode) { diff --git a/rpcs3/Input/ds4_pad_handler.h b/rpcs3/Input/ds4_pad_handler.h index 4fdb829d73..da663090ad 100644 --- a/rpcs3/Input/ds4_pad_handler.h +++ b/rpcs3/Input/ds4_pad_handler.h @@ -186,14 +186,14 @@ private: int send_output_report(DS4Device* device) override; void check_add_device(hid_device* hidDevice, hid_enumerated_device_view path, std::wstring_view serial) override; - bool get_is_left_trigger(const std::shared_ptr& device, u64 keyCode) override; - bool get_is_right_trigger(const std::shared_ptr& device, u64 keyCode) override; - bool get_is_left_stick(const std::shared_ptr& device, u64 keyCode) override; - bool get_is_right_stick(const std::shared_ptr& device, u64 keyCode) override; - bool get_is_touch_pad_motion(const std::shared_ptr& device, u64 keyCode) override; + bool get_is_left_trigger(const std::shared_ptr& device, u32 keyCode) override; + bool get_is_right_trigger(const std::shared_ptr& device, u32 keyCode) override; + bool get_is_left_stick(const std::shared_ptr& device, u32 keyCode) override; + bool get_is_right_stick(const std::shared_ptr& device, u32 keyCode) override; + bool get_is_touch_pad_motion(const std::shared_ptr& device, u32 keyCode) override; PadHandlerBase::connection update_connection(const std::shared_ptr& device) override; void get_extended_info(const pad_ensemble& binding) override; void apply_pad_data(const pad_ensemble& binding) override; - std::unordered_map get_button_values(const std::shared_ptr& device) override; - pad_preview_values get_preview_values(const std::unordered_map& data) override; + std::unordered_map get_button_values(const std::shared_ptr& device) override; + pad_preview_values get_preview_values(const std::unordered_map& data) override; }; diff --git a/rpcs3/Input/dualsense_pad_handler.cpp b/rpcs3/Input/dualsense_pad_handler.cpp index 5585c0ef12..91713afa34 100644 --- a/rpcs3/Input/dualsense_pad_handler.cpp +++ b/rpcs3/Input/dualsense_pad_handler.cpp @@ -505,17 +505,17 @@ bool dualsense_pad_handler::get_calibration_data(DualSenseDevice* dev) const return true; } -bool dualsense_pad_handler::get_is_left_trigger(const std::shared_ptr& /*device*/, u64 keyCode) +bool dualsense_pad_handler::get_is_left_trigger(const std::shared_ptr& /*device*/, u32 keyCode) { return keyCode == DualSenseKeyCodes::L2; } -bool dualsense_pad_handler::get_is_right_trigger(const std::shared_ptr& /*device*/, u64 keyCode) +bool dualsense_pad_handler::get_is_right_trigger(const std::shared_ptr& /*device*/, u32 keyCode) { return keyCode == DualSenseKeyCodes::R2; } -bool dualsense_pad_handler::get_is_left_stick(const std::shared_ptr& /*device*/, u64 keyCode) +bool dualsense_pad_handler::get_is_left_stick(const std::shared_ptr& /*device*/, u32 keyCode) { switch (keyCode) { @@ -529,7 +529,7 @@ bool dualsense_pad_handler::get_is_left_stick(const std::shared_ptr& } } -bool dualsense_pad_handler::get_is_right_stick(const std::shared_ptr& /*device*/, u64 keyCode) +bool dualsense_pad_handler::get_is_right_stick(const std::shared_ptr& /*device*/, u32 keyCode) { switch (keyCode) { @@ -543,7 +543,7 @@ bool dualsense_pad_handler::get_is_right_stick(const std::shared_ptr& } } -bool dualsense_pad_handler::get_is_touch_pad_motion(const std::shared_ptr& /*device*/, u64 keyCode) +bool dualsense_pad_handler::get_is_touch_pad_motion(const std::shared_ptr& /*device*/, u32 keyCode) { switch (keyCode) { @@ -635,9 +635,9 @@ void dualsense_pad_handler::get_extended_info(const pad_ensemble& binding) set_raw_orientation(pad->move_data, accel_x, accel_y, accel_z, gyro_x, gyro_y, gyro_z); } -std::unordered_map dualsense_pad_handler::get_button_values(const std::shared_ptr& device) +std::unordered_map dualsense_pad_handler::get_button_values(const std::shared_ptr& device) { - std::unordered_map keyBuffer; + std::unordered_map keyBuffer; DualSenseDevice* dev = static_cast(device.get()); if (!dev) return keyBuffer; @@ -777,7 +777,7 @@ std::unordered_map dualsense_pad_handler::get_button_values(const std: return keyBuffer; } -pad_preview_values dualsense_pad_handler::get_preview_values(const std::unordered_map& data) +pad_preview_values dualsense_pad_handler::get_preview_values(const std::unordered_map& data) { return { ::at32(data, L2), diff --git a/rpcs3/Input/dualsense_pad_handler.h b/rpcs3/Input/dualsense_pad_handler.h index 77b85f320b..c4bc8687c8 100644 --- a/rpcs3/Input/dualsense_pad_handler.h +++ b/rpcs3/Input/dualsense_pad_handler.h @@ -248,14 +248,14 @@ private: void check_add_device(hid_device* hidDevice, hid_enumerated_device_view path, std::wstring_view wide_serial) override; int send_output_report(DualSenseDevice* device) override; - bool get_is_left_trigger(const std::shared_ptr& device, u64 keyCode) override; - bool get_is_right_trigger(const std::shared_ptr& device, u64 keyCode) override; - bool get_is_left_stick(const std::shared_ptr& device, u64 keyCode) override; - bool get_is_right_stick(const std::shared_ptr& device, u64 keyCode) override; - bool get_is_touch_pad_motion(const std::shared_ptr& device, u64 keyCode) override; + bool get_is_left_trigger(const std::shared_ptr& device, u32 keyCode) override; + bool get_is_right_trigger(const std::shared_ptr& device, u32 keyCode) override; + bool get_is_left_stick(const std::shared_ptr& device, u32 keyCode) override; + bool get_is_right_stick(const std::shared_ptr& device, u32 keyCode) override; + bool get_is_touch_pad_motion(const std::shared_ptr& device, u32 keyCode) override; PadHandlerBase::connection update_connection(const std::shared_ptr& device) override; - std::unordered_map get_button_values(const std::shared_ptr& device) override; - pad_preview_values get_preview_values(const std::unordered_map& data) override; + std::unordered_map get_button_values(const std::shared_ptr& device) override; + pad_preview_values get_preview_values(const std::unordered_map& data) override; void get_extended_info(const pad_ensemble& binding) override; void apply_pad_data(const pad_ensemble& binding) override; }; diff --git a/rpcs3/Input/evdev_joystick_handler.cpp b/rpcs3/Input/evdev_joystick_handler.cpp index 03f2016c27..07c39aab26 100644 --- a/rpcs3/Input/evdev_joystick_handler.cpp +++ b/rpcs3/Input/evdev_joystick_handler.cpp @@ -259,9 +259,9 @@ void evdev_joystick_handler::close_devices() } } -std::unordered_map> evdev_joystick_handler::GetButtonValues(const std::shared_ptr& device) +std::unordered_map> evdev_joystick_handler::GetButtonValues(const std::shared_ptr& device) { - std::unordered_map> button_values; + std::unordered_map> button_values; if (!device) return button_values; @@ -379,23 +379,23 @@ PadHandlerBase::connection evdev_joystick_handler::get_next_button_press(const s const auto set_value = [&value, &data](u32 code, bool dir) { - if (const auto it = data.find(static_cast(code)); it != data.cend() && dir == it->second.second) + if (const auto it = data.find(code); it != data.cend() && dir == it->second.second) { value = std::max(value, it->second.first); } }; - for (const u32 code : FindKeyCodes(rev_axis_list, names)) + for (const u32 code : FindKeyCodes(rev_axis_list, names)) { set_value(code, true); } - for (const u32 code : FindKeyCodes(axis_list, names)) + for (const u32 code : FindKeyCodes(axis_list, names)) { set_value(code, false); } - for (const u32 code : FindKeyCodes(button_list, names)) + for (const u32 code : FindKeyCodes(button_list, names)) { set_value(code, false); } @@ -435,7 +435,7 @@ PadHandlerBase::connection evdev_joystick_handler::get_next_button_press(const s return; // Ignore codes that aren't part of the latest events. Otherwise we will get value 0 which will reset our min_value. - const auto it = data.find(static_cast(code)); + const auto it = data.find(code); if (it == data.cend()) { if (call_type == gui_call_type::reset_input) @@ -1351,17 +1351,17 @@ bool evdev_joystick_handler::bindPadToDevice(std::shared_ptr pad) // In evdev we store indices to an EvdevButton vector in our pad objects instead of the usual key codes. std::set indices; - for (const u32 code : FindKeyCodes(axis_list, names)) + for (const u32 code : FindKeyCodes(axis_list, names)) { indices.insert(register_evdevbutton(code, true, false)); } - for (const u32 code : FindKeyCodes(rev_axis_list, names)) + for (const u32 code : FindKeyCodes(rev_axis_list, names)) { indices.insert(register_evdevbutton(code, true, true)); } - for (const u32 code : FindKeyCodes(button_list, names)) + for (const u32 code : FindKeyCodes(button_list, names)) { indices.insert(register_evdevbutton(code, false, false)); } @@ -1376,7 +1376,7 @@ bool evdev_joystick_handler::bindPadToDevice(std::shared_ptr pad) e_sensor.mirrored = sensor.mirrored.get(); e_sensor.shift = sensor.shift.get(); - const std::set keys = FindKeyCodes(motion_axis_list, sensor.axis); + const std::set keys = FindKeyCodes(motion_axis_list, sensor.axis); if (!keys.empty()) e_sensor.code = *keys.begin(); // We should only have one key for each of our sensors return e_sensor; }; @@ -1533,24 +1533,24 @@ bool evdev_joystick_handler::check_button_sets(const std::array, 4 return std::any_of(sets.begin(), sets.end(), [this, code](const std::set& indices) { return check_button_set(indices, code); }); }; -bool evdev_joystick_handler::get_is_left_trigger(const std::shared_ptr& /*device*/, u64 keyCode) +bool evdev_joystick_handler::get_is_left_trigger(const std::shared_ptr& /*device*/, u32 keyCode) { - return check_button_set(m_dev->trigger_left, static_cast(keyCode)); + return check_button_set(m_dev->trigger_left, keyCode); } -bool evdev_joystick_handler::get_is_right_trigger(const std::shared_ptr& /*device*/, u64 keyCode) +bool evdev_joystick_handler::get_is_right_trigger(const std::shared_ptr& /*device*/, u32 keyCode) { - return check_button_set(m_dev->trigger_right, static_cast(keyCode)); + return check_button_set(m_dev->trigger_right, keyCode); } -bool evdev_joystick_handler::get_is_left_stick(const std::shared_ptr& /*device*/, u64 keyCode) +bool evdev_joystick_handler::get_is_left_stick(const std::shared_ptr& /*device*/, u32 keyCode) { - return check_button_sets(m_dev->axis_left, static_cast(keyCode)); + return check_button_sets(m_dev->axis_left, keyCode); } -bool evdev_joystick_handler::get_is_right_stick(const std::shared_ptr& /*device*/, u64 keyCode) +bool evdev_joystick_handler::get_is_right_stick(const std::shared_ptr& /*device*/, u32 keyCode) { - return check_button_sets(m_dev->axis_right, static_cast(keyCode)); + return check_button_sets(m_dev->axis_right, keyCode); } #endif diff --git a/rpcs3/Input/evdev_joystick_handler.h b/rpcs3/Input/evdev_joystick_handler.h index 6919a32205..a76426e3fb 100644 --- a/rpcs3/Input/evdev_joystick_handler.h +++ b/rpcs3/Input/evdev_joystick_handler.h @@ -397,7 +397,7 @@ private: bool update_device(const std::shared_ptr& device); std::shared_ptr add_device(const std::string& device, bool in_settings = false); std::shared_ptr add_motion_device(const std::string& device, bool in_settings); - std::unordered_map> GetButtonValues(const std::shared_ptr& device); + std::unordered_map> GetButtonValues(const std::shared_ptr& device); void SetRumble(EvdevDevice* device, u8 large, u8 small); positive_axis m_pos_axis_config; @@ -420,10 +420,10 @@ protected: void get_mapping(const pad_ensemble& binding) override; void get_extended_info(const pad_ensemble& binding) override; void apply_pad_data(const pad_ensemble& binding) override; - bool get_is_left_trigger(const std::shared_ptr& device, u64 keyCode) override; - bool get_is_right_trigger(const std::shared_ptr& device, u64 keyCode) override; - bool get_is_left_stick(const std::shared_ptr& device, u64 keyCode) override; - bool get_is_right_stick(const std::shared_ptr& device, u64 keyCode) override; + bool get_is_left_trigger(const std::shared_ptr& device, u32 keyCode) override; + bool get_is_right_trigger(const std::shared_ptr& device, u32 keyCode) override; + bool get_is_left_stick(const std::shared_ptr& device, u32 keyCode) override; + bool get_is_right_stick(const std::shared_ptr& device, u32 keyCode) override; }; #endif diff --git a/rpcs3/Input/keyboard_pad_handler.cpp b/rpcs3/Input/keyboard_pad_handler.cpp index e70cf8d45b..3aca96100d 100644 --- a/rpcs3/Input/keyboard_pad_handler.cpp +++ b/rpcs3/Input/keyboard_pad_handler.cpp @@ -980,7 +980,7 @@ bool keyboard_pad_handler::bindPadToDevice(std::shared_ptr pad) const auto find_keys = [this](const cfg::string& name) { - std::set keys = FindKeyCodes(mouse_list, name, false); + std::set keys = FindKeyCodes(mouse_list, name, false); for (const u32& key : GetKeyCodes(name)) keys.insert(key); if (!keys.empty()) diff --git a/rpcs3/Input/mm_joystick_handler.cpp b/rpcs3/Input/mm_joystick_handler.cpp index fed1f428df..8861f74b0d 100644 --- a/rpcs3/Input/mm_joystick_handler.cpp +++ b/rpcs3/Input/mm_joystick_handler.cpp @@ -34,23 +34,23 @@ void mm_joystick_handler::init_config(cfg_pad* cfg) cfg->rs_down.def = ::at32(axis_list, mmjoy_axis::joy_r_neg); cfg->rs_right.def = ::at32(axis_list, mmjoy_axis::joy_z_pos); cfg->rs_up.def = ::at32(axis_list, mmjoy_axis::joy_r_pos); - cfg->start.def = ::at32(button_list, JOY_BUTTON9); - cfg->select.def = ::at32(button_list, JOY_BUTTON10); - cfg->ps.def = ::at32(button_list, JOY_BUTTON17); - cfg->square.def = ::at32(button_list, JOY_BUTTON4); - cfg->cross.def = ::at32(button_list, JOY_BUTTON3); - cfg->circle.def = ::at32(button_list, JOY_BUTTON2); - cfg->triangle.def = ::at32(button_list, JOY_BUTTON1); - cfg->left.def = ::at32(pov_list, JOY_POVLEFT); - cfg->down.def = ::at32(pov_list, JOY_POVBACKWARD); - cfg->right.def = ::at32(pov_list, JOY_POVRIGHT); - cfg->up.def = ::at32(pov_list, JOY_POVFORWARD); - cfg->r1.def = ::at32(button_list, JOY_BUTTON8); - cfg->r2.def = ::at32(button_list, JOY_BUTTON6); - cfg->r3.def = ::at32(button_list, JOY_BUTTON12); - cfg->l1.def = ::at32(button_list, JOY_BUTTON7); - cfg->l2.def = ::at32(button_list, JOY_BUTTON5); - cfg->l3.def = ::at32(button_list, JOY_BUTTON11); + cfg->start.def = ::at32(button_list, static_cast(JOY_BUTTON9)); + cfg->select.def = ::at32(button_list, static_cast(JOY_BUTTON10)); + cfg->ps.def = ::at32(button_list, static_cast(JOY_BUTTON17)); + cfg->square.def = ::at32(button_list, static_cast(JOY_BUTTON4)); + cfg->cross.def = ::at32(button_list, static_cast(JOY_BUTTON3)); + cfg->circle.def = ::at32(button_list, static_cast(JOY_BUTTON2)); + cfg->triangle.def = ::at32(button_list, static_cast(JOY_BUTTON1)); + cfg->left.def = ::at32(pov_list, static_cast(JOY_POVLEFT)); + cfg->down.def = ::at32(pov_list, static_cast(JOY_POVBACKWARD)); + cfg->right.def = ::at32(pov_list, static_cast(JOY_POVRIGHT)); + cfg->up.def = ::at32(pov_list, static_cast(JOY_POVFORWARD)); + cfg->r1.def = ::at32(button_list, static_cast(JOY_BUTTON8)); + cfg->r2.def = ::at32(button_list, static_cast(JOY_BUTTON6)); + cfg->r3.def = ::at32(button_list, static_cast(JOY_BUTTON12)); + cfg->l1.def = ::at32(button_list, static_cast(JOY_BUTTON7)); + cfg->l2.def = ::at32(button_list, static_cast(JOY_BUTTON5)); + cfg->l3.def = ::at32(button_list, static_cast(JOY_BUTTON11)); cfg->pressure_intensity_button.def = ::at32(button_list, NO_BUTTON); cfg->analog_limiter_button.def = ::at32(button_list, NO_BUTTON); @@ -102,7 +102,7 @@ void mm_joystick_handler::enumerate_devices() { MMJOYDevice dev; - if (GetMMJOYDevice(i, &dev) == false) + if (get_device(i, &dev) == false) continue; auto it = m_devices.find(dev.device_name); @@ -145,20 +145,18 @@ std::vector mm_joystick_handler::list_devices() return devices; } -template -std::set mm_joystick_handler::find_keys(const cfg::string& cfg_string) const +std::set mm_joystick_handler::find_keys(const cfg::string& cfg_string) const { - return find_keys(cfg_pad::get_buttons(cfg_string.to_string())); + return find_keys(cfg_pad::get_buttons(cfg_string.to_string())); } -template -std::set mm_joystick_handler::find_keys(const std::vector& names) const +std::set mm_joystick_handler::find_keys(const std::vector& names) const { - std::set keys; + std::set keys; - for (const T& k : FindKeyCodes(axis_list, names)) keys.insert(k); - for (const T& k : FindKeyCodes(pov_list, names)) keys.insert(k); - for (const T& k : FindKeyCodes(button_list, names)) keys.insert(k); + for (u32 k : FindKeyCodes(axis_list, names)) keys.insert(k); + for (u32 k : FindKeyCodes(pov_list, names)) keys.insert(k); + for (u32 k : FindKeyCodes(button_list, names)) keys.insert(k); return keys; } @@ -171,58 +169,58 @@ std::array, PadHandlerBase::button::button_count> mm_joystick_hand if (!dev || !cfg) return mapping; - dev->trigger_code_left = find_keys(cfg->l2); - dev->trigger_code_right = find_keys(cfg->r2); - dev->axis_code_left[0] = find_keys(cfg->ls_left); - dev->axis_code_left[1] = find_keys(cfg->ls_right); - dev->axis_code_left[2] = find_keys(cfg->ls_down); - dev->axis_code_left[3] = find_keys(cfg->ls_up); - dev->axis_code_right[0] = find_keys(cfg->rs_left); - dev->axis_code_right[1] = find_keys(cfg->rs_right); - dev->axis_code_right[2] = find_keys(cfg->rs_down); - dev->axis_code_right[3] = find_keys(cfg->rs_up); + dev->trigger_code_left = find_keys(cfg->l2); + dev->trigger_code_right = find_keys(cfg->r2); + dev->axis_code_left[0] = find_keys(cfg->ls_left); + dev->axis_code_left[1] = find_keys(cfg->ls_right); + dev->axis_code_left[2] = find_keys(cfg->ls_down); + dev->axis_code_left[3] = find_keys(cfg->ls_up); + dev->axis_code_right[0] = find_keys(cfg->rs_left); + dev->axis_code_right[1] = find_keys(cfg->rs_right); + dev->axis_code_right[2] = find_keys(cfg->rs_down); + dev->axis_code_right[3] = find_keys(cfg->rs_up); - mapping[button::up] = find_keys(cfg->up); - mapping[button::down] = find_keys(cfg->down); - mapping[button::left] = find_keys(cfg->left); - mapping[button::right] = find_keys(cfg->right); - mapping[button::cross] = find_keys(cfg->cross); - mapping[button::square] = find_keys(cfg->square); - mapping[button::circle] = find_keys(cfg->circle); - mapping[button::triangle] = find_keys(cfg->triangle); - mapping[button::l1] = find_keys(cfg->l1); - mapping[button::l2] = narrow_set(dev->trigger_code_left); - mapping[button::l3] = find_keys(cfg->l3); - mapping[button::r1] = find_keys(cfg->r1); - mapping[button::r2] = narrow_set(dev->trigger_code_right); - mapping[button::r3] = find_keys(cfg->r3); - mapping[button::start] = find_keys(cfg->start); - mapping[button::select] = find_keys(cfg->select); - mapping[button::ps] = find_keys(cfg->ps); - mapping[button::ls_left] = narrow_set(dev->axis_code_left[0]); - mapping[button::ls_right] = narrow_set(dev->axis_code_left[1]); - mapping[button::ls_down] = narrow_set(dev->axis_code_left[2]); - mapping[button::ls_up] = narrow_set(dev->axis_code_left[3]); - mapping[button::rs_left] = narrow_set(dev->axis_code_right[0]); - mapping[button::rs_right] = narrow_set(dev->axis_code_right[1]); - mapping[button::rs_down] = narrow_set(dev->axis_code_right[2]); - mapping[button::rs_up] = narrow_set(dev->axis_code_right[3]); + mapping[button::up] = find_keys(cfg->up); + mapping[button::down] = find_keys(cfg->down); + mapping[button::left] = find_keys(cfg->left); + mapping[button::right] = find_keys(cfg->right); + mapping[button::cross] = find_keys(cfg->cross); + mapping[button::square] = find_keys(cfg->square); + mapping[button::circle] = find_keys(cfg->circle); + mapping[button::triangle] = find_keys(cfg->triangle); + mapping[button::l1] = find_keys(cfg->l1); + mapping[button::l2] = dev->trigger_code_left; + mapping[button::l3] = find_keys(cfg->l3); + mapping[button::r1] = find_keys(cfg->r1); + mapping[button::r2] = dev->trigger_code_right; + mapping[button::r3] = find_keys(cfg->r3); + mapping[button::start] = find_keys(cfg->start); + mapping[button::select] = find_keys(cfg->select); + mapping[button::ps] = find_keys(cfg->ps); + mapping[button::ls_left] = dev->axis_code_left[0]; + mapping[button::ls_right] = dev->axis_code_left[1]; + mapping[button::ls_down] = dev->axis_code_left[2]; + mapping[button::ls_up] = dev->axis_code_left[3]; + mapping[button::rs_left] = dev->axis_code_right[0]; + mapping[button::rs_right] = dev->axis_code_right[1]; + mapping[button::rs_down] = dev->axis_code_right[2]; + mapping[button::rs_up] = dev->axis_code_right[3]; - mapping[button::skateboard_ir_nose] = find_keys(cfg->ir_nose); - mapping[button::skateboard_ir_tail] = find_keys(cfg->ir_tail); - mapping[button::skateboard_ir_left] = find_keys(cfg->ir_left); - mapping[button::skateboard_ir_right] = find_keys(cfg->ir_right); - mapping[button::skateboard_tilt_left] = find_keys(cfg->tilt_left); - mapping[button::skateboard_tilt_right] = find_keys(cfg->tilt_right); + mapping[button::skateboard_ir_nose] = find_keys(cfg->ir_nose); + mapping[button::skateboard_ir_tail] = find_keys(cfg->ir_tail); + mapping[button::skateboard_ir_left] = find_keys(cfg->ir_left); + mapping[button::skateboard_ir_right] = find_keys(cfg->ir_right); + mapping[button::skateboard_tilt_left] = find_keys(cfg->tilt_left); + mapping[button::skateboard_tilt_right] = find_keys(cfg->tilt_right); if (b_has_pressure_intensity_button) { - mapping[button::pressure_intensity_button] = find_keys(cfg->pressure_intensity_button); + mapping[button::pressure_intensity_button] = find_keys(cfg->pressure_intensity_button); } if (b_has_analog_limiter_button) { - mapping[button::analog_limiter_button] = find_keys(cfg->analog_limiter_button); + mapping[button::analog_limiter_button] = find_keys(cfg->analog_limiter_button); } return mapping; @@ -295,7 +293,7 @@ PadHandlerBase::connection mm_joystick_handler::get_next_button_press(const std: std::string name; } pressed_button{}; - const auto set_button_press = [&](const u64& keycode, const std::string& name, std::string_view type, u16 threshold) + const auto set_button_press = [&](u32 keycode, const std::string& name, std::string_view type, u16 threshold) { if (call_type != gui_call_type::blacklist && m_blacklist.contains(keycode)) return; @@ -365,7 +363,7 @@ PadHandlerBase::connection mm_joystick_handler::get_next_button_press(const std: const auto get_key_value = [this, &data](const std::string& str) -> u16 { u16 value{}; - for (u32 key_code : find_keys(cfg_pad::get_buttons(str))) + for (u32 key_code : find_keys(cfg_pad::get_buttons(str))) { if (const auto it = data.find(key_code); it != data.cend()) { @@ -399,9 +397,9 @@ PadHandlerBase::connection mm_joystick_handler::get_next_button_press(const std: return connection::no_data; } -std::unordered_map mm_joystick_handler::GetButtonValues(const JOYINFOEX& js_info, const JOYCAPS& js_caps) +std::unordered_map mm_joystick_handler::GetButtonValues(const JOYINFOEX& js_info, const JOYCAPS& js_caps) { - std::unordered_map button_values; + std::unordered_map button_values; for (const auto& entry : button_list) { @@ -424,7 +422,7 @@ std::unordered_map mm_joystick_handler::GetButtonValues(const JOYINFOE } else { - auto emplacePOVs = [&](float val, u64 pov_neg, u64 pov_pos) + const auto emplacePOVs = [&](float val, u32 pov_neg, u32 pov_pos) { if (val < 0) { @@ -461,7 +459,7 @@ std::unordered_map mm_joystick_handler::GetButtonValues(const JOYINFOE } } - auto add_axis_value = [&](DWORD axis, UINT min, UINT max, u64 pos, u64 neg) + auto add_axis_value = [&](DWORD axis, UINT min, UINT max, u32 pos, u32 neg) { constexpr f32 deadzone = 0.0f; const float val = ScaledAxisInput(static_cast(axis), static_cast(min), static_cast(max), deadzone); @@ -495,11 +493,11 @@ std::unordered_map mm_joystick_handler::GetButtonValues(const JOYINFOE return button_values; } -std::unordered_map mm_joystick_handler::get_button_values(const std::shared_ptr& device) +std::unordered_map mm_joystick_handler::get_button_values(const std::shared_ptr& device) { MMJOYDevice* dev = static_cast(device.get()); if (!dev) - return std::unordered_map(); + return std::unordered_map(); return GetButtonValues(dev->device_info, dev->device_caps); } @@ -539,7 +537,7 @@ std::shared_ptr mm_joystick_handler::create_de return dev; } -bool mm_joystick_handler::GetMMJOYDevice(int index, MMJOYDevice* dev) const +bool mm_joystick_handler::get_device(int index, MMJOYDevice* dev) const { if (!dev) return false; @@ -578,28 +576,28 @@ std::shared_ptr mm_joystick_handler::get_device(const std::string& de return get_device_by_name(device); } -bool mm_joystick_handler::get_is_left_trigger(const std::shared_ptr& device, u64 keyCode) +bool mm_joystick_handler::get_is_left_trigger(const std::shared_ptr& device, u32 keyCode) { const MMJOYDevice* dev = static_cast(device.get()); return dev && dev->trigger_code_left.contains(keyCode); } -bool mm_joystick_handler::get_is_right_trigger(const std::shared_ptr& device, u64 keyCode) +bool mm_joystick_handler::get_is_right_trigger(const std::shared_ptr& device, u32 keyCode) { const MMJOYDevice* dev = static_cast(device.get()); return dev && dev->trigger_code_right.contains(keyCode); } -bool mm_joystick_handler::get_is_left_stick(const std::shared_ptr& device, u64 keyCode) +bool mm_joystick_handler::get_is_left_stick(const std::shared_ptr& device, u32 keyCode) { const MMJOYDevice* dev = static_cast(device.get()); - return dev && std::any_of(dev->axis_code_left.cbegin(), dev->axis_code_left.cend(), [&keyCode](const std::set& s){ return s.contains(keyCode); }); + return dev && std::any_of(dev->axis_code_left.cbegin(), dev->axis_code_left.cend(), [&keyCode](const std::set& s){ return s.contains(keyCode); }); } -bool mm_joystick_handler::get_is_right_stick(const std::shared_ptr& device, u64 keyCode) +bool mm_joystick_handler::get_is_right_stick(const std::shared_ptr& device, u32 keyCode) { const MMJOYDevice* dev = static_cast(device.get()); - return dev && std::any_of(dev->axis_code_right.cbegin(), dev->axis_code_right.cend(), [&keyCode](const std::set& s){ return s.contains(keyCode); }); + return dev && std::any_of(dev->axis_code_right.cbegin(), dev->axis_code_right.cend(), [&keyCode](const std::set& s){ return s.contains(keyCode); }); } PadHandlerBase::connection mm_joystick_handler::update_connection(const std::shared_ptr& device) @@ -630,7 +628,7 @@ PadHandlerBase::connection mm_joystick_handler::update_connection(const std::sha } // Try to connect properly again - if (GetMMJOYDevice(dev->device_id, dev)) + if (get_device(dev->device_id, dev)) return connection::connected; return connection::disconnected; diff --git a/rpcs3/Input/mm_joystick_handler.h b/rpcs3/Input/mm_joystick_handler.h index 1459e9be82..e8cad683b3 100644 --- a/rpcs3/Input/mm_joystick_handler.h +++ b/rpcs3/Input/mm_joystick_handler.h @@ -16,10 +16,10 @@ class mm_joystick_handler final : public PadHandlerBase { - static constexpr u64 NO_BUTTON = u64{umax}; + static constexpr u32 NO_BUTTON = u32{umax}; // Unique names for the config files and our pad settings dialog - const std::unordered_map button_list = + const std::unordered_map button_list = { { NO_BUTTON , "" }, { JOY_BUTTON1 , "Button 1" }, @@ -57,7 +57,7 @@ class mm_joystick_handler final : public PadHandlerBase }; // Unique names for the config files and our pad settings dialog - const std::unordered_map pov_list = + const std::unordered_map pov_list = { { JOY_POVFORWARD, "POV Up" }, { JOY_POVRIGHT, "POV Right" }, @@ -65,7 +65,7 @@ class mm_joystick_handler final : public PadHandlerBase { JOY_POVLEFT, "POV Left" } }; - enum mmjoy_axis + enum mmjoy_axis : u32 { joy_x_pos = 9700, joy_x_neg, @@ -82,7 +82,7 @@ class mm_joystick_handler final : public PadHandlerBase }; // Unique names for the config files and our pad settings dialog - const std::unordered_map axis_list = + const std::unordered_map axis_list = { { joy_x_pos, "X+" }, { joy_x_neg, "X-" }, @@ -106,6 +106,10 @@ class mm_joystick_handler final : public PadHandlerBase JOYCAPS device_caps{}; MMRESULT device_status = JOYERR_UNPLUGGED; steady_clock::time_point last_update{}; + std::set trigger_code_left{}; + std::set trigger_code_right{}; + std::array, 4> axis_code_left{}; + std::array, 4> axis_code_right{}; }; public: @@ -118,31 +122,28 @@ public: void init_config(cfg_pad* cfg) override; private: - std::unordered_map GetButtonValues(const JOYINFOEX& js_info, const JOYCAPS& js_caps); + std::unordered_map GetButtonValues(const JOYINFOEX& js_info, const JOYCAPS& js_caps); std::shared_ptr get_device_by_name(const std::string& name); std::shared_ptr create_device_by_name(const std::string& name); - bool GetMMJOYDevice(int index, MMJOYDevice* dev) const; + bool get_device(int index, MMJOYDevice* dev) const; void enumerate_devices(); bool m_is_init = false; - std::set m_blacklist; - std::unordered_map m_min_button_values; + std::set m_blacklist; + std::unordered_map m_min_button_values; std::map> m_devices; - template - std::set find_keys(const std::vector& names) const; - - template - std::set find_keys(const cfg::string& cfg_string) const; + std::set find_keys(const std::vector& names) const; + std::set find_keys(const cfg::string& cfg_string) const; std::array, PadHandlerBase::button::button_count> get_mapped_key_codes(const std::shared_ptr& device, const cfg_pad* cfg) override; std::shared_ptr get_device(const std::string& device) override; - bool get_is_left_trigger(const std::shared_ptr& device, u64 keyCode) override; - bool get_is_right_trigger(const std::shared_ptr& device, u64 keyCode) override; - bool get_is_left_stick(const std::shared_ptr& device, u64 keyCode) override; - bool get_is_right_stick(const std::shared_ptr& device, u64 keyCode) override; + bool get_is_left_trigger(const std::shared_ptr& device, u32 keyCode) override; + bool get_is_right_trigger(const std::shared_ptr& device, u32 keyCode) override; + bool get_is_left_stick(const std::shared_ptr& device, u32 keyCode) override; + bool get_is_right_stick(const std::shared_ptr& device, u32 keyCode) override; PadHandlerBase::connection update_connection(const std::shared_ptr& device) override; - std::unordered_map get_button_values(const std::shared_ptr& device) override; + std::unordered_map get_button_values(const std::shared_ptr& device) override; }; #endif diff --git a/rpcs3/Input/ps_move_handler.cpp b/rpcs3/Input/ps_move_handler.cpp index 059ffee2bf..38c89a1de0 100644 --- a/rpcs3/Input/ps_move_handler.cpp +++ b/rpcs3/Input/ps_move_handler.cpp @@ -580,21 +580,21 @@ void ps_move_handler::handle_external_device(const pad_ensemble& binding) move_data.external_device_write_requested = false; } -bool ps_move_handler::get_is_left_trigger(const std::shared_ptr& /*device*/, u64 keyCode) +bool ps_move_handler::get_is_left_trigger(const std::shared_ptr& /*device*/, u32 keyCode) { // We also report the T button as left trigger return keyCode == ps_move_key_codes::L2 || keyCode == ps_move_key_codes::t; } -bool ps_move_handler::get_is_right_trigger(const std::shared_ptr& /*device*/, u64 keyCode) +bool ps_move_handler::get_is_right_trigger(const std::shared_ptr& /*device*/, u32 keyCode) { // We also report the Throttle button as right trigger return keyCode == ps_move_key_codes::R2 || keyCode == ps_move_key_codes::throttle; } -std::unordered_map ps_move_handler::get_button_values(const std::shared_ptr& device) +std::unordered_map ps_move_handler::get_button_values(const std::shared_ptr& device) { - std::unordered_map key_buf; + std::unordered_map key_buf; ps_move_device* dev = static_cast(device.get()); if (!dev) return key_buf; @@ -760,7 +760,7 @@ void ps_move_handler::get_extended_info(const pad_ensemble& binding) handle_external_device(binding); } -pad_preview_values ps_move_handler::get_preview_values(const std::unordered_map& data) +pad_preview_values ps_move_handler::get_preview_values(const std::unordered_map& data) { return { std::max(::at32(data, ps_move_key_codes::L2), ::at32(data, ps_move_key_codes::t)), diff --git a/rpcs3/Input/ps_move_handler.h b/rpcs3/Input/ps_move_handler.h index 6584364556..deac588862 100644 --- a/rpcs3/Input/ps_move_handler.h +++ b/rpcs3/Input/ps_move_handler.h @@ -192,11 +192,11 @@ private: void check_add_device(hid_device* hidDevice, hid_enumerated_device_view path, std::wstring_view wide_serial) override; int send_output_report(ps_move_device* device) override; - bool get_is_left_trigger(const std::shared_ptr& device, u64 keyCode) override; - bool get_is_right_trigger(const std::shared_ptr& device, u64 keyCode) override; + bool get_is_left_trigger(const std::shared_ptr& device, u32 keyCode) override; + bool get_is_right_trigger(const std::shared_ptr& device, u32 keyCode) override; PadHandlerBase::connection update_connection(const std::shared_ptr& device) override; - std::unordered_map get_button_values(const std::shared_ptr& device) override; - pad_preview_values get_preview_values(const std::unordered_map& data) override; + std::unordered_map get_button_values(const std::shared_ptr& device) override; + pad_preview_values get_preview_values(const std::unordered_map& data) override; void get_extended_info(const pad_ensemble& binding) override; void apply_pad_data(const pad_ensemble& binding) override; diff --git a/rpcs3/Input/sdl_pad_handler.cpp b/rpcs3/Input/sdl_pad_handler.cpp index c47514f6ae..f681018d80 100644 --- a/rpcs3/Input/sdl_pad_handler.cpp +++ b/rpcs3/Input/sdl_pad_handler.cpp @@ -881,17 +881,17 @@ void sdl_pad_handler::set_rumble(SDLDevice* dev, u8 speed_large, u8 speed_small) } } -bool sdl_pad_handler::get_is_left_trigger(const std::shared_ptr& /*device*/, u64 keyCode) +bool sdl_pad_handler::get_is_left_trigger(const std::shared_ptr& /*device*/, u32 keyCode) { return keyCode == SDLKeyCodes::LT; } -bool sdl_pad_handler::get_is_right_trigger(const std::shared_ptr& /*device*/, u64 keyCode) +bool sdl_pad_handler::get_is_right_trigger(const std::shared_ptr& /*device*/, u32 keyCode) { return keyCode == SDLKeyCodes::RT; } -bool sdl_pad_handler::get_is_left_stick(const std::shared_ptr& /*device*/, u64 keyCode) +bool sdl_pad_handler::get_is_left_stick(const std::shared_ptr& /*device*/, u32 keyCode) { switch (keyCode) { @@ -905,7 +905,7 @@ bool sdl_pad_handler::get_is_left_stick(const std::shared_ptr& /*devi } } -bool sdl_pad_handler::get_is_right_stick(const std::shared_ptr& /*device*/, u64 keyCode) +bool sdl_pad_handler::get_is_right_stick(const std::shared_ptr& /*device*/, u32 keyCode) { switch (keyCode) { @@ -919,7 +919,7 @@ bool sdl_pad_handler::get_is_right_stick(const std::shared_ptr& /*dev } } -bool sdl_pad_handler::get_is_touch_pad_motion(const std::shared_ptr& /*device*/, u64 keyCode) +bool sdl_pad_handler::get_is_touch_pad_motion(const std::shared_ptr& /*device*/, u32 keyCode) { switch (keyCode) { @@ -933,9 +933,9 @@ bool sdl_pad_handler::get_is_touch_pad_motion(const std::shared_ptr& } } -std::unordered_map sdl_pad_handler::get_button_values(const std::shared_ptr& device) +std::unordered_map sdl_pad_handler::get_button_values(const std::shared_ptr& device) { - std::unordered_map values; + std::unordered_map values; SDLDevice* dev = static_cast(device.get()); if (!dev || !dev->sdl.gamepad) return values; @@ -1086,7 +1086,7 @@ std::unordered_map sdl_pad_handler::get_button_values(const std::share return values; } -pad_preview_values sdl_pad_handler::get_preview_values(const std::unordered_map& data) +pad_preview_values sdl_pad_handler::get_preview_values(const std::unordered_map& data) { return { ::at32(data, LT), diff --git a/rpcs3/Input/sdl_pad_handler.h b/rpcs3/Input/sdl_pad_handler.h index d889463934..f65d31a78a 100644 --- a/rpcs3/Input/sdl_pad_handler.h +++ b/rpcs3/Input/sdl_pad_handler.h @@ -171,13 +171,13 @@ private: PadHandlerBase::connection update_connection(const std::shared_ptr& device) override; void get_extended_info(const pad_ensemble& binding) override; void apply_pad_data(const pad_ensemble& binding) override; - bool get_is_left_trigger(const std::shared_ptr& device, u64 keyCode) override; - bool get_is_right_trigger(const std::shared_ptr& device, u64 keyCode) override; - bool get_is_left_stick(const std::shared_ptr& device, u64 keyCode) override; - bool get_is_right_stick(const std::shared_ptr& device, u64 keyCode) override; - bool get_is_touch_pad_motion(const std::shared_ptr& device, u64 keyCode) override; - std::unordered_map get_button_values(const std::shared_ptr& device) override; - pad_preview_values get_preview_values(const std::unordered_map& data) override; + bool get_is_left_trigger(const std::shared_ptr& device, u32 keyCode) override; + bool get_is_right_trigger(const std::shared_ptr& device, u32 keyCode) override; + bool get_is_left_stick(const std::shared_ptr& device, u32 keyCode) override; + bool get_is_right_stick(const std::shared_ptr& device, u32 keyCode) override; + bool get_is_touch_pad_motion(const std::shared_ptr& device, u32 keyCode) override; + std::unordered_map get_button_values(const std::shared_ptr& device) override; + pad_preview_values get_preview_values(const std::unordered_map& data) override; u32 get_battery_color(int power_level, u32 brightness) const; void set_rumble(SDLDevice* dev, u8 speed_large, u8 speed_small); diff --git a/rpcs3/Input/skateboard_pad_handler.cpp b/rpcs3/Input/skateboard_pad_handler.cpp index fdcc5be727..577d30d8e3 100644 --- a/rpcs3/Input/skateboard_pad_handler.cpp +++ b/rpcs3/Input/skateboard_pad_handler.cpp @@ -272,9 +272,9 @@ PadHandlerBase::connection skateboard_pad_handler::update_connection(const std:: return connection::connected; } -std::unordered_map skateboard_pad_handler::get_button_values(const std::shared_ptr& device) +std::unordered_map skateboard_pad_handler::get_button_values(const std::shared_ptr& device) { - std::unordered_map key_buf; + std::unordered_map key_buf; skateboard_device* dev = static_cast(device.get()); if (!dev) return key_buf; @@ -328,7 +328,7 @@ void skateboard_pad_handler::get_extended_info(const pad_ensemble& binding) set_raw_orientation(*pad); } -pad_preview_values skateboard_pad_handler::get_preview_values(const std::unordered_map& /*data*/) +pad_preview_values skateboard_pad_handler::get_preview_values(const std::unordered_map& /*data*/) { // There is no proper user interface for skateboard values yet return {}; diff --git a/rpcs3/Input/skateboard_pad_handler.h b/rpcs3/Input/skateboard_pad_handler.h index e7f15c494e..92e4174acc 100644 --- a/rpcs3/Input/skateboard_pad_handler.h +++ b/rpcs3/Input/skateboard_pad_handler.h @@ -183,8 +183,8 @@ private: int send_output_report(skateboard_device* device) override; PadHandlerBase::connection update_connection(const std::shared_ptr& device) override; - std::unordered_map get_button_values(const std::shared_ptr& device) override; - pad_preview_values get_preview_values(const std::unordered_map& data) override; + std::unordered_map get_button_values(const std::shared_ptr& device) override; + pad_preview_values get_preview_values(const std::unordered_map& data) override; void get_extended_info(const pad_ensemble& binding) override; void apply_pad_data(const pad_ensemble& binding) override; }; diff --git a/rpcs3/Input/xinput_pad_handler.cpp b/rpcs3/Input/xinput_pad_handler.cpp index 4feec000e3..b9d4450200 100644 --- a/rpcs3/Input/xinput_pad_handler.cpp +++ b/rpcs3/Input/xinput_pad_handler.cpp @@ -201,9 +201,9 @@ int xinput_pad_handler::GetDeviceNumber(const std::string& padId) return device_number; } -std::unordered_map xinput_pad_handler::get_button_values(const std::shared_ptr& device) +std::unordered_map xinput_pad_handler::get_button_values(const std::shared_ptr& device) { - PadButtonValues values; + std::unordered_map values; XInputDevice* dev = static_cast(device.get()); if (!dev || dev->state != ERROR_SUCCESS) // the state has to be aquired with update_connection before calling this function return values; @@ -217,9 +217,9 @@ std::unordered_map xinput_pad_handler::get_button_values(const std::sh return get_button_values_base(dev->state_base, m_trigger_recognition_mode); } -xinput_pad_handler::PadButtonValues xinput_pad_handler::get_button_values_base(const XINPUT_STATE& state, trigger_recognition_mode trigger_mode) +std::unordered_map xinput_pad_handler::get_button_values_base(const XINPUT_STATE& state, trigger_recognition_mode trigger_mode) { - PadButtonValues values; + std::unordered_map values; // Triggers if (trigger_mode == trigger_recognition_mode::any || trigger_mode == trigger_recognition_mode::one_directional) @@ -291,9 +291,9 @@ xinput_pad_handler::PadButtonValues xinput_pad_handler::get_button_values_base(c return values; } -xinput_pad_handler::PadButtonValues xinput_pad_handler::get_button_values_scp(const SCP_EXTN& state, trigger_recognition_mode trigger_mode) +std::unordered_map xinput_pad_handler::get_button_values_scp(const SCP_EXTN& state, trigger_recognition_mode trigger_mode) { - PadButtonValues values; + std::unordered_map values; // Triggers if (trigger_mode == trigger_recognition_mode::any || trigger_mode == trigger_recognition_mode::one_directional) @@ -359,7 +359,7 @@ xinput_pad_handler::PadButtonValues xinput_pad_handler::get_button_values_scp(co return values; } -pad_preview_values xinput_pad_handler::get_preview_values(const std::unordered_map& data) +pad_preview_values xinput_pad_handler::get_preview_values(const std::unordered_map& data) { return { ::at32(data, LT), @@ -455,17 +455,17 @@ std::shared_ptr xinput_pad_handler::get_device(const std::string& dev return dev; } -bool xinput_pad_handler::get_is_left_trigger(const std::shared_ptr& /*device*/, u64 keyCode) +bool xinput_pad_handler::get_is_left_trigger(const std::shared_ptr& /*device*/, u32 keyCode) { return keyCode == XInputKeyCodes::LT; } -bool xinput_pad_handler::get_is_right_trigger(const std::shared_ptr& /*device*/, u64 keyCode) +bool xinput_pad_handler::get_is_right_trigger(const std::shared_ptr& /*device*/, u32 keyCode) { return keyCode == XInputKeyCodes::RT; } -bool xinput_pad_handler::get_is_left_stick(const std::shared_ptr& /*device*/, u64 keyCode) +bool xinput_pad_handler::get_is_left_stick(const std::shared_ptr& /*device*/, u32 keyCode) { switch (keyCode) { @@ -479,7 +479,7 @@ bool xinput_pad_handler::get_is_left_stick(const std::shared_ptr& /*d } } -bool xinput_pad_handler::get_is_right_stick(const std::shared_ptr& /*device*/, u64 keyCode) +bool xinput_pad_handler::get_is_right_stick(const std::shared_ptr& /*device*/, u32 keyCode) { switch (keyCode) { diff --git a/rpcs3/Input/xinput_pad_handler.h b/rpcs3/Input/xinput_pad_handler.h index 899e649b13..d4233bae4a 100644 --- a/rpcs3/Input/xinput_pad_handler.h +++ b/rpcs3/Input/xinput_pad_handler.h @@ -93,8 +93,6 @@ class xinput_pad_handler final : public PadHandlerBase RSYPos }; - using PadButtonValues = std::unordered_map; - struct XInputDevice : public PadDevice { u32 deviceNumber{ 0 }; @@ -123,8 +121,8 @@ private: using PFN_XINPUTGETBATTERYINFORMATION = DWORD(WINAPI*)(DWORD, BYTE, XINPUT_BATTERY_INFORMATION*); int GetDeviceNumber(const std::string& padId); - static PadButtonValues get_button_values_base(const XINPUT_STATE& state, trigger_recognition_mode trigger_mode); - static PadButtonValues get_button_values_scp(const SCP_EXTN& state, trigger_recognition_mode trigger_mode); + static std::unordered_map get_button_values_base(const XINPUT_STATE& state, trigger_recognition_mode trigger_mode); + static std::unordered_map get_button_values_scp(const SCP_EXTN& state, trigger_recognition_mode trigger_mode); PFN_XINPUTGETEXTENDED xinputGetExtended{ nullptr }; PFN_XINPUTGETCUSTOMDATA xinputGetCustomData{ nullptr }; @@ -134,13 +132,13 @@ private: utils::dynamic_library library; std::shared_ptr get_device(const std::string& device) override; - bool get_is_left_trigger(const std::shared_ptr& device, u64 keyCode) override; - bool get_is_right_trigger(const std::shared_ptr& device, u64 keyCode) override; - bool get_is_left_stick(const std::shared_ptr& device, u64 keyCode) override; - bool get_is_right_stick(const std::shared_ptr& device, u64 keyCode) override; + bool get_is_left_trigger(const std::shared_ptr& device, u32 keyCode) override; + bool get_is_right_trigger(const std::shared_ptr& device, u32 keyCode) override; + bool get_is_left_stick(const std::shared_ptr& device, u32 keyCode) override; + bool get_is_right_stick(const std::shared_ptr& device, u32 keyCode) override; PadHandlerBase::connection update_connection(const std::shared_ptr& device) override; void get_extended_info(const pad_ensemble& binding) override; void apply_pad_data(const pad_ensemble& binding) override; - std::unordered_map get_button_values(const std::shared_ptr& device) override; - pad_preview_values get_preview_values(const std::unordered_map& data) override; + std::unordered_map get_button_values(const std::shared_ptr& device) override; + pad_preview_values get_preview_values(const std::unordered_map& data) override; };