service: hid: Implement CaptureButtonAssignment
This commit is contained in:
		| @@ -1466,23 +1466,27 @@ void IHidServer::SetNpadCaptureButtonAssignment(HLERequestContext& ctx) { | ||||
|  | ||||
|     const auto parameters{rp.PopRaw<Parameters>()}; | ||||
|  | ||||
|     LOG_WARNING(Service_HID, | ||||
|                 "(STUBBED) called, npad_styleset={}, applet_resource_user_id={}, button={}", | ||||
|     LOG_INFO(Service_HID, "called, npad_styleset={}, applet_resource_user_id={}, button={}", | ||||
|              parameters.npad_styleset, parameters.applet_resource_user_id, parameters.button); | ||||
|  | ||||
|     const auto result = GetResourceManager()->GetNpad()->SetNpadCaptureButtonAssignment( | ||||
|         parameters.applet_resource_user_id, parameters.npad_styleset, parameters.button); | ||||
|  | ||||
|     IPC::ResponseBuilder rb{ctx, 2}; | ||||
|     rb.Push(ResultSuccess); | ||||
|     rb.Push(result); | ||||
| } | ||||
|  | ||||
| void IHidServer::ClearNpadCaptureButtonAssignment(HLERequestContext& ctx) { | ||||
|     IPC::RequestParser rp{ctx}; | ||||
|     const auto applet_resource_user_id{rp.Pop<u64>()}; | ||||
|  | ||||
|     LOG_WARNING(Service_HID, "(STUBBED) called, applet_resource_user_id={}", | ||||
|                 applet_resource_user_id); | ||||
|     LOG_INFO(Service_HID, "called, applet_resource_user_id={}", applet_resource_user_id); | ||||
|  | ||||
|     const auto result = | ||||
|         GetResourceManager()->GetNpad()->ClearNpadCaptureButtonAssignment(applet_resource_user_id); | ||||
|  | ||||
|     IPC::ResponseBuilder rb{ctx, 2}; | ||||
|     rb.Push(ResultSuccess); | ||||
|     rb.Push(result); | ||||
| } | ||||
|  | ||||
| void IHidServer::GetVibrationDeviceInfo(HLERequestContext& ctx) { | ||||
|   | ||||
| @@ -46,7 +46,7 @@ IHidSystemServer::IHidSystemServer(Core::System& system_, std::shared_ptr<Resour | ||||
|         {310, &IHidSystemServer::GetMaskedSupportedNpadStyleSet, "GetMaskedSupportedNpadStyleSet"}, | ||||
|         {311, nullptr, "SetNpadPlayerLedBlinkingDevice"}, | ||||
|         {312, &IHidSystemServer::SetSupportedNpadStyleSetAll, "SetSupportedNpadStyleSetAll"}, | ||||
|         {313, nullptr, "GetNpadCaptureButtonAssignment"}, | ||||
|         {313, &IHidSystemServer::GetNpadCaptureButtonAssignment, "GetNpadCaptureButtonAssignment"}, | ||||
|         {314, nullptr, "GetAppletFooterUiType"}, | ||||
|         {315, &IHidSystemServer::GetAppletDetailedUiType, "GetAppletDetailedUiType"}, | ||||
|         {316, &IHidSystemServer::GetNpadInterfaceType, "GetNpadInterfaceType"}, | ||||
| @@ -331,6 +331,27 @@ void IHidSystemServer::SetSupportedNpadStyleSetAll(HLERequestContext& ctx) { | ||||
|     rb.Push(result); | ||||
| } | ||||
|  | ||||
| void IHidSystemServer::GetNpadCaptureButtonAssignment(HLERequestContext& ctx) { | ||||
|     IPC::RequestParser rp{ctx}; | ||||
|     const auto applet_resource_user_id{rp.Pop<u64>()}; | ||||
|     const auto capture_button_list_size{ctx.GetWriteBufferNumElements<Core::HID::NpadButton>()}; | ||||
|  | ||||
|     LOG_DEBUG(Service_HID, "called, applet_resource_user_id={}", applet_resource_user_id); | ||||
|  | ||||
|     std::vector<Core::HID::NpadButton> capture_button_list(capture_button_list_size); | ||||
|     const auto& npad = GetResourceManager()->GetNpad(); | ||||
|     const u64 list_size = | ||||
|         npad->GetNpadCaptureButtonAssignment(capture_button_list, applet_resource_user_id); | ||||
|  | ||||
|     if (list_size != 0) { | ||||
|         ctx.WriteBuffer(capture_button_list); | ||||
|     } | ||||
|  | ||||
|     IPC::ResponseBuilder rb{ctx, 4}; | ||||
|     rb.Push(ResultSuccess); | ||||
|     rb.Push(list_size); | ||||
| } | ||||
|  | ||||
| void IHidSystemServer::GetAppletDetailedUiType(HLERequestContext& ctx) { | ||||
|     IPC::RequestParser rp{ctx}; | ||||
|     const auto npad_id_type{rp.PopEnum<Core::HID::NpadIdType>()}; | ||||
|   | ||||
| @@ -31,6 +31,7 @@ private: | ||||
|     void GetNpadFullKeyGripColor(HLERequestContext& ctx); | ||||
|     void GetMaskedSupportedNpadStyleSet(HLERequestContext& ctx); | ||||
|     void SetSupportedNpadStyleSetAll(HLERequestContext& ctx); | ||||
|     void GetNpadCaptureButtonAssignment(HLERequestContext& ctx); | ||||
|     void GetAppletDetailedUiType(HLERequestContext& ctx); | ||||
|     void GetNpadInterfaceType(HLERequestContext& ctx); | ||||
|     void GetNpadLeftRightInterfaceType(HLERequestContext& ctx); | ||||
|   | ||||
| @@ -1339,4 +1339,21 @@ AppletDetailedUiType NPad::GetAppletDetailedUiType(Core::HID::NpadIdType npad_id | ||||
|     }; | ||||
| } | ||||
|  | ||||
| Result NPad::SetNpadCaptureButtonAssignment(u64 aruid, Core::HID::NpadStyleSet npad_style_set, | ||||
|                                             Core::HID::NpadButton button_assignment) { | ||||
|     std::scoped_lock lock{mutex}; | ||||
|     return npad_resource.SetNpadCaptureButtonAssignment(aruid, npad_style_set, button_assignment); | ||||
| } | ||||
|  | ||||
| Result NPad::ClearNpadCaptureButtonAssignment(u64 aruid) { | ||||
|     std::scoped_lock lock{mutex}; | ||||
|     return npad_resource.ClearNpadCaptureButtonAssignment(aruid); | ||||
| } | ||||
|  | ||||
| std::size_t NPad::GetNpadCaptureButtonAssignment(std::span<Core::HID::NpadButton> out_list, | ||||
|                                                  u64 aruid) const { | ||||
|     std::scoped_lock lock{mutex}; | ||||
|     return npad_resource.GetNpadCaptureButtonAssignment(out_list, aruid); | ||||
| } | ||||
|  | ||||
| } // namespace Service::HID | ||||
|   | ||||
| @@ -149,6 +149,12 @@ public: | ||||
|  | ||||
|     AppletDetailedUiType GetAppletDetailedUiType(Core::HID::NpadIdType npad_id); | ||||
|  | ||||
|     Result SetNpadCaptureButtonAssignment(u64 aruid, Core::HID::NpadStyleSet npad_style_set, | ||||
|                                           Core::HID::NpadButton button_assignment); | ||||
|     Result ClearNpadCaptureButtonAssignment(u64 aruid); | ||||
|     std::size_t GetNpadCaptureButtonAssignment(std::span<Core::HID::NpadButton> out_list, | ||||
|                                                u64 aruid) const; | ||||
|  | ||||
| private: | ||||
|     struct VibrationData { | ||||
|         bool device_mounted{}; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user