ソースを参照

Merge pull request #7472 from Morph1984/post-kraken-cleanup

core: hid: Post kraken cleanup
Narr the Reg 4 年 前
コミット
46e3ed5a48

+ 15 - 13
src/core/hid/emulated_console.h

@@ -78,9 +78,9 @@ struct ConsoleUpdateCallback {
 class EmulatedConsole {
 public:
     /**
-     * Contains all input data related to the console like motion and touch input
+     * Contains all input data within the emulated switch console tablet such as touch and motion
      */
-    EmulatedConsole();
+    explicit EmulatedConsole();
     ~EmulatedConsole();
 
     YUZU_NON_COPYABLE(EmulatedConsole);
@@ -89,14 +89,16 @@ public:
     /// Removes all callbacks created from input devices
     void UnloadInput();
 
-    /// Sets the emulated console into configuring mode. Locking all HID service events from being
-    /// moddified
+    /**
+     * Sets the emulated console into configuring mode
+     * This prevents the modification of the HID state of the emulated console by input commands
+     */
     void EnableConfiguration();
 
-    /// Returns the emulated console to the normal behaivour
+    /// Returns the emulated console into normal mode, allowing the modification of the HID state
     void DisableConfiguration();
 
-    /// Returns true if the emulated console is on configuring mode
+    /// Returns true if the emulated console is in configuring mode
     bool IsConfiguring() const;
 
     /// Reload all input devices
@@ -116,7 +118,7 @@ public:
 
     /**
      * Updates the current mapped motion device
-     * @param ParamPackage with controller data to be mapped
+     * @param param ParamPackage with controller data to be mapped
      */
     void SetMotionParam(Common::ParamPackage param);
 
@@ -134,14 +136,14 @@ public:
 
     /**
      * Adds a callback to the list of events
-     * @param ConsoleUpdateCallback that will be triggered
+     * @param update_callback A ConsoleUpdateCallback that will be triggered
      * @return an unique key corresponding to the callback index in the list
      */
     int SetCallback(ConsoleUpdateCallback update_callback);
 
     /**
      * Removes a callback from the list stopping any future events to this object
-     * @param Key corresponding to the callback index in the list
+     * @param key Key corresponding to the callback index in the list
      */
     void DeleteCallback(int key);
 
@@ -151,20 +153,20 @@ private:
 
     /**
      * Updates the motion status of the console
-     * @param A CallbackStatus containing gyro and accelerometer data
+     * @param callback A CallbackStatus containing gyro and accelerometer data
      */
     void SetMotion(Common::Input::CallbackStatus callback);
 
     /**
      * Updates the touch status of the console
-     * @param callback: A CallbackStatus containing the touch position
-     * @param index: Finger ID to be updated
+     * @param callback A CallbackStatus containing the touch position
+     * @param index Finger ID to be updated
      */
     void SetTouch(Common::Input::CallbackStatus callback, std::size_t index);
 
     /**
      * Triggers a callback that something has changed on the console status
-     * @param Input type of the event to trigger
+     * @param type Input type of the event to trigger
      */
     void TriggerOnChange(ConsoleTriggerType type);
 

+ 30 - 28
src/core/hid/emulated_controller.h

@@ -132,8 +132,8 @@ struct ControllerUpdateCallback {
 class EmulatedController {
 public:
     /**
-     * Contains all input data related to this controller. Like buttons, joysticks, motion.
-     * @param Npad id type for this specific controller
+     * Contains all input data (buttons, joysticks, vibration, and motion) within this controller.
+     * @param npad_id_type npad id type for this specific controller
      */
     explicit EmulatedController(NpadIdType npad_id_type_);
     ~EmulatedController();
@@ -155,7 +155,7 @@ public:
 
     /**
      * Gets the NpadStyleIndex for this controller
-     * @param If true tmp_npad_type will be returned
+     * @param get_temporary_value If true tmp_npad_type will be returned
      * @return NpadStyleIndex set on the controller
      */
     NpadStyleIndex GetNpadStyleIndex(bool get_temporary_value = false) const;
@@ -168,7 +168,7 @@ public:
 
     /**
      * Is the emulated connected
-     * @param If true tmp_is_connected will be returned
+     * @param get_temporary_value If true tmp_is_connected will be returned
      * @return true if the controller has the connected status
      */
     bool IsConnected(bool get_temporary_value = false) const;
@@ -179,14 +179,16 @@ public:
     /// Removes all callbacks created from input devices
     void UnloadInput();
 
-    /// Sets the emulated console into configuring mode. Locking all HID service events from being
-    /// moddified
+    /**
+     * Sets the emulated controller into configuring mode
+     * This prevents the modification of the HID state of the emulated controller by input commands
+     */
     void EnableConfiguration();
 
-    /// Returns the emulated console to the normal behaivour
+    /// Returns the emulated controller into normal mode, allowing the modification of the HID state
     void DisableConfiguration();
 
-    /// Returns true if the emulated device is on configuring mode
+    /// Returns true if the emulated controller is in configuring mode
     bool IsConfiguring() const;
 
     /// Reload all input devices
@@ -215,19 +217,19 @@ public:
 
     /**
      * Updates the current mapped button device
-     * @param ParamPackage with controller data to be mapped
+     * @param param ParamPackage with controller data to be mapped
      */
     void SetButtonParam(std::size_t index, Common::ParamPackage param);
 
     /**
      * Updates the current mapped stick device
-     * @param ParamPackage with controller data to be mapped
+     * @param param ParamPackage with controller data to be mapped
      */
     void SetStickParam(std::size_t index, Common::ParamPackage param);
 
     /**
      * Updates the current mapped motion device
-     * @param ParamPackage with controller data to be mapped
+     * @param param ParamPackage with controller data to be mapped
      */
     void SetMotionParam(std::size_t index, Common::ParamPackage param);
 
@@ -270,13 +272,13 @@ public:
     /// Returns the latest battery status from the controller
     BatteryLevelState GetBattery() const;
 
-    /*
+    /**
      * Sends a specific vibration to the output device
      * @return returns true if vibration had no errors
      */
     bool SetVibration(std::size_t device_index, VibrationValue vibration);
 
-    /*
+    /**
      * Sends a small vibration to the output device
      * @return returns true if SetVibration was successfull
      */
@@ -290,14 +292,14 @@ public:
 
     /**
      * Adds a callback to the list of events
-     * @param ConsoleUpdateCallback that will be triggered
+     * @param update_callback A ConsoleUpdateCallback that will be triggered
      * @return an unique key corresponding to the callback index in the list
      */
     int SetCallback(ControllerUpdateCallback update_callback);
 
     /**
      * Removes a callback from the list stopping any future events to this object
-     * @param Key corresponding to the callback index in the list
+     * @param key Key corresponding to the callback index in the list
      */
     void DeleteCallback(int key);
 
@@ -310,43 +312,43 @@ private:
 
     /**
      * Updates the button status of the controller
-     * @param callback: A CallbackStatus containing the button status
-     * @param index: Button ID of the to be updated
+     * @param callback A CallbackStatus containing the button status
+     * @param index Button ID of the to be updated
      */
     void SetButton(Common::Input::CallbackStatus callback, std::size_t index, Common::UUID uuid);
 
     /**
      * Updates the analog stick status of the controller
-     * @param callback: A CallbackStatus containing the analog stick status
-     * @param index: stick ID of the to be updated
+     * @param callback A CallbackStatus containing the analog stick status
+     * @param index stick ID of the to be updated
      */
     void SetStick(Common::Input::CallbackStatus callback, std::size_t index, Common::UUID uuid);
 
     /**
      * Updates the trigger status of the controller
-     * @param callback: A CallbackStatus containing the trigger status
-     * @param index: trigger ID of the to be updated
+     * @param callback A CallbackStatus containing the trigger status
+     * @param index trigger ID of the to be updated
      */
     void SetTrigger(Common::Input::CallbackStatus callback, std::size_t index, Common::UUID uuid);
 
     /**
      * Updates the motion status of the controller
-     * @param callback: A CallbackStatus containing gyro and accelerometer data
-     * @param index: motion ID of the to be updated
+     * @param callback A CallbackStatus containing gyro and accelerometer data
+     * @param index motion ID of the to be updated
      */
     void SetMotion(Common::Input::CallbackStatus callback, std::size_t index);
 
     /**
      * Updates the battery status of the controller
-     * @param callback: A CallbackStatus containing the battery status
-     * @param index: Button ID of the to be updated
+     * @param callback A CallbackStatus containing the battery status
+     * @param index Button ID of the to be updated
      */
     void SetBattery(Common::Input::CallbackStatus callback, std::size_t index);
 
     /**
      * Triggers a callback that something has changed on the controller status
-     * @param type: Input type of the event to trigger
-     * @param is_service_update: indicates if this event should be sended to only services
+     * @param type Input type of the event to trigger
+     * @param is_service_update indicates if this event should only be sent to HID services
      */
     void TriggerOnChange(ControllerTriggerType type, bool is_service_update);
 
@@ -357,7 +359,7 @@ private:
     f32 motion_sensitivity{0.01f};
     bool force_update_motion{false};
 
-    // Temporary values to avoid doing changes while the controller is on configuration mode
+    // Temporary values to avoid doing changes while the controller is in configuring mode
     NpadStyleIndex tmp_npad_type{NpadStyleIndex::None};
     bool tmp_is_connected{false};
 

+ 21 - 19
src/core/hid/emulated_devices.h

@@ -75,9 +75,9 @@ class EmulatedDevices {
 public:
     /**
      * Contains all input data related to external devices that aren't necesarily a controller
-     * like keyboard and mouse
+     * This includes devices such as the keyboard or mouse
      */
-    EmulatedDevices();
+    explicit EmulatedDevices();
     ~EmulatedDevices();
 
     YUZU_NON_COPYABLE(EmulatedDevices);
@@ -86,14 +86,16 @@ public:
     /// Removes all callbacks created from input devices
     void UnloadInput();
 
-    /// Sets the emulated console into configuring mode. Locking all HID service events from being
-    /// moddified
+    /**
+     * Sets the emulated devices into configuring mode
+     * This prevents the modification of the HID state of the emulated devices by input commands
+     */
     void EnableConfiguration();
 
-    /// Returns the emulated console to the normal behaivour
+    /// Returns the emulated devices into normal mode, allowing the modification of the HID state
     void DisableConfiguration();
 
-    /// Returns true if the emulated device is on configuring mode
+    /// Returns true if the emulated device is in configuring mode
     bool IsConfiguring() const;
 
     /// Reload all input devices
@@ -134,14 +136,14 @@ public:
 
     /**
      * Adds a callback to the list of events
-     * @param InterfaceUpdateCallback that will be triggered
+     * @param update_callback InterfaceUpdateCallback that will be triggered
      * @return an unique key corresponding to the callback index in the list
      */
     int SetCallback(InterfaceUpdateCallback update_callback);
 
     /**
      * Removes a callback from the list stopping any future events to this object
-     * @param Key corresponding to the callback index in the list
+     * @param key Key corresponding to the callback index in the list
      */
     void DeleteCallback(int key);
 
@@ -151,42 +153,42 @@ private:
 
     /**
      * Updates the touch status of the keyboard device
-     * @param callback: A CallbackStatus containing the key status
-     * @param index: key ID to be updated
+     * @param callback A CallbackStatus containing the key status
+     * @param index key ID to be updated
      */
     void SetKeyboardButton(Common::Input::CallbackStatus callback, std::size_t index);
 
     /**
      * Updates the keyboard status of the keyboard device
-     * @param callback: A CallbackStatus containing the modifier key status
-     * @param index: modifier key ID to be updated
+     * @param callback A CallbackStatus containing the modifier key status
+     * @param index modifier key ID to be updated
      */
     void SetKeyboardModifier(Common::Input::CallbackStatus callback, std::size_t index);
 
     /**
      * Updates the mouse button status of the mouse device
-     * @param callback: A CallbackStatus containing the button status
-     * @param index: Button ID to be updated
+     * @param callback A CallbackStatus containing the button status
+     * @param index Button ID to be updated
      */
     void SetMouseButton(Common::Input::CallbackStatus callback, std::size_t index);
 
     /**
      * Updates the mouse wheel status of the mouse device
-     * @param callback: A CallbackStatus containing the wheel status
-     * @param index: wheel ID to be updated
+     * @param callback A CallbackStatus containing the wheel status
+     * @param index wheel ID to be updated
      */
     void SetMouseAnalog(Common::Input::CallbackStatus callback, std::size_t index);
 
     /**
      * Updates the mouse position status of the mouse device
-     * @param callback: A CallbackStatus containing the position status
-     * @param index: stick ID to be updated
+     * @param callback A CallbackStatus containing the position status
+     * @param index stick ID to be updated
      */
     void SetMouseStick(Common::Input::CallbackStatus callback);
 
     /**
      * Triggers a callback that something has changed on the device status
-     * @param Input type of the event to trigger
+     * @param type Input type of the event to trigger
      */
     void TriggerOnChange(DeviceTriggerType type);
 

+ 26 - 0
src/core/hid/hid_core.cpp

@@ -135,6 +135,32 @@ NpadIdType HIDCore::GetFirstNpadId() const {
     return NpadIdType::Player1;
 }
 
+void HIDCore::EnableAllControllerConfiguration() {
+    player_1->EnableConfiguration();
+    player_2->EnableConfiguration();
+    player_3->EnableConfiguration();
+    player_4->EnableConfiguration();
+    player_5->EnableConfiguration();
+    player_6->EnableConfiguration();
+    player_7->EnableConfiguration();
+    player_8->EnableConfiguration();
+    other->EnableConfiguration();
+    handheld->EnableConfiguration();
+}
+
+void HIDCore::DisableAllControllerConfiguration() {
+    player_1->DisableConfiguration();
+    player_2->DisableConfiguration();
+    player_3->DisableConfiguration();
+    player_4->DisableConfiguration();
+    player_5->DisableConfiguration();
+    player_6->DisableConfiguration();
+    player_7->DisableConfiguration();
+    player_8->DisableConfiguration();
+    other->DisableConfiguration();
+    handheld->DisableConfiguration();
+}
+
 void HIDCore::ReloadInputDevices() {
     player_1->ReloadFromSettings();
     player_2->ReloadFromSettings();

+ 6 - 0
src/core/hid/hid_core.h

@@ -45,6 +45,12 @@ public:
     /// Returns the first connected npad id
     NpadIdType GetFirstNpadId() const;
 
+    /// Sets all emulated controllers into configuring mode.
+    void EnableAllControllerConfiguration();
+
+    /// Sets all emulated controllers into normal mode.
+    void DisableAllControllerConfiguration();
+
     /// Reloads all input devices from settings
     void ReloadInputDevices();
 

+ 2 - 0
src/core/hid/hid_types.h

@@ -63,6 +63,8 @@ enum class NpadButton : u64 {
     LagonCUp = 1ULL << 32,
     LagonCRight = 1ULL << 33,
     LagonCDown = 1ULL << 34,
+
+    All = 0xFFFFFFFFFFFFFFFFULL,
 };
 DECLARE_ENUM_FLAG_OPERATORS(NpadButton);
 

+ 12 - 11
src/core/hid/input_converter.h

@@ -21,7 +21,7 @@ namespace Core::HID {
 /**
  * Converts raw input data into a valid battery status.
  *
- * @param Supported callbacks: Analog, Battery, Trigger.
+ * @param callback Supported callbacks: Analog, Battery, Trigger.
  * @return A valid BatteryStatus object.
  */
 Common::Input::BatteryStatus TransformToBattery(const Common::Input::CallbackStatus& callback);
@@ -29,7 +29,7 @@ Common::Input::BatteryStatus TransformToBattery(const Common::Input::CallbackSta
 /**
  * Converts raw input data into a valid button status. Applies invert properties to the output.
  *
- * @param Supported callbacks: Analog, Button, Trigger.
+ * @param callback Supported callbacks: Analog, Button, Trigger.
  * @return A valid TouchStatus object.
  */
 Common::Input::ButtonStatus TransformToButton(const Common::Input::CallbackStatus& callback);
@@ -37,7 +37,7 @@ Common::Input::ButtonStatus TransformToButton(const Common::Input::CallbackStatu
 /**
  * Converts raw input data into a valid motion status.
  *
- * @param Supported callbacks: Motion.
+ * @param callback Supported callbacks: Motion.
  * @return A valid TouchStatus object.
  */
 Common::Input::MotionStatus TransformToMotion(const Common::Input::CallbackStatus& callback);
@@ -46,7 +46,7 @@ Common::Input::MotionStatus TransformToMotion(const Common::Input::CallbackStatu
  * Converts raw input data into a valid stick status. Applies offset, deadzone, range and invert
  * properties to the output.
  *
- * @param Supported callbacks: Stick.
+ * @param callback Supported callbacks: Stick.
  * @return A valid StickStatus object.
  */
 Common::Input::StickStatus TransformToStick(const Common::Input::CallbackStatus& callback);
@@ -54,7 +54,7 @@ Common::Input::StickStatus TransformToStick(const Common::Input::CallbackStatus&
 /**
  * Converts raw input data into a valid touch status.
  *
- * @param Supported callbacks: Touch.
+ * @param callback Supported callbacks: Touch.
  * @return A valid TouchStatus object.
  */
 Common::Input::TouchStatus TransformToTouch(const Common::Input::CallbackStatus& callback);
@@ -63,7 +63,7 @@ Common::Input::TouchStatus TransformToTouch(const Common::Input::CallbackStatus&
  * Converts raw input data into a valid trigger status. Applies offset, deadzone, range and
  * invert properties to the output. Button status uses the threshold property if necessary.
  *
- * @param Supported callbacks: Analog, Button, Trigger.
+ * @param callback Supported callbacks: Analog, Button, Trigger.
  * @return A valid TriggerStatus object.
  */
 Common::Input::TriggerStatus TransformToTrigger(const Common::Input::CallbackStatus& callback);
@@ -72,22 +72,23 @@ Common::Input::TriggerStatus TransformToTrigger(const Common::Input::CallbackSta
  * Converts raw input data into a valid analog status. Applies offset, deadzone, range and
  * invert properties to the output.
  *
- * @param Supported callbacks: Analog.
+ * @param callback Supported callbacks: Analog.
  * @return A valid AnalogStatus object.
  */
 Common::Input::AnalogStatus TransformToAnalog(const Common::Input::CallbackStatus& callback);
 
 /**
  * Converts raw analog data into a valid analog value
- * @param An analog object containing raw data and properties, bool that determines if the value
- * needs to be clamped between -1.0f and 1.0f.
+ * @param analog An analog object containing raw data and properties
+ * @param clamp_value determines if the value needs to be clamped between -1.0f and 1.0f.
  */
 void SanitizeAnalog(Common::Input::AnalogStatus& analog, bool clamp_value);
 
 /**
  * Converts raw stick data into a valid stick value
- * @param Two analog objects containing raw data and properties, bool that determines if the value
- * needs to be clamped into the unit circle.
+ * @param analog_x raw analog data and properties for the x-axis
+ * @param analog_y raw analog data and properties for the y-axis
+ * @param clamp_value bool that determines if the value needs to be clamped into the unit circle.
  */
 void SanitizeStick(Common::Input::AnalogStatus& analog_x, Common::Input::AnalogStatus& analog_y,
                    bool clamp_value);

+ 8 - 8
src/core/hid/input_interpreter.cpp

@@ -20,7 +20,7 @@ InputInterpreter::InputInterpreter(Core::System& system)
 InputInterpreter::~InputInterpreter() = default;
 
 void InputInterpreter::PollInput() {
-    const u64 button_state = npad.GetAndResetPressState();
+    const auto button_state = npad.GetAndResetPressState();
 
     previous_index = current_index;
     current_index = (current_index + 1) % button_states.size();
@@ -32,30 +32,30 @@ void InputInterpreter::ResetButtonStates() {
     previous_index = 0;
     current_index = 0;
 
-    button_states[0] = 0xFFFFFFFFFFFFFFFF;
+    button_states[0] = Core::HID::NpadButton::All;
 
     for (std::size_t i = 1; i < button_states.size(); ++i) {
-        button_states[i] = 0;
+        button_states[i] = Core::HID::NpadButton::None;
     }
 }
 
 bool InputInterpreter::IsButtonPressed(Core::HID::NpadButton button) const {
-    return (button_states[current_index] & static_cast<u64>(button)) != 0;
+    return True(button_states[current_index] & button);
 }
 
 bool InputInterpreter::IsButtonPressedOnce(Core::HID::NpadButton button) const {
-    const bool current_press = (button_states[current_index] & static_cast<u64>(button)) != 0;
-    const bool previous_press = (button_states[previous_index] & static_cast<u64>(button)) != 0;
+    const bool current_press = True(button_states[current_index] & button);
+    const bool previous_press = True(button_states[previous_index] & button);
 
     return current_press && !previous_press;
 }
 
 bool InputInterpreter::IsButtonHeld(Core::HID::NpadButton button) const {
-    u64 held_buttons{button_states[0]};
+    Core::HID::NpadButton held_buttons{button_states[0]};
 
     for (std::size_t i = 1; i < button_states.size(); ++i) {
         held_buttons &= button_states[i];
     }
 
-    return (held_buttons & static_cast<u64>(button)) != 0;
+    return True(held_buttons & button);
 }

+ 1 - 1
src/core/hid/input_interpreter.h

@@ -105,7 +105,7 @@ private:
     Service::HID::Controller_NPad& npad;
 
     /// Stores 9 consecutive button states polled from HID.
-    std::array<u64, 9> button_states{};
+    std::array<Core::HID::NpadButton, 9> button_states{};
 
     std::size_t previous_index{};
     std::size_t current_index{};

+ 4 - 4
src/core/hle/service/hid/controllers/npad.cpp

@@ -510,7 +510,7 @@ void Controller_NPad::OnUpdate(const Core::Timing::CoreTiming& core_timing, u8*
         libnx_state.r_stick = pad_state.r_stick;
         npad.system_ext_lifo.WriteNextEntry(pad_state);
 
-        press_state |= static_cast<u32>(pad_state.npad_buttons.raw);
+        press_state |= static_cast<u64>(pad_state.npad_buttons.raw);
 
         std::memcpy(data + NPAD_OFFSET + (i * sizeof(NpadInternalState)),
                     &controller.shared_memory_entry, sizeof(NpadInternalState));
@@ -635,7 +635,7 @@ void Controller_NPad::OnMotionUpdate(const Core::Timing::CoreTiming& core_timing
             // This buffer only is updated on handheld on HW
             npad.sixaxis_handheld_lifo.WriteNextEntry(sixaxis_handheld_state);
         } else {
-            // Hanheld doesn't update this buffer on HW
+            // Handheld doesn't update this buffer on HW
             npad.sixaxis_fullkey_lifo.WriteNextEntry(sixaxis_fullkey_state);
         }
 
@@ -1149,8 +1149,8 @@ void Controller_NPad::ClearAllControllers() {
     }
 }
 
-u32 Controller_NPad::GetAndResetPressState() {
-    return press_state.exchange(0);
+Core::HID::NpadButton Controller_NPad::GetAndResetPressState() {
+    return static_cast<Core::HID::NpadButton>(press_state.exchange(0));
 }
 
 bool Controller_NPad::IsControllerSupported(Core::HID::NpadStyleIndex controller) const {

+ 2 - 2
src/core/hle/service/hid/controllers/npad.h

@@ -179,7 +179,7 @@ public:
 
     // Logical OR for all buttons presses on all controllers
     // Specifically for cheat engine and other features.
-    u32 GetAndResetPressState();
+    Core::HID::NpadButton GetAndResetPressState();
 
     static bool IsNpadIdValid(Core::HID::NpadIdType npad_id);
     static bool IsDeviceHandleValid(const Core::HID::SixAxisSensorHandle& device_handle);
@@ -503,7 +503,7 @@ private:
     NpadControllerData& GetControllerFromNpadIdType(Core::HID::NpadIdType npad_id);
     const NpadControllerData& GetControllerFromNpadIdType(Core::HID::NpadIdType npad_id) const;
 
-    std::atomic<u32> press_state{};
+    std::atomic<u64> press_state{};
 
     std::array<NpadControllerData, 10> controller_data{};
     KernelHelpers::ServiceContext& service_context;

+ 1 - 2
src/core/memory/cheat_engine.cpp

@@ -19,7 +19,6 @@
 namespace Core::Memory {
 namespace {
 constexpr auto CHEAT_ENGINE_NS = std::chrono::nanoseconds{1000000000 / 12};
-constexpr u32 KEYPAD_BITMASK = 0x3FFFFFF;
 
 std::string_view ExtractName(std::string_view data, std::size_t start_index, char match) {
     auto end_index = start_index;
@@ -61,7 +60,7 @@ u64 StandardVmCallbacks::HidKeysDown() {
         applet_resource
             ->GetController<Service::HID::Controller_NPad>(Service::HID::HidController::NPad)
             .GetAndResetPressState();
-    return press_state & KEYPAD_BITMASK;
+    return static_cast<u64>(press_state & HID::NpadButton::All);
 }
 
 void StandardVmCallbacks::DebugLog(u8 id, u64 value) {

+ 5 - 8
src/yuzu/applets/qt_controller.cpp

@@ -139,7 +139,6 @@ QtControllerSelectorDialog::QtControllerSelectorDialog(
     DisableUnsupportedPlayers();
 
     for (std::size_t player_index = 0; player_index < NUM_PLAYERS; ++player_index) {
-        system.HIDCore().GetEmulatedControllerByIndex(player_index)->EnableConfiguration();
         SetEmulatedControllers(player_index);
     }
 
@@ -205,9 +204,6 @@ QtControllerSelectorDialog::QtControllerSelectorDialog(
     // If all the parameters are met AND only allows a single player,
     // stop the constructor here as we do not need to continue.
     if (CheckIfParametersMet() && parameters.enable_single_mode) {
-        for (std::size_t player_index = 0; player_index < NUM_PLAYERS; ++player_index) {
-            system.HIDCore().GetEmulatedControllerByIndex(player_index)->DisableConfiguration();
-        }
         return;
     }
 
@@ -221,7 +217,9 @@ QtControllerSelectorDialog::QtControllerSelectorDialog(
     resize(0, 0);
 }
 
-QtControllerSelectorDialog::~QtControllerSelectorDialog() = default;
+QtControllerSelectorDialog::~QtControllerSelectorDialog() {
+    system.HIDCore().DisableAllControllerConfiguration();
+}
 
 int QtControllerSelectorDialog::exec() {
     if (parameters_met && parameters.enable_single_mode) {
@@ -237,12 +235,11 @@ void QtControllerSelectorDialog::ApplyConfiguration() {
 
     Settings::values.vibration_enabled.SetValue(ui->vibrationGroup->isChecked());
     Settings::values.motion_enabled.SetValue(ui->motionGroup->isChecked());
-    for (std::size_t player_index = 0; player_index < NUM_PLAYERS; ++player_index) {
-        system.HIDCore().GetEmulatedControllerByIndex(player_index)->DisableConfiguration();
-    }
 }
 
 void QtControllerSelectorDialog::LoadConfiguration() {
+    system.HIDCore().EnableAllControllerConfiguration();
+
     const auto* handheld = system.HIDCore().GetEmulatedController(Core::HID::NpadIdType::Handheld);
     for (std::size_t index = 0; index < NUM_PLAYERS; ++index) {
         const auto* controller = system.HIDCore().GetEmulatedControllerByIndex(index);

+ 16 - 16
src/yuzu/configuration/configure_input_player.cpp

@@ -246,15 +246,15 @@ ConfigureInputPlayer::ConfigureInputPlayer(QWidget* parent, std::size_t player_i
     if (player_index == 0) {
         auto* emulated_controller_p1 =
             hid_core.GetEmulatedController(Core::HID::NpadIdType::Player1);
-        auto* emulated_controller_hanheld =
+        auto* emulated_controller_handheld =
             hid_core.GetEmulatedController(Core::HID::NpadIdType::Handheld);
         emulated_controller_p1->SaveCurrentConfig();
         emulated_controller_p1->EnableConfiguration();
-        emulated_controller_hanheld->SaveCurrentConfig();
-        emulated_controller_hanheld->EnableConfiguration();
-        if (emulated_controller_hanheld->IsConnected(true)) {
+        emulated_controller_handheld->SaveCurrentConfig();
+        emulated_controller_handheld->EnableConfiguration();
+        if (emulated_controller_handheld->IsConnected(true)) {
             emulated_controller_p1->Disconnect();
-            emulated_controller = emulated_controller_hanheld;
+            emulated_controller = emulated_controller_handheld;
         } else {
             emulated_controller = emulated_controller_p1;
         }
@@ -590,19 +590,19 @@ ConfigureInputPlayer::ConfigureInputPlayer(QWidget* parent, std::size_t player_i
                 if (player_index == 0) {
                     auto* emulated_controller_p1 =
                         hid_core.GetEmulatedController(Core::HID::NpadIdType::Player1);
-                    auto* emulated_controller_hanheld =
+                    auto* emulated_controller_handheld =
                         hid_core.GetEmulatedController(Core::HID::NpadIdType::Handheld);
                     bool is_connected = emulated_controller->IsConnected(true);
 
                     emulated_controller_p1->SetNpadStyleIndex(type);
-                    emulated_controller_hanheld->SetNpadStyleIndex(type);
+                    emulated_controller_handheld->SetNpadStyleIndex(type);
                     if (is_connected) {
                         if (type == Core::HID::NpadStyleIndex::Handheld) {
                             emulated_controller_p1->Disconnect();
-                            emulated_controller_hanheld->Connect();
-                            emulated_controller = emulated_controller_hanheld;
+                            emulated_controller_handheld->Connect();
+                            emulated_controller = emulated_controller_handheld;
                         } else {
-                            emulated_controller_hanheld->Disconnect();
+                            emulated_controller_handheld->Disconnect();
                             emulated_controller_p1->Connect();
                             emulated_controller = emulated_controller_p1;
                         }
@@ -650,10 +650,10 @@ ConfigureInputPlayer::~ConfigureInputPlayer() {
     if (player_index == 0) {
         auto* emulated_controller_p1 =
             hid_core.GetEmulatedController(Core::HID::NpadIdType::Player1);
-        auto* emulated_controller_hanheld =
+        auto* emulated_controller_handheld =
             hid_core.GetEmulatedController(Core::HID::NpadIdType::Handheld);
         emulated_controller_p1->DisableConfiguration();
-        emulated_controller_hanheld->DisableConfiguration();
+        emulated_controller_handheld->DisableConfiguration();
     } else {
         emulated_controller->DisableConfiguration();
     }
@@ -663,14 +663,14 @@ void ConfigureInputPlayer::ApplyConfiguration() {
     if (player_index == 0) {
         auto* emulated_controller_p1 =
             hid_core.GetEmulatedController(Core::HID::NpadIdType::Player1);
-        auto* emulated_controller_hanheld =
+        auto* emulated_controller_handheld =
             hid_core.GetEmulatedController(Core::HID::NpadIdType::Handheld);
         emulated_controller_p1->DisableConfiguration();
         emulated_controller_p1->SaveCurrentConfig();
         emulated_controller_p1->EnableConfiguration();
-        emulated_controller_hanheld->DisableConfiguration();
-        emulated_controller_hanheld->SaveCurrentConfig();
-        emulated_controller_hanheld->EnableConfiguration();
+        emulated_controller_handheld->DisableConfiguration();
+        emulated_controller_handheld->SaveCurrentConfig();
+        emulated_controller_handheld->EnableConfiguration();
         return;
     }
     emulated_controller->DisableConfiguration();