summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/core/hle/service/aoc/aoc_u.cpp2
-rw-r--r--src/core/hle/service/cmif_serialization.h6
-rw-r--r--src/core/hle/service/hid/hid_server.cpp45
-rw-r--r--src/core/hle/service/hid/hid_server.h5
-rw-r--r--src/hid_core/hid_types.h5
-rw-r--r--src/hid_core/resources/npad/npad.cpp11
-rw-r--r--src/hid_core/resources/npad/npad.h2
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) {
202 LOG_DEBUG(Service_AOC, "called with offset={}, count={}, process_id={}", offset, count, 202 LOG_DEBUG(Service_AOC, "called with offset={}, count={}, process_id={}", offset, count,
203 process_id); 203 process_id);
204 204
205 const auto current = system.GetApplicationProcessProgramID(); 205 const auto current = FileSys::GetBaseTitleID(system.GetApplicationProcessProgramID());
206 206
207 std::vector<u32> out; 207 std::vector<u32> out;
208 const auto& disabled = Settings::values.disabled_addons[current]; 208 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
283 283
284 return ReadInArgument<MethodArguments, CallArguments, PrevAlign, DataOffset, HandleIndex + 1, InBufferIndex, OutBufferIndex, RawDataFinished, ArgIndex + 1>(is_domain, args, raw_data, ctx, temp); 284 return ReadInArgument<MethodArguments, CallArguments, PrevAlign, DataOffset, HandleIndex + 1, InBufferIndex, OutBufferIndex, RawDataFinished, ArgIndex + 1>(is_domain, args, raw_data, ctx, temp);
285 } else if constexpr (ArgumentTraits<ArgType>::Type == ArgumentType::InLargeData) { 285 } else if constexpr (ArgumentTraits<ArgType>::Type == ArgumentType::InLargeData) {
286 constexpr size_t BufferSize = sizeof(ArgType); 286 constexpr size_t BufferSize = sizeof(typename ArgType::Type);
287 287
288 // Clear the existing data. 288 // Clear the existing data.
289 std::memset(&std::get<ArgIndex>(args), 0, BufferSize); 289 std::memset(&std::get<ArgIndex>(args), 0, BufferSize);
@@ -324,7 +324,7 @@ void ReadInArgument(bool is_domain, CallArguments& args, const u8* raw_data, HLE
324 324
325 return ReadInArgument<MethodArguments, CallArguments, PrevAlign, DataOffset, HandleIndex, InBufferIndex + 1, OutBufferIndex, RawDataFinished, ArgIndex + 1>(is_domain, args, raw_data, ctx, temp); 325 return ReadInArgument<MethodArguments, CallArguments, PrevAlign, DataOffset, HandleIndex, InBufferIndex + 1, OutBufferIndex, RawDataFinished, ArgIndex + 1>(is_domain, args, raw_data, ctx, temp);
326 } else if constexpr (ArgumentTraits<ArgType>::Type == ArgumentType::OutLargeData) { 326 } else if constexpr (ArgumentTraits<ArgType>::Type == ArgumentType::OutLargeData) {
327 constexpr size_t BufferSize = sizeof(ArgType); 327 constexpr size_t BufferSize = sizeof(typename ArgType::Type);
328 328
329 // Clear the existing data. 329 // Clear the existing data.
330 std::memset(&std::get<ArgIndex>(args).raw, 0, BufferSize); 330 std::memset(&std::get<ArgIndex>(args).raw, 0, BufferSize);
@@ -394,7 +394,7 @@ void WriteOutArgument(bool is_domain, CallArguments& args, u8* raw_data, HLERequ
394 394
395 return WriteOutArgument<MethodArguments, CallArguments, PrevAlign, DataOffset, OutBufferIndex, RawDataFinished, ArgIndex + 1>(is_domain, args, raw_data, ctx, temp); 395 return WriteOutArgument<MethodArguments, CallArguments, PrevAlign, DataOffset, OutBufferIndex, RawDataFinished, ArgIndex + 1>(is_domain, args, raw_data, ctx, temp);
396 } else if constexpr (ArgumentTraits<ArgType>::Type == ArgumentType::OutLargeData) { 396 } else if constexpr (ArgumentTraits<ArgType>::Type == ArgumentType::OutLargeData) {
397 constexpr size_t BufferSize = sizeof(ArgType); 397 constexpr size_t BufferSize = sizeof(typename ArgType::Type);
398 398
399 ASSERT(ctx.CanWriteBuffer(OutBufferIndex)); 399 ASSERT(ctx.CanWriteBuffer(OutBufferIndex));
400 if constexpr (ArgType::Attr & BufferAttr_HipcAutoSelect) { 400 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 @@
8#include "core/hle/kernel/k_shared_memory.h" 8#include "core/hle/kernel/k_shared_memory.h"
9#include "core/hle/kernel/k_transfer_memory.h" 9#include "core/hle/kernel/k_transfer_memory.h"
10#include "core/hle/kernel/kernel.h" 10#include "core/hle/kernel/kernel.h"
11#include "core/hle/service/cmif_serialization.h"
11#include "core/hle/service/hid/hid_server.h" 12#include "core/hle/service/hid/hid_server.h"
12#include "core/hle/service/ipc_helpers.h" 13#include "core/hle/service/ipc_helpers.h"
13#include "core/memory.h" 14#include "core/memory.h"
@@ -153,7 +154,7 @@ IHidServer::IHidServer(Core::System& system_, std::shared_ptr<ResourceManager> r
153 {104, &IHidServer::DeactivateNpad, "DeactivateNpad"}, 154 {104, &IHidServer::DeactivateNpad, "DeactivateNpad"},
154 {106, &IHidServer::AcquireNpadStyleSetUpdateEventHandle, "AcquireNpadStyleSetUpdateEventHandle"}, 155 {106, &IHidServer::AcquireNpadStyleSetUpdateEventHandle, "AcquireNpadStyleSetUpdateEventHandle"},
155 {107, &IHidServer::DisconnectNpad, "DisconnectNpad"}, 156 {107, &IHidServer::DisconnectNpad, "DisconnectNpad"},
156 {108, &IHidServer::GetPlayerLedPattern, "GetPlayerLedPattern"}, 157 {108, C<&IHidServer::GetPlayerLedPattern>, "GetPlayerLedPattern"},
157 {109, &IHidServer::ActivateNpadWithRevision, "ActivateNpadWithRevision"}, 158 {109, &IHidServer::ActivateNpadWithRevision, "ActivateNpadWithRevision"},
158 {120, &IHidServer::SetNpadJoyHoldType, "SetNpadJoyHoldType"}, 159 {120, &IHidServer::SetNpadJoyHoldType, "SetNpadJoyHoldType"},
159 {121, &IHidServer::GetNpadJoyHoldType, "GetNpadJoyHoldType"}, 160 {121, &IHidServer::GetNpadJoyHoldType, "GetNpadJoyHoldType"},
@@ -1136,19 +1137,39 @@ void IHidServer::DisconnectNpad(HLERequestContext& ctx) {
1136 rb.Push(ResultSuccess); 1137 rb.Push(ResultSuccess);
1137} 1138}
1138 1139
1139void IHidServer::GetPlayerLedPattern(HLERequestContext& ctx) { 1140Result IHidServer::GetPlayerLedPattern(Out<Core::HID::LedPattern> out_led_pattern,
1140 IPC::RequestParser rp{ctx}; 1141 Core::HID::NpadIdType npad_id) {
1141 const auto npad_id{rp.PopEnum<Core::HID::NpadIdType>()};
1142
1143 Core::HID::LedPattern pattern{0, 0, 0, 0};
1144 auto controller = GetResourceManager()->GetNpad();
1145 const auto result = controller->GetLedPattern(npad_id, pattern);
1146
1147 LOG_DEBUG(Service_HID, "called, npad_id={}", npad_id); 1142 LOG_DEBUG(Service_HID, "called, npad_id={}", npad_id);
1148 1143
1149 IPC::ResponseBuilder rb{ctx, 4}; 1144 switch (npad_id) {
1150 rb.Push(result); 1145 case Core::HID::NpadIdType::Player1:
1151 rb.Push(pattern.raw); 1146 *out_led_pattern = Core::HID::LedPattern{1, 0, 0, 0};
1147 R_SUCCEED();
1148 case Core::HID::NpadIdType::Player2:
1149 *out_led_pattern = Core::HID::LedPattern{1, 1, 0, 0};
1150 R_SUCCEED();
1151 case Core::HID::NpadIdType::Player3:
1152 *out_led_pattern = Core::HID::LedPattern{1, 1, 1, 0};
1153 R_SUCCEED();
1154 case Core::HID::NpadIdType::Player4:
1155 *out_led_pattern = Core::HID::LedPattern{1, 1, 1, 1};
1156 R_SUCCEED();
1157 case Core::HID::NpadIdType::Player5:
1158 *out_led_pattern = Core::HID::LedPattern{1, 0, 0, 1};
1159 R_SUCCEED();
1160 case Core::HID::NpadIdType::Player6:
1161 *out_led_pattern = Core::HID::LedPattern{1, 0, 1, 0};
1162 R_SUCCEED();
1163 case Core::HID::NpadIdType::Player7:
1164 *out_led_pattern = Core::HID::LedPattern{1, 0, 1, 1};
1165 R_SUCCEED();
1166 case Core::HID::NpadIdType::Player8:
1167 *out_led_pattern = Core::HID::LedPattern{0, 1, 1, 0};
1168 R_SUCCEED();
1169 default:
1170 *out_led_pattern = Core::HID::LedPattern{0, 0, 0, 0};
1171 R_SUCCEED();
1172 }
1152} 1173}
1153 1174
1154void IHidServer::ActivateNpadWithRevision(HLERequestContext& ctx) { 1175void 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 @@
3 3
4#pragma once 4#pragma once
5 5
6#include "core/hle/service/cmif_types.h"
6#include "core/hle/service/service.h" 7#include "core/hle/service/service.h"
8#include "hid_core/hid_types.h"
7 9
8namespace Core { 10namespace Core {
9class System; 11class System;
@@ -66,7 +68,8 @@ private:
66 void DeactivateNpad(HLERequestContext& ctx); 68 void DeactivateNpad(HLERequestContext& ctx);
67 void AcquireNpadStyleSetUpdateEventHandle(HLERequestContext& ctx); 69 void AcquireNpadStyleSetUpdateEventHandle(HLERequestContext& ctx);
68 void DisconnectNpad(HLERequestContext& ctx); 70 void DisconnectNpad(HLERequestContext& ctx);
69 void GetPlayerLedPattern(HLERequestContext& ctx); 71 Result GetPlayerLedPattern(Out<Core::HID::LedPattern> out_led_pattern,
72 Core::HID::NpadIdType npad_id);
70 void ActivateNpadWithRevision(HLERequestContext& ctx); 73 void ActivateNpadWithRevision(HLERequestContext& ctx);
71 void SetNpadJoyHoldType(HLERequestContext& ctx); 74 void SetNpadJoyHoldType(HLERequestContext& ctx);
72 void GetNpadJoyHoldType(HLERequestContext& ctx); 75 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 {
422static_assert(sizeof(NpadPowerInfo) == 0xC, "NpadPowerInfo is an invalid size"); 422static_assert(sizeof(NpadPowerInfo) == 0xC, "NpadPowerInfo is an invalid size");
423 423
424struct LedPattern { 424struct LedPattern {
425 explicit LedPattern(u64 light1, u64 light2, u64 light3, u64 light4) { 425 LedPattern() {
426 raw = 0;
427 }
428 LedPattern(u64 light1, u64 light2, u64 light3, u64 light4) {
426 position1.Assign(light1); 429 position1.Assign(light1);
427 position2.Assign(light2); 430 position2.Assign(light2);
428 position3.Assign(light3); 431 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,
956 return ResultSuccess; 956 return ResultSuccess;
957} 957}
958 958
959Result NPad::GetLedPattern(Core::HID::NpadIdType npad_id, Core::HID::LedPattern& pattern) const {
960 if (!IsNpadIdValid(npad_id)) {
961 LOG_ERROR(Service_HID, "Invalid NpadIdType npad_id:{}", npad_id);
962 return ResultInvalidNpadId;
963 }
964 const auto aruid = applet_resource_holder.applet_resource->GetActiveAruid();
965 const auto& controller = GetControllerFromNpadIdType(aruid, npad_id).device;
966 pattern = controller->GetLedPattern();
967 return ResultSuccess;
968}
969
970Result NPad::IsUnintendedHomeButtonInputProtectionEnabled(bool& out_is_enabled, u64 aruid, 959Result NPad::IsUnintendedHomeButtonInputProtectionEnabled(bool& out_is_enabled, u64 aruid,
971 Core::HID::NpadIdType npad_id) const { 960 Core::HID::NpadIdType npad_id) const {
972 std::scoped_lock lock{mutex}; 961 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:
97 Result ResetIsSixAxisSensorDeviceNewlyAssigned( 97 Result ResetIsSixAxisSensorDeviceNewlyAssigned(
98 u64 aruid, const Core::HID::SixAxisSensorHandle& sixaxis_handle); 98 u64 aruid, const Core::HID::SixAxisSensorHandle& sixaxis_handle);
99 99
100 Result GetLedPattern(Core::HID::NpadIdType npad_id, Core::HID::LedPattern& pattern) const;
101
102 Result IsUnintendedHomeButtonInputProtectionEnabled(bool& out_is_enabled, u64 aruid, 100 Result IsUnintendedHomeButtonInputProtectionEnabled(bool& out_is_enabled, u64 aruid,
103 Core::HID::NpadIdType npad_id) const; 101 Core::HID::NpadIdType npad_id) const;
104 Result EnableUnintendedHomeButtonInputProtection(u64 aruid, Core::HID::NpadIdType npad_id, 102 Result EnableUnintendedHomeButtonInputProtection(u64 aruid, Core::HID::NpadIdType npad_id,