summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar german772024-01-06 21:17:57 -0600
committerGravatar german772024-01-06 21:18:44 -0600
commita36f4d0a9f2c0fee837856e4db3e4ca10bfed25b (patch)
treee13147afa84aaba79e36bbee59b0aa86f81ccf38 /src
parentMerge pull request #12596 from german77/hid_qlaunch (diff)
downloadyuzu-a36f4d0a9f2c0fee837856e4db3e4ca10bfed25b.tar.gz
yuzu-a36f4d0a9f2c0fee837856e4db3e4ca10bfed25b.tar.xz
yuzu-a36f4d0a9f2c0fee837856e4db3e4ca10bfed25b.zip
service: hid: Implement CaptureButtonAssignment
Diffstat (limited to 'src')
-rw-r--r--src/core/hle/service/hid/hid_server.cpp18
-rw-r--r--src/core/hle/service/hid/hid_system_server.cpp23
-rw-r--r--src/core/hle/service/hid/hid_system_server.h1
-rw-r--r--src/hid_core/resources/npad/npad.cpp17
-rw-r--r--src/hid_core/resources/npad/npad.h6
5 files changed, 57 insertions, 8 deletions
diff --git a/src/core/hle/service/hid/hid_server.cpp b/src/core/hle/service/hid/hid_server.cpp
index 2ff00d30d..75bf3e682 100644
--- a/src/core/hle/service/hid/hid_server.cpp
+++ b/src/core/hle/service/hid/hid_server.cpp
@@ -1466,23 +1466,27 @@ void IHidServer::SetNpadCaptureButtonAssignment(HLERequestContext& ctx) {
1466 1466
1467 const auto parameters{rp.PopRaw<Parameters>()}; 1467 const auto parameters{rp.PopRaw<Parameters>()};
1468 1468
1469 LOG_WARNING(Service_HID, 1469 LOG_INFO(Service_HID, "called, npad_styleset={}, applet_resource_user_id={}, button={}",
1470 "(STUBBED) called, npad_styleset={}, applet_resource_user_id={}, button={}", 1470 parameters.npad_styleset, parameters.applet_resource_user_id, parameters.button);
1471 parameters.npad_styleset, parameters.applet_resource_user_id, parameters.button); 1471
1472 const auto result = GetResourceManager()->GetNpad()->SetNpadCaptureButtonAssignment(
1473 parameters.applet_resource_user_id, parameters.npad_styleset, parameters.button);
1472 1474
1473 IPC::ResponseBuilder rb{ctx, 2}; 1475 IPC::ResponseBuilder rb{ctx, 2};
1474 rb.Push(ResultSuccess); 1476 rb.Push(result);
1475} 1477}
1476 1478
1477void IHidServer::ClearNpadCaptureButtonAssignment(HLERequestContext& ctx) { 1479void IHidServer::ClearNpadCaptureButtonAssignment(HLERequestContext& ctx) {
1478 IPC::RequestParser rp{ctx}; 1480 IPC::RequestParser rp{ctx};
1479 const auto applet_resource_user_id{rp.Pop<u64>()}; 1481 const auto applet_resource_user_id{rp.Pop<u64>()};
1480 1482
1481 LOG_WARNING(Service_HID, "(STUBBED) called, applet_resource_user_id={}", 1483 LOG_INFO(Service_HID, "called, applet_resource_user_id={}", applet_resource_user_id);
1482 applet_resource_user_id); 1484
1485 const auto result =
1486 GetResourceManager()->GetNpad()->ClearNpadCaptureButtonAssignment(applet_resource_user_id);
1483 1487
1484 IPC::ResponseBuilder rb{ctx, 2}; 1488 IPC::ResponseBuilder rb{ctx, 2};
1485 rb.Push(ResultSuccess); 1489 rb.Push(result);
1486} 1490}
1487 1491
1488void IHidServer::GetVibrationDeviceInfo(HLERequestContext& ctx) { 1492void IHidServer::GetVibrationDeviceInfo(HLERequestContext& ctx) {
diff --git a/src/core/hle/service/hid/hid_system_server.cpp b/src/core/hle/service/hid/hid_system_server.cpp
index 2a65615e8..ac0d8bd5d 100644
--- a/src/core/hle/service/hid/hid_system_server.cpp
+++ b/src/core/hle/service/hid/hid_system_server.cpp
@@ -46,7 +46,7 @@ IHidSystemServer::IHidSystemServer(Core::System& system_, std::shared_ptr<Resour
46 {310, &IHidSystemServer::GetMaskedSupportedNpadStyleSet, "GetMaskedSupportedNpadStyleSet"}, 46 {310, &IHidSystemServer::GetMaskedSupportedNpadStyleSet, "GetMaskedSupportedNpadStyleSet"},
47 {311, nullptr, "SetNpadPlayerLedBlinkingDevice"}, 47 {311, nullptr, "SetNpadPlayerLedBlinkingDevice"},
48 {312, &IHidSystemServer::SetSupportedNpadStyleSetAll, "SetSupportedNpadStyleSetAll"}, 48 {312, &IHidSystemServer::SetSupportedNpadStyleSetAll, "SetSupportedNpadStyleSetAll"},
49 {313, nullptr, "GetNpadCaptureButtonAssignment"}, 49 {313, &IHidSystemServer::GetNpadCaptureButtonAssignment, "GetNpadCaptureButtonAssignment"},
50 {314, nullptr, "GetAppletFooterUiType"}, 50 {314, nullptr, "GetAppletFooterUiType"},
51 {315, &IHidSystemServer::GetAppletDetailedUiType, "GetAppletDetailedUiType"}, 51 {315, &IHidSystemServer::GetAppletDetailedUiType, "GetAppletDetailedUiType"},
52 {316, &IHidSystemServer::GetNpadInterfaceType, "GetNpadInterfaceType"}, 52 {316, &IHidSystemServer::GetNpadInterfaceType, "GetNpadInterfaceType"},
@@ -331,6 +331,27 @@ void IHidSystemServer::SetSupportedNpadStyleSetAll(HLERequestContext& ctx) {
331 rb.Push(result); 331 rb.Push(result);
332} 332}
333 333
334void IHidSystemServer::GetNpadCaptureButtonAssignment(HLERequestContext& ctx) {
335 IPC::RequestParser rp{ctx};
336 const auto applet_resource_user_id{rp.Pop<u64>()};
337 const auto capture_button_list_size{ctx.GetWriteBufferNumElements<Core::HID::NpadButton>()};
338
339 LOG_DEBUG(Service_HID, "called, applet_resource_user_id={}", applet_resource_user_id);
340
341 std::vector<Core::HID::NpadButton> capture_button_list(capture_button_list_size);
342 const auto& npad = GetResourceManager()->GetNpad();
343 const u64 list_size =
344 npad->GetNpadCaptureButtonAssignment(capture_button_list, applet_resource_user_id);
345
346 if (list_size != 0) {
347 ctx.WriteBuffer(capture_button_list);
348 }
349
350 IPC::ResponseBuilder rb{ctx, 4};
351 rb.Push(ResultSuccess);
352 rb.Push(list_size);
353}
354
334void IHidSystemServer::GetAppletDetailedUiType(HLERequestContext& ctx) { 355void IHidSystemServer::GetAppletDetailedUiType(HLERequestContext& ctx) {
335 IPC::RequestParser rp{ctx}; 356 IPC::RequestParser rp{ctx};
336 const auto npad_id_type{rp.PopEnum<Core::HID::NpadIdType>()}; 357 const auto npad_id_type{rp.PopEnum<Core::HID::NpadIdType>()};
diff --git a/src/core/hle/service/hid/hid_system_server.h b/src/core/hle/service/hid/hid_system_server.h
index f467e2aa8..53091cf53 100644
--- a/src/core/hle/service/hid/hid_system_server.h
+++ b/src/core/hle/service/hid/hid_system_server.h
@@ -31,6 +31,7 @@ private:
31 void GetNpadFullKeyGripColor(HLERequestContext& ctx); 31 void GetNpadFullKeyGripColor(HLERequestContext& ctx);
32 void GetMaskedSupportedNpadStyleSet(HLERequestContext& ctx); 32 void GetMaskedSupportedNpadStyleSet(HLERequestContext& ctx);
33 void SetSupportedNpadStyleSetAll(HLERequestContext& ctx); 33 void SetSupportedNpadStyleSetAll(HLERequestContext& ctx);
34 void GetNpadCaptureButtonAssignment(HLERequestContext& ctx);
34 void GetAppletDetailedUiType(HLERequestContext& ctx); 35 void GetAppletDetailedUiType(HLERequestContext& ctx);
35 void GetNpadInterfaceType(HLERequestContext& ctx); 36 void GetNpadInterfaceType(HLERequestContext& ctx);
36 void GetNpadLeftRightInterfaceType(HLERequestContext& ctx); 37 void GetNpadLeftRightInterfaceType(HLERequestContext& ctx);
diff --git a/src/hid_core/resources/npad/npad.cpp b/src/hid_core/resources/npad/npad.cpp
index e6c035628..ea035d759 100644
--- a/src/hid_core/resources/npad/npad.cpp
+++ b/src/hid_core/resources/npad/npad.cpp
@@ -1339,4 +1339,21 @@ AppletDetailedUiType NPad::GetAppletDetailedUiType(Core::HID::NpadIdType npad_id
1339 }; 1339 };
1340} 1340}
1341 1341
1342Result NPad::SetNpadCaptureButtonAssignment(u64 aruid, Core::HID::NpadStyleSet npad_style_set,
1343 Core::HID::NpadButton button_assignment) {
1344 std::scoped_lock lock{mutex};
1345 return npad_resource.SetNpadCaptureButtonAssignment(aruid, npad_style_set, button_assignment);
1346}
1347
1348Result NPad::ClearNpadCaptureButtonAssignment(u64 aruid) {
1349 std::scoped_lock lock{mutex};
1350 return npad_resource.ClearNpadCaptureButtonAssignment(aruid);
1351}
1352
1353std::size_t NPad::GetNpadCaptureButtonAssignment(std::span<Core::HID::NpadButton> out_list,
1354 u64 aruid) const {
1355 std::scoped_lock lock{mutex};
1356 return npad_resource.GetNpadCaptureButtonAssignment(out_list, aruid);
1357}
1358
1342} // namespace Service::HID 1359} // namespace Service::HID
diff --git a/src/hid_core/resources/npad/npad.h b/src/hid_core/resources/npad/npad.h
index 58f8c7acf..e602ddaea 100644
--- a/src/hid_core/resources/npad/npad.h
+++ b/src/hid_core/resources/npad/npad.h
@@ -149,6 +149,12 @@ public:
149 149
150 AppletDetailedUiType GetAppletDetailedUiType(Core::HID::NpadIdType npad_id); 150 AppletDetailedUiType GetAppletDetailedUiType(Core::HID::NpadIdType npad_id);
151 151
152 Result SetNpadCaptureButtonAssignment(u64 aruid, Core::HID::NpadStyleSet npad_style_set,
153 Core::HID::NpadButton button_assignment);
154 Result ClearNpadCaptureButtonAssignment(u64 aruid);
155 std::size_t GetNpadCaptureButtonAssignment(std::span<Core::HID::NpadButton> out_list,
156 u64 aruid) const;
157
152private: 158private:
153 struct VibrationData { 159 struct VibrationData {
154 bool device_mounted{}; 160 bool device_mounted{};