From 5857aea94ef52186f64a6794adf418ba92329329 Mon Sep 17 00:00:00 2001 From: David Marcec Date: Sat, 6 Oct 2018 13:14:42 +1000 Subject: Addressed changes for better hid --- src/core/hle/service/hid/hid.cpp | 67 ++++++++++++++++++---------------------- 1 file changed, 30 insertions(+), 37 deletions(-) (limited to 'src/core/hle/service/hid/hid.cpp') diff --git a/src/core/hle/service/hid/hid.cpp b/src/core/hle/service/hid/hid.cpp index 757b3b770..ba4aefa6c 100644 --- a/src/core/hle/service/hid/hid.cpp +++ b/src/core/hle/service/hid/hid.cpp @@ -38,8 +38,8 @@ namespace Service::HID { constexpr u64 pad_update_ticks = CoreTiming::BASE_CLOCK_RATE / 100; constexpr u64 accelerometer_update_ticks = CoreTiming::BASE_CLOCK_RATE / 100; constexpr u64 gyroscope_update_ticks = CoreTiming::BASE_CLOCK_RATE / 100; -constexpr size_t SHARED_MEMORY_SIZE = 0x40000; -enum class HidController : size_t { +constexpr std::size_t SHARED_MEMORY_SIZE = 0x40000; +enum class HidController : std::size_t { DebugPad, Touchscreen, Mouse, @@ -52,7 +52,7 @@ enum class HidController : size_t { NPad, Gesture, - MaxControllers + MaxControllers, }; class IAppletResource final : public ServiceFramework { @@ -68,33 +68,21 @@ public: kernel, nullptr, SHARED_MEMORY_SIZE, Kernel::MemoryPermission::ReadWrite, Kernel::MemoryPermission::Read, 0, Kernel::MemoryRegion::BASE, "HID:SharedMemory"); - controllers[static_cast(HidController::DebugPad)] = - std::make_unique(); - controllers[static_cast(HidController::Touchscreen)] = - std::make_unique(); - controllers[static_cast(HidController::Mouse)] = - std::make_unique(); - controllers[static_cast(HidController::Keyboard)] = - std::make_unique(); - controllers[static_cast(HidController::XPad)] = std::make_unique(); - - controllers[static_cast(HidController::Unknown1)] = - std::make_unique(); - controllers[static_cast(HidController::Unknown2)] = - std::make_unique(); - controllers[static_cast(HidController::Unknown3)] = - std::make_unique(); - - controllers[static_cast(HidController::SixAxisSensor)] = - std::make_unique(); - - controllers[static_cast(HidController::NPad)] = std::make_unique(); - controllers[static_cast(HidController::Gesture)] = - std::make_unique(); + MakeController(HidController::DebugPad); + MakeController(HidController::Touchscreen); + MakeController(HidController::Mouse); + MakeController(HidController::Keyboard); + MakeController(HidController::XPad); + MakeController(HidController::Unknown1); + MakeController(HidController::Unknown2); + MakeController(HidController::Unknown3); + MakeController(HidController::SixAxisSensor); + MakeController(HidController::NPad); + MakeController(HidController::Gesture); // Homebrew doesn't try to activate some controllers, so we activate them by default - controllers[static_cast(HidController::NPad)]->ActivateController(); - controllers[static_cast(HidController::Touchscreen)]->ActivateController(); + GetController(HidController::NPad).ActivateController(); + GetController(HidController::Touchscreen).ActivateController(); GetController(HidController::Unknown1).SetCommonHeaderOffset(0x4c00); GetController(HidController::Unknown2).SetCommonHeaderOffset(0x4e00); @@ -118,6 +106,11 @@ public: controllers[static_cast(controller)]->DeactivateController(); } + template + void MakeController(HidController controller) { + controllers[static_cast(controller)] = std::make_unique(); + } + template T& GetController(HidController controller) { return static_cast(*controllers[static_cast(controller)]); @@ -136,7 +129,7 @@ private: } void UpdateControllers(u64 userdata, int cycles_late) { - bool should_reload = Settings::values.is_device_reload_pending.exchange(false); + const bool should_reload = Settings::values.is_device_reload_pending.exchange(false); for (const auto& controller : controllers) { if (should_reload) { controller->OnLoadInputDevices(); @@ -386,7 +379,6 @@ private: } void GetSupportedNpadStyleSet(Kernel::HLERequestContext& ctx) { - std::string blah = ctx.Description(); auto& controller = applet_resource->GetController(HidController::NPad); IPC::ResponseBuilder rb{ctx, 3}; @@ -434,7 +426,7 @@ private: void SetNpadJoyHoldType(Kernel::HLERequestContext& ctx) { auto& controller = applet_resource->GetController(HidController::NPad); IPC::RequestParser rp{ctx}; - auto hold_type = rp.PopRaw(); + const auto hold_type = rp.PopRaw(); controller.SetHoldType(Controller_NPad::NpadHoldType{hold_type}); IPC::ResponseBuilder rb{ctx, 2}; @@ -443,7 +435,8 @@ private: } void GetNpadJoyHoldType(Kernel::HLERequestContext& ctx) { - auto& controller = applet_resource->GetController(HidController::NPad); + const auto& controller = + applet_resource->GetController(HidController::NPad); IPC::ResponseBuilder rb{ctx, 4}; rb.Push(RESULT_SUCCESS); rb.Push(static_cast(controller.GetHoldType())); @@ -458,8 +451,8 @@ private: void SendVibrationValue(Kernel::HLERequestContext& ctx) { IPC::RequestParser rp{ctx}; - auto controller_id = rp.PopRaw(); - auto vibration_values = rp.PopRaw(); + const auto controller_id = rp.PopRaw(); + const auto vibration_values = rp.PopRaw(); IPC::ResponseBuilder rb{ctx, 2}; rb.Push(RESULT_SUCCESS); @@ -470,8 +463,8 @@ private: } void SendVibrationValues(Kernel::HLERequestContext& ctx) { - auto controllers = ctx.ReadBuffer(0); - auto vibrations = ctx.ReadBuffer(1); + const auto controllers = ctx.ReadBuffer(0); + const auto vibrations = ctx.ReadBuffer(1); std::vector controller_list(controllers.size() / sizeof(u32)); std::vector vibration_list(vibrations.size() / @@ -501,7 +494,7 @@ private: void SetNpadJoyAssignmentModeDual(Kernel::HLERequestContext& ctx) { IPC::RequestParser rp{ctx}; - auto npad_id = rp.PopRaw(); + const auto npad_id = rp.PopRaw(); auto& controller = applet_resource->GetController(HidController::NPad); controller.SetNpadMode(npad_id, Controller_NPad::NPadAssignments::Dual); -- cgit v1.2.3