diff options
author | Narr the Reg <juangerman-13@hotmail.com> | 2024-01-11 05:06:54 +0100 |
---|---|---|
committer | german77 <juangerman-13@hotmail.com> | 2024-01-16 06:15:40 +0100 |
commit | 2cacb9d48c98603176e52ecc94f2374a934797fb (patch) | |
tree | 12badf5b4eede22b22dece03a9074197ec631a1e /src/hid_core/resources/abstracted_pad | |
parent | Merge pull request #12686 from szepeviktor/typos3 (diff) | |
download | yuzu-2cacb9d48c98603176e52ecc94f2374a934797fb.tar yuzu-2cacb9d48c98603176e52ecc94f2374a934797fb.tar.gz yuzu-2cacb9d48c98603176e52ecc94f2374a934797fb.tar.bz2 yuzu-2cacb9d48c98603176e52ecc94f2374a934797fb.tar.lz yuzu-2cacb9d48c98603176e52ecc94f2374a934797fb.tar.xz yuzu-2cacb9d48c98603176e52ecc94f2374a934797fb.tar.zst yuzu-2cacb9d48c98603176e52ecc94f2374a934797fb.zip |
Diffstat (limited to 'src/hid_core/resources/abstracted_pad')
6 files changed, 61 insertions, 20 deletions
diff --git a/src/hid_core/resources/abstracted_pad/abstract_ir_sensor_handler.cpp b/src/hid_core/resources/abstracted_pad/abstract_ir_sensor_handler.cpp index d4e4181bf..e399edfd7 100644 --- a/src/hid_core/resources/abstracted_pad/abstract_ir_sensor_handler.cpp +++ b/src/hid_core/resources/abstracted_pad/abstract_ir_sensor_handler.cpp @@ -115,7 +115,7 @@ Result NpadAbstractIrSensorHandler::GetXcdHandleForNpadWithIrSensor(u64& handle) if (sensor_state < NpadIrSensorState::Available) { return ResultIrSensorIsNotReady; } - handle = xcd_handle; + // handle = xcd_handle; return ResultSuccess; } diff --git a/src/hid_core/resources/abstracted_pad/abstract_ir_sensor_handler.h b/src/hid_core/resources/abstracted_pad/abstract_ir_sensor_handler.h index fe8e005af..997811511 100644 --- a/src/hid_core/resources/abstracted_pad/abstract_ir_sensor_handler.h +++ b/src/hid_core/resources/abstracted_pad/abstract_ir_sensor_handler.h @@ -7,6 +7,10 @@ #include "core/hle/result.h" #include "hid_core/hid_types.h" +namespace Core::HID { +class EmulatedController; +} + namespace Kernel { class KEvent; class KReadableEvent; @@ -50,7 +54,7 @@ private: s32 ref_counter{}; Kernel::KEvent* ir_sensor_event{nullptr}; - u64 xcd_handle{}; + Core::HID::EmulatedController* xcd_handle{}; NpadIrSensorState sensor_state{}; }; } // namespace Service::HID diff --git a/src/hid_core/resources/abstracted_pad/abstract_pad.cpp b/src/hid_core/resources/abstracted_pad/abstract_pad.cpp index 2c7691d7c..435b095f0 100644 --- a/src/hid_core/resources/abstracted_pad/abstract_pad.cpp +++ b/src/hid_core/resources/abstracted_pad/abstract_pad.cpp @@ -1,6 +1,7 @@ // SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project // SPDX-License-Identifier: GPL-3.0-or-later +#include "hid_core/hid_core.h" #include "hid_core/hid_result.h" #include "hid_core/resources/abstracted_pad/abstract_pad.h" #include "hid_core/resources/applet_resource.h" @@ -16,7 +17,7 @@ void AbstractPad::SetExternals(AppletResourceHolder* applet_resource, CaptureButtonResource* capture_button_resource, HomeButtonResource* home_button_resource, SixAxisResource* sixaxis_resource, PalmaResource* palma_resource, - VibrationHandler* vibration) { + NpadVibration* vibration, Core::HID::HIDCore* core) { applet_resource_holder = applet_resource; properties_handler.SetAppletResource(applet_resource_holder); @@ -35,13 +36,14 @@ void AbstractPad::SetExternals(AppletResourceHolder* applet_resource, mcu_handler.SetAbstractPadHolder(&abstract_pad_holder); mcu_handler.SetPropertiesHandler(&properties_handler); - std::array<NpadVibrationDevice*, 2> vibration_devices{&vibration_left, &vibration_right}; vibration_handler.SetAppletResource(applet_resource_holder); vibration_handler.SetAbstractPadHolder(&abstract_pad_holder); vibration_handler.SetPropertiesHandler(&properties_handler); vibration_handler.SetN64Vibration(&vibration_n64); - vibration_handler.SetVibration(vibration_devices); + vibration_handler.SetVibration(&vibration_left, &vibration_right); vibration_handler.SetGcVibration(&vibration_gc); + vibration_handler.SetVibrationHandler(vibration); + vibration_handler.SetHidCore(core); sixaxis_handler.SetAppletResource(applet_resource_holder); sixaxis_handler.SetAbstractPadHolder(&abstract_pad_holder); @@ -239,11 +241,6 @@ NpadVibrationDevice* AbstractPad::GetVibrationDevice(Core::HID::DeviceIndex devi return &vibration_left; } -void AbstractPad::GetLeftRightVibrationDevice(std::vector<NpadVibrationDevice*> list) { - list.emplace_back(&vibration_left); - list.emplace_back(&vibration_right); -} - NpadGcVibrationDevice* AbstractPad::GetGCVibrationDevice() { return &vibration_gc; } diff --git a/src/hid_core/resources/abstracted_pad/abstract_pad.h b/src/hid_core/resources/abstracted_pad/abstract_pad.h index cbdf84af7..329792457 100644 --- a/src/hid_core/resources/abstracted_pad/abstract_pad.h +++ b/src/hid_core/resources/abstracted_pad/abstract_pad.h @@ -32,7 +32,6 @@ class AppletResource; class SixAxisResource; class PalmaResource; class NPadResource; -class AbstractPad; class NpadLastActiveHandler; class NpadIrNfcHandler; class UniquePads; @@ -44,7 +43,6 @@ class NpadGcVibration; class CaptureButtonResource; class HomeButtonResource; -class VibrationHandler; struct HandheldConfig; @@ -57,7 +55,8 @@ public: void SetExternals(AppletResourceHolder* applet_resource, CaptureButtonResource* capture_button_resource, HomeButtonResource* home_button_resource, SixAxisResource* sixaxis_resource, - PalmaResource* palma_resource, VibrationHandler* vibration); + PalmaResource* palma_resource, NpadVibration* vibration, + Core::HID::HIDCore* core); void SetNpadId(Core::HID::NpadIdType npad_id); Result Activate(); @@ -78,7 +77,6 @@ public: NpadN64VibrationDevice* GetN64VibrationDevice(); NpadVibrationDevice* GetVibrationDevice(Core::HID::DeviceIndex device_index); - void GetLeftRightVibrationDevice(std::vector<NpadVibrationDevice*> list); NpadGcVibrationDevice* GetGCVibrationDevice(); Core::HID::NpadIdType GetLastActiveNpad(); diff --git a/src/hid_core/resources/abstracted_pad/abstract_vibration_handler.cpp b/src/hid_core/resources/abstracted_pad/abstract_vibration_handler.cpp index a00d6c9de..ca64b0a43 100644 --- a/src/hid_core/resources/abstracted_pad/abstract_vibration_handler.cpp +++ b/src/hid_core/resources/abstracted_pad/abstract_vibration_handler.cpp @@ -1,6 +1,8 @@ // SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project // SPDX-License-Identifier: GPL-3.0-or-later +#include "hid_core/frontend/emulated_controller.h" +#include "hid_core/hid_core.h" #include "hid_core/hid_result.h" #include "hid_core/hid_util.h" #include "hid_core/resources/abstracted_pad/abstract_pad_holder.h" @@ -30,14 +32,22 @@ void NpadAbstractVibrationHandler::SetPropertiesHandler(NpadAbstractPropertiesHa properties_handler = handler; } +void NpadAbstractVibrationHandler::SetVibrationHandler(NpadVibration* handler) { + vibration_handler = handler; +} + +void NpadAbstractVibrationHandler::SetHidCore(Core::HID::HIDCore* core) { + hid_core = core; +} + void NpadAbstractVibrationHandler::SetN64Vibration(NpadN64VibrationDevice* n64_device) { n64_vibration_device = n64_device; } -void NpadAbstractVibrationHandler::SetVibration(std::span<NpadVibrationDevice*> device) { - for (std::size_t i = 0; i < device.size() && i < vibration_device.size(); i++) { - vibration_device[i] = device[i]; - } +void NpadAbstractVibrationHandler::SetVibration(NpadVibrationDevice* left_device, + NpadVibrationDevice* right_device) { + left_vibration_device = left_device; + right_vibration_device = right_device; } void NpadAbstractVibrationHandler::SetGcVibration(NpadGcVibrationDevice* gc_device) { @@ -69,5 +79,29 @@ void NpadAbstractVibrationHandler::UpdateVibrationState() { if (!is_handheld_hid_enabled && is_force_handheld_style_vibration) { // TODO } + + // TODO: This function isn't accurate. It's supposed to get 5 abstracted pads from the + // NpadAbstractPropertiesHandler but this handler isn't fully implemented yet + IAbstractedPad abstracted_pad{}; + const auto npad_id = properties_handler->GetNpadId(); + abstracted_pad.xcd_handle = hid_core->GetEmulatedController(npad_id); + abstracted_pad.internal_flags.is_connected.Assign(abstracted_pad.xcd_handle->IsConnected()); + + if (abstracted_pad.internal_flags.is_connected) { + left_vibration_device->Mount(abstracted_pad, Core::HID::DeviceIndex::Left, + vibration_handler); + right_vibration_device->Mount(abstracted_pad, Core::HID::DeviceIndex::Right, + vibration_handler); + gc_vibration_device->Mount(abstracted_pad, 0, vibration_handler); + gc_vibration_device->Mount(abstracted_pad, 0, vibration_handler); + n64_vibration_device->Mount(abstracted_pad, vibration_handler); + return; + } + + left_vibration_device->Unmount(); + right_vibration_device->Unmount(); + gc_vibration_device->Unmount(); + gc_vibration_device->Unmount(); + n64_vibration_device->Unmount(); } } // namespace Service::HID diff --git a/src/hid_core/resources/abstracted_pad/abstract_vibration_handler.h b/src/hid_core/resources/abstracted_pad/abstract_vibration_handler.h index aeb07ce86..8bc8129c2 100644 --- a/src/hid_core/resources/abstracted_pad/abstract_vibration_handler.h +++ b/src/hid_core/resources/abstracted_pad/abstract_vibration_handler.h @@ -9,6 +9,10 @@ #include "core/hle/result.h" #include "hid_core/hid_types.h" +namespace Core::HID { +class HIDCore; +} + namespace Service::HID { struct AppletResourceHolder; class NpadAbstractedPadHolder; @@ -27,9 +31,11 @@ public: void SetAbstractPadHolder(NpadAbstractedPadHolder* holder); void SetAppletResource(AppletResourceHolder* applet_resource); void SetPropertiesHandler(NpadAbstractPropertiesHandler* handler); + void SetVibrationHandler(NpadVibration* handler); + void SetHidCore(Core::HID::HIDCore* core); void SetN64Vibration(NpadN64VibrationDevice* n64_device); - void SetVibration(std::span<NpadVibrationDevice*> device); + void SetVibration(NpadVibrationDevice* left_device, NpadVibrationDevice* right_device); void SetGcVibration(NpadGcVibrationDevice* gc_device); Result IncrementRefCounter(); @@ -41,9 +47,11 @@ private: AppletResourceHolder* applet_resource_holder{nullptr}; NpadAbstractedPadHolder* abstract_pad_holder{nullptr}; NpadAbstractPropertiesHandler* properties_handler{nullptr}; + Core::HID::HIDCore* hid_core{nullptr}; NpadN64VibrationDevice* n64_vibration_device{nullptr}; - std::array<NpadVibrationDevice*, 2> vibration_device{}; + NpadVibrationDevice* left_vibration_device{}; + NpadVibrationDevice* right_vibration_device{}; NpadGcVibrationDevice* gc_vibration_device{nullptr}; NpadVibration* vibration_handler{nullptr}; s32 ref_counter{}; |