diff options
| author | 2024-01-06 21:17:57 -0600 | |
|---|---|---|
| committer | 2024-01-06 21:18:44 -0600 | |
| commit | a36f4d0a9f2c0fee837856e4db3e4ca10bfed25b (patch) | |
| tree | e13147afa84aaba79e36bbee59b0aa86f81ccf38 /src | |
| parent | Merge pull request #12596 from german77/hid_qlaunch (diff) | |
| download | yuzu-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.cpp | 18 | ||||
| -rw-r--r-- | src/core/hle/service/hid/hid_system_server.cpp | 23 | ||||
| -rw-r--r-- | src/core/hle/service/hid/hid_system_server.h | 1 | ||||
| -rw-r--r-- | src/hid_core/resources/npad/npad.cpp | 17 | ||||
| -rw-r--r-- | src/hid_core/resources/npad/npad.h | 6 |
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 | ||
| 1477 | void IHidServer::ClearNpadCaptureButtonAssignment(HLERequestContext& ctx) { | 1479 | void 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 | ||
| 1488 | void IHidServer::GetVibrationDeviceInfo(HLERequestContext& ctx) { | 1492 | void 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 | ||
| 334 | void 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 | |||
| 334 | void IHidSystemServer::GetAppletDetailedUiType(HLERequestContext& ctx) { | 355 | void 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 | ||
| 1342 | Result 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 | |||
| 1348 | Result NPad::ClearNpadCaptureButtonAssignment(u64 aruid) { | ||
| 1349 | std::scoped_lock lock{mutex}; | ||
| 1350 | return npad_resource.ClearNpadCaptureButtonAssignment(aruid); | ||
| 1351 | } | ||
| 1352 | |||
| 1353 | std::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 | |||
| 152 | private: | 158 | private: |
| 153 | struct VibrationData { | 159 | struct VibrationData { |
| 154 | bool device_mounted{}; | 160 | bool device_mounted{}; |