summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar german772024-01-06 21:35:10 -0600
committerGravatar Narr the Reg2024-01-06 23:30:41 -0600
commitf224ef6185679338aa8eb8093b150c461f488982 (patch)
tree153d010b4d9a46f4a57e7cfec09f8fd419c17af8
parentservice: hid: Implement CaptureButtonAssignment (diff)
downloadyuzu-f224ef6185679338aa8eb8093b150c461f488982.tar.gz
yuzu-f224ef6185679338aa8eb8093b150c461f488982.tar.xz
yuzu-f224ef6185679338aa8eb8093b150c461f488982.zip
service: hid: Implement SetNpadSystemExtStateEnabled
-rw-r--r--src/core/hle/service/hid/hid_server.cpp4
-rw-r--r--src/core/hle/service/hid/hid_system_server.cpp22
-rw-r--r--src/core/hle/service/hid/hid_system_server.h2
-rw-r--r--src/hid_core/resources/npad/npad.cpp12
-rw-r--r--src/hid_core/resources/npad/npad.h2
5 files changed, 34 insertions, 8 deletions
diff --git a/src/core/hle/service/hid/hid_server.cpp b/src/core/hle/service/hid/hid_server.cpp
index 75bf3e682..74898888a 100644
--- a/src/core/hle/service/hid/hid_server.cpp
+++ b/src/core/hle/service/hid/hid_server.cpp
@@ -1444,8 +1444,8 @@ void IHidServer::SetNpadAnalogStickUseCenterClamp(HLERequestContext& ctx) {
1444 1444
1445 const auto parameters{rp.PopRaw<Parameters>()}; 1445 const auto parameters{rp.PopRaw<Parameters>()};
1446 1446
1447 LOG_WARNING(Service_HID, "(STUBBED) called, use_center_clamp={}, applet_resource_user_id={}", 1447 LOG_INFO(Service_HID, "called, use_center_clamp={}, applet_resource_user_id={}",
1448 parameters.use_center_clamp, parameters.applet_resource_user_id); 1448 parameters.use_center_clamp, parameters.applet_resource_user_id);
1449 1449
1450 GetResourceManager()->GetNpad()->SetNpadAnalogStickUseCenterClamp( 1450 GetResourceManager()->GetNpad()->SetNpadAnalogStickUseCenterClamp(
1451 parameters.applet_resource_user_id, parameters.use_center_clamp); 1451 parameters.applet_resource_user_id, parameters.use_center_clamp);
diff --git a/src/core/hle/service/hid/hid_system_server.cpp b/src/core/hle/service/hid/hid_system_server.cpp
index ac0d8bd5d..ead593ab3 100644
--- a/src/core/hle/service/hid/hid_system_server.cpp
+++ b/src/core/hle/service/hid/hid_system_server.cpp
@@ -54,8 +54,8 @@ IHidSystemServer::IHidSystemServer(Core::System& system_, std::shared_ptr<Resour
54 {318, &IHidSystemServer::HasBattery, "HasBattery"}, 54 {318, &IHidSystemServer::HasBattery, "HasBattery"},
55 {319, &IHidSystemServer::HasLeftRightBattery, "HasLeftRightBattery"}, 55 {319, &IHidSystemServer::HasLeftRightBattery, "HasLeftRightBattery"},
56 {321, &IHidSystemServer::GetUniquePadsFromNpad, "GetUniquePadsFromNpad"}, 56 {321, &IHidSystemServer::GetUniquePadsFromNpad, "GetUniquePadsFromNpad"},
57 {322, &IHidSystemServer::GetIrSensorState, "GetIrSensorState"}, 57 {322, &IHidSystemServer::SetNpadSystemExtStateEnabled, "SetNpadSystemExtStateEnabled"},
58 {323, nullptr, "GetXcdHandleForNpadWithIrSensor"}, 58 {323, nullptr, "GetLastActiveUniquePad"},
59 {324, nullptr, "GetUniquePadButtonSet"}, 59 {324, nullptr, "GetUniquePadButtonSet"},
60 {325, nullptr, "GetUniquePadColor"}, 60 {325, nullptr, "GetUniquePadColor"},
61 {326, nullptr, "GetUniquePadAppletDetailedUiType"}, 61 {326, nullptr, "GetUniquePadAppletDetailedUiType"},
@@ -444,13 +444,25 @@ void IHidSystemServer::GetUniquePadsFromNpad(HLERequestContext& ctx) {
444 rb.Push(static_cast<u32>(unique_pads.size())); 444 rb.Push(static_cast<u32>(unique_pads.size()));
445} 445}
446 446
447void IHidSystemServer::GetIrSensorState(HLERequestContext& ctx) { 447void IHidSystemServer::SetNpadSystemExtStateEnabled(HLERequestContext& ctx) {
448 IPC::RequestParser rp{ctx}; 448 IPC::RequestParser rp{ctx};
449 struct Parameters {
450 bool is_enabled;
451 INSERT_PADDING_BYTES_NOINIT(7);
452 u64 applet_resource_user_id;
453 };
454 static_assert(sizeof(Parameters) == 0x10, "Parameters has incorrect size.");
449 455
450 LOG_WARNING(Service_HID, "(STUBBED) called"); 456 const auto parameters{rp.PopRaw<Parameters>()};
457
458 LOG_INFO(Service_HID, "called, is_enabled={}, applet_resource_user_id={}",
459 parameters.is_enabled, parameters.applet_resource_user_id);
460
461 const auto result = GetResourceManager()->GetNpad()->SetNpadSystemExtStateEnabled(
462 parameters.applet_resource_user_id, parameters.is_enabled);
451 463
452 IPC::ResponseBuilder rb{ctx, 2}; 464 IPC::ResponseBuilder rb{ctx, 2};
453 rb.Push(ResultSuccess); 465 rb.Push(result);
454} 466}
455void IHidSystemServer::RegisterAppletResourceUserId(HLERequestContext& ctx) { 467void IHidSystemServer::RegisterAppletResourceUserId(HLERequestContext& ctx) {
456 IPC::RequestParser rp{ctx}; 468 IPC::RequestParser rp{ctx};
diff --git a/src/core/hle/service/hid/hid_system_server.h b/src/core/hle/service/hid/hid_system_server.h
index 53091cf53..0c2634e3f 100644
--- a/src/core/hle/service/hid/hid_system_server.h
+++ b/src/core/hle/service/hid/hid_system_server.h
@@ -38,7 +38,7 @@ private:
38 void HasBattery(HLERequestContext& ctx); 38 void HasBattery(HLERequestContext& ctx);
39 void HasLeftRightBattery(HLERequestContext& ctx); 39 void HasLeftRightBattery(HLERequestContext& ctx);
40 void GetUniquePadsFromNpad(HLERequestContext& ctx); 40 void GetUniquePadsFromNpad(HLERequestContext& ctx);
41 void GetIrSensorState(HLERequestContext& ctx); 41 void SetNpadSystemExtStateEnabled(HLERequestContext& ctx);
42 void RegisterAppletResourceUserId(HLERequestContext& ctx); 42 void RegisterAppletResourceUserId(HLERequestContext& ctx);
43 void UnregisterAppletResourceUserId(HLERequestContext& ctx); 43 void UnregisterAppletResourceUserId(HLERequestContext& ctx);
44 void EnableAppletToGetInput(HLERequestContext& ctx); 44 void EnableAppletToGetInput(HLERequestContext& ctx);
diff --git a/src/hid_core/resources/npad/npad.cpp b/src/hid_core/resources/npad/npad.cpp
index ea035d759..6be6edb7e 100644
--- a/src/hid_core/resources/npad/npad.cpp
+++ b/src/hid_core/resources/npad/npad.cpp
@@ -1356,4 +1356,16 @@ std::size_t NPad::GetNpadCaptureButtonAssignment(std::span<Core::HID::NpadButton
1356 return npad_resource.GetNpadCaptureButtonAssignment(out_list, aruid); 1356 return npad_resource.GetNpadCaptureButtonAssignment(out_list, aruid);
1357} 1357}
1358 1358
1359Result NPad::SetNpadSystemExtStateEnabled(u64 aruid, bool is_enabled) {
1360 std::scoped_lock lock{mutex};
1361 const auto result = npad_resource.SetNpadSystemExtStateEnabled(aruid, is_enabled);
1362
1363 if (result.IsSuccess()) {
1364 std::scoped_lock shared_lock{*applet_resource_holder.shared_mutex};
1365 // TODO: abstracted_pad->EnableAppletToGetInput(aruid);
1366 }
1367
1368 return result;
1369}
1370
1359} // namespace Service::HID 1371} // namespace Service::HID
diff --git a/src/hid_core/resources/npad/npad.h b/src/hid_core/resources/npad/npad.h
index e602ddaea..73e2780c4 100644
--- a/src/hid_core/resources/npad/npad.h
+++ b/src/hid_core/resources/npad/npad.h
@@ -155,6 +155,8 @@ public:
155 std::size_t GetNpadCaptureButtonAssignment(std::span<Core::HID::NpadButton> out_list, 155 std::size_t GetNpadCaptureButtonAssignment(std::span<Core::HID::NpadButton> out_list,
156 u64 aruid) const; 156 u64 aruid) const;
157 157
158 Result SetNpadSystemExtStateEnabled(u64 aruid, bool is_enabled);
159
158private: 160private:
159 struct VibrationData { 161 struct VibrationData {
160 bool device_mounted{}; 162 bool device_mounted{};