diff options
| author | Morph <39850852+Morph1984@users.noreply.github.com> | 2021-11-29 18:23:52 -0500 | 
|---|---|---|
| committer | Morph <39850852+Morph1984@users.noreply.github.com> | 2021-11-29 19:21:51 -0500 | 
| commit | 322339a5fd4ed78826ecea42e71bc179afb7b5a7 (patch) | |
| tree | f6b38e702674c524cc53a11f5c8705f6db0d415d | |
| parent | bfac21fca10e1bc2f6888ce8592dc58bd9f2ffc3 (diff) | |
npad: Return NpadButton in GetAndResetPressState
We were previously truncating this to a u32 as there were no known buttons that used the full 64 bits of this type. Fix this now that we know they are used.
| -rw-r--r-- | src/core/hle/service/hid/controllers/npad.cpp | 6 | ||||
| -rw-r--r-- | src/core/hle/service/hid/controllers/npad.h | 4 | ||||
| -rw-r--r-- | src/core/memory/cheat_engine.cpp | 3 | 
3 files changed, 6 insertions, 7 deletions
diff --git a/src/core/hle/service/hid/controllers/npad.cpp b/src/core/hle/service/hid/controllers/npad.cpp index 35dbf12df..6916930f7 100644 --- a/src/core/hle/service/hid/controllers/npad.cpp +++ b/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)); @@ -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 { diff --git a/src/core/hle/service/hid/controllers/npad.h b/src/core/hle/service/hid/controllers/npad.h index 9fa113bb6..de5fa5a64 100644 --- a/src/core/hle/service/hid/controllers/npad.h +++ b/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; diff --git a/src/core/memory/cheat_engine.cpp b/src/core/memory/cheat_engine.cpp index 20f0e90f5..12446c9ac 100644 --- a/src/core/memory/cheat_engine.cpp +++ b/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) {  | 
