diff options
-rw-r--r-- | src/core/hle/service/aoc/aoc_u.cpp | 2 | ||||
-rw-r--r-- | src/core/hle/service/cmif_serialization.h | 6 | ||||
-rw-r--r-- | src/core/hle/service/hid/hid_server.cpp | 45 | ||||
-rw-r--r-- | src/core/hle/service/hid/hid_server.h | 5 | ||||
-rw-r--r-- | src/hid_core/hid_types.h | 5 | ||||
-rw-r--r-- | src/hid_core/resources/npad/npad.cpp | 11 | ||||
-rw-r--r-- | src/hid_core/resources/npad/npad.h | 2 |
7 files changed, 45 insertions, 31 deletions
diff --git a/src/core/hle/service/aoc/aoc_u.cpp b/src/core/hle/service/aoc/aoc_u.cpp index 7075ab800..486719cc0 100644 --- a/src/core/hle/service/aoc/aoc_u.cpp +++ b/src/core/hle/service/aoc/aoc_u.cpp @@ -202,7 +202,7 @@ void AOC_U::ListAddOnContent(HLERequestContext& ctx) { LOG_DEBUG(Service_AOC, "called with offset={}, count={}, process_id={}", offset, count, process_id); - const auto current = system.GetApplicationProcessProgramID(); + const auto current = FileSys::GetBaseTitleID(system.GetApplicationProcessProgramID()); std::vector<u32> out; const auto& disabled = Settings::values.disabled_addons[current]; diff --git a/src/core/hle/service/cmif_serialization.h b/src/core/hle/service/cmif_serialization.h index 5eabf51fe..315475e71 100644 --- a/src/core/hle/service/cmif_serialization.h +++ b/src/core/hle/service/cmif_serialization.h @@ -283,7 +283,7 @@ void ReadInArgument(bool is_domain, CallArguments& args, const u8* raw_data, HLE return ReadInArgument<MethodArguments, CallArguments, PrevAlign, DataOffset, HandleIndex + 1, InBufferIndex, OutBufferIndex, RawDataFinished, ArgIndex + 1>(is_domain, args, raw_data, ctx, temp); } else if constexpr (ArgumentTraits<ArgType>::Type == ArgumentType::InLargeData) { - constexpr size_t BufferSize = sizeof(ArgType); + constexpr size_t BufferSize = sizeof(typename ArgType::Type); // Clear the existing data. std::memset(&std::get<ArgIndex>(args), 0, BufferSize); @@ -324,7 +324,7 @@ void ReadInArgument(bool is_domain, CallArguments& args, const u8* raw_data, HLE return ReadInArgument<MethodArguments, CallArguments, PrevAlign, DataOffset, HandleIndex, InBufferIndex + 1, OutBufferIndex, RawDataFinished, ArgIndex + 1>(is_domain, args, raw_data, ctx, temp); } else if constexpr (ArgumentTraits<ArgType>::Type == ArgumentType::OutLargeData) { - constexpr size_t BufferSize = sizeof(ArgType); + constexpr size_t BufferSize = sizeof(typename ArgType::Type); // Clear the existing data. std::memset(&std::get<ArgIndex>(args).raw, 0, BufferSize); @@ -394,7 +394,7 @@ void WriteOutArgument(bool is_domain, CallArguments& args, u8* raw_data, HLERequ return WriteOutArgument<MethodArguments, CallArguments, PrevAlign, DataOffset, OutBufferIndex, RawDataFinished, ArgIndex + 1>(is_domain, args, raw_data, ctx, temp); } else if constexpr (ArgumentTraits<ArgType>::Type == ArgumentType::OutLargeData) { - constexpr size_t BufferSize = sizeof(ArgType); + constexpr size_t BufferSize = sizeof(typename ArgType::Type); ASSERT(ctx.CanWriteBuffer(OutBufferIndex)); if constexpr (ArgType::Attr & BufferAttr_HipcAutoSelect) { diff --git a/src/core/hle/service/hid/hid_server.cpp b/src/core/hle/service/hid/hid_server.cpp index 09c47b5e3..938b93451 100644 --- a/src/core/hle/service/hid/hid_server.cpp +++ b/src/core/hle/service/hid/hid_server.cpp @@ -8,6 +8,7 @@ #include "core/hle/kernel/k_shared_memory.h" #include "core/hle/kernel/k_transfer_memory.h" #include "core/hle/kernel/kernel.h" +#include "core/hle/service/cmif_serialization.h" #include "core/hle/service/hid/hid_server.h" #include "core/hle/service/ipc_helpers.h" #include "core/memory.h" @@ -153,7 +154,7 @@ IHidServer::IHidServer(Core::System& system_, std::shared_ptr<ResourceManager> r {104, &IHidServer::DeactivateNpad, "DeactivateNpad"}, {106, &IHidServer::AcquireNpadStyleSetUpdateEventHandle, "AcquireNpadStyleSetUpdateEventHandle"}, {107, &IHidServer::DisconnectNpad, "DisconnectNpad"}, - {108, &IHidServer::GetPlayerLedPattern, "GetPlayerLedPattern"}, + {108, C<&IHidServer::GetPlayerLedPattern>, "GetPlayerLedPattern"}, {109, &IHidServer::ActivateNpadWithRevision, "ActivateNpadWithRevision"}, {120, &IHidServer::SetNpadJoyHoldType, "SetNpadJoyHoldType"}, {121, &IHidServer::GetNpadJoyHoldType, "GetNpadJoyHoldType"}, @@ -1136,19 +1137,39 @@ void IHidServer::DisconnectNpad(HLERequestContext& ctx) { rb.Push(ResultSuccess); } -void IHidServer::GetPlayerLedPattern(HLERequestContext& ctx) { - IPC::RequestParser rp{ctx}; - const auto npad_id{rp.PopEnum<Core::HID::NpadIdType>()}; - - Core::HID::LedPattern pattern{0, 0, 0, 0}; - auto controller = GetResourceManager()->GetNpad(); - const auto result = controller->GetLedPattern(npad_id, pattern); - +Result IHidServer::GetPlayerLedPattern(Out<Core::HID::LedPattern> out_led_pattern, + Core::HID::NpadIdType npad_id) { LOG_DEBUG(Service_HID, "called, npad_id={}", npad_id); - IPC::ResponseBuilder rb{ctx, 4}; - rb.Push(result); - rb.Push(pattern.raw); + switch (npad_id) { + case Core::HID::NpadIdType::Player1: + *out_led_pattern = Core::HID::LedPattern{1, 0, 0, 0}; + R_SUCCEED(); + case Core::HID::NpadIdType::Player2: + *out_led_pattern = Core::HID::LedPattern{1, 1, 0, 0}; + R_SUCCEED(); + case Core::HID::NpadIdType::Player3: + *out_led_pattern = Core::HID::LedPattern{1, 1, 1, 0}; + R_SUCCEED(); + case Core::HID::NpadIdType::Player4: + *out_led_pattern = Core::HID::LedPattern{1, 1, 1, 1}; + R_SUCCEED(); + case Core::HID::NpadIdType::Player5: + *out_led_pattern = Core::HID::LedPattern{1, 0, 0, 1}; + R_SUCCEED(); + case Core::HID::NpadIdType::Player6: + *out_led_pattern = Core::HID::LedPattern{1, 0, 1, 0}; + R_SUCCEED(); + case Core::HID::NpadIdType::Player7: + *out_led_pattern = Core::HID::LedPattern{1, 0, 1, 1}; + R_SUCCEED(); + case Core::HID::NpadIdType::Player8: + *out_led_pattern = Core::HID::LedPattern{0, 1, 1, 0}; + R_SUCCEED(); + default: + *out_led_pattern = Core::HID::LedPattern{0, 0, 0, 0}; + R_SUCCEED(); + } } void IHidServer::ActivateNpadWithRevision(HLERequestContext& ctx) { diff --git a/src/core/hle/service/hid/hid_server.h b/src/core/hle/service/hid/hid_server.h index 3a2e0a230..faf775689 100644 --- a/src/core/hle/service/hid/hid_server.h +++ b/src/core/hle/service/hid/hid_server.h @@ -3,7 +3,9 @@ #pragma once +#include "core/hle/service/cmif_types.h" #include "core/hle/service/service.h" +#include "hid_core/hid_types.h" namespace Core { class System; @@ -66,7 +68,8 @@ private: void DeactivateNpad(HLERequestContext& ctx); void AcquireNpadStyleSetUpdateEventHandle(HLERequestContext& ctx); void DisconnectNpad(HLERequestContext& ctx); - void GetPlayerLedPattern(HLERequestContext& ctx); + Result GetPlayerLedPattern(Out<Core::HID::LedPattern> out_led_pattern, + Core::HID::NpadIdType npad_id); void ActivateNpadWithRevision(HLERequestContext& ctx); void SetNpadJoyHoldType(HLERequestContext& ctx); void GetNpadJoyHoldType(HLERequestContext& ctx); diff --git a/src/hid_core/hid_types.h b/src/hid_core/hid_types.h index b310ab72d..ffb5f1926 100644 --- a/src/hid_core/hid_types.h +++ b/src/hid_core/hid_types.h @@ -422,7 +422,10 @@ struct NpadPowerInfo { static_assert(sizeof(NpadPowerInfo) == 0xC, "NpadPowerInfo is an invalid size"); struct LedPattern { - explicit LedPattern(u64 light1, u64 light2, u64 light3, u64 light4) { + LedPattern() { + raw = 0; + } + LedPattern(u64 light1, u64 light2, u64 light3, u64 light4) { position1.Assign(light1); position2.Assign(light2); position3.Assign(light3); diff --git a/src/hid_core/resources/npad/npad.cpp b/src/hid_core/resources/npad/npad.cpp index cde84b1bb..2823be348 100644 --- a/src/hid_core/resources/npad/npad.cpp +++ b/src/hid_core/resources/npad/npad.cpp @@ -956,17 +956,6 @@ Result NPad::SwapNpadAssignment(u64 aruid, Core::HID::NpadIdType npad_id_1, return ResultSuccess; } -Result NPad::GetLedPattern(Core::HID::NpadIdType npad_id, Core::HID::LedPattern& pattern) const { - if (!IsNpadIdValid(npad_id)) { - LOG_ERROR(Service_HID, "Invalid NpadIdType npad_id:{}", npad_id); - return ResultInvalidNpadId; - } - const auto aruid = applet_resource_holder.applet_resource->GetActiveAruid(); - const auto& controller = GetControllerFromNpadIdType(aruid, npad_id).device; - pattern = controller->GetLedPattern(); - return ResultSuccess; -} - Result NPad::IsUnintendedHomeButtonInputProtectionEnabled(bool& out_is_enabled, u64 aruid, Core::HID::NpadIdType npad_id) const { std::scoped_lock lock{mutex}; diff --git a/src/hid_core/resources/npad/npad.h b/src/hid_core/resources/npad/npad.h index 502cb9b55..3b1a69e7f 100644 --- a/src/hid_core/resources/npad/npad.h +++ b/src/hid_core/resources/npad/npad.h @@ -97,8 +97,6 @@ public: Result ResetIsSixAxisSensorDeviceNewlyAssigned( u64 aruid, const Core::HID::SixAxisSensorHandle& sixaxis_handle); - Result GetLedPattern(Core::HID::NpadIdType npad_id, Core::HID::LedPattern& pattern) const; - Result IsUnintendedHomeButtonInputProtectionEnabled(bool& out_is_enabled, u64 aruid, Core::HID::NpadIdType npad_id) const; Result EnableUnintendedHomeButtonInputProtection(u64 aruid, Core::HID::NpadIdType npad_id, |