소스 검색

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.
Morph 4 년 전
부모
커밋
322339a5fd
3개의 변경된 파일6개의 추가작업 그리고 7개의 파일을 삭제
  1. 3 3
      src/core/hle/service/hid/controllers/npad.cpp
  2. 2 2
      src/core/hle/service/hid/controllers/npad.h
  3. 1 2
      src/core/memory/cheat_engine.cpp

+ 3 - 3
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;
         libnx_state.r_stick = pad_state.r_stick;
         npad.system_ext_lifo.WriteNextEntry(pad_state);
         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)),
         std::memcpy(data + NPAD_OFFSET + (i * sizeof(NpadInternalState)),
                     &controller.shared_memory_entry, 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 {
 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
     // Logical OR for all buttons presses on all controllers
     // Specifically for cheat engine and other features.
     // Specifically for cheat engine and other features.
-    u32 GetAndResetPressState();
+    Core::HID::NpadButton GetAndResetPressState();
 
 
     static bool IsNpadIdValid(Core::HID::NpadIdType npad_id);
     static bool IsNpadIdValid(Core::HID::NpadIdType npad_id);
     static bool IsDeviceHandleValid(const Core::HID::SixAxisSensorHandle& device_handle);
     static bool IsDeviceHandleValid(const Core::HID::SixAxisSensorHandle& device_handle);
@@ -503,7 +503,7 @@ private:
     NpadControllerData& GetControllerFromNpadIdType(Core::HID::NpadIdType npad_id);
     NpadControllerData& GetControllerFromNpadIdType(Core::HID::NpadIdType npad_id);
     const NpadControllerData& GetControllerFromNpadIdType(Core::HID::NpadIdType npad_id) const;
     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{};
     std::array<NpadControllerData, 10> controller_data{};
     KernelHelpers::ServiceContext& service_context;
     KernelHelpers::ServiceContext& service_context;

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

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