service: hid: Implement SetNpadSystemExtStateEnabled
This commit is contained in:
		@@ -1444,8 +1444,8 @@ void IHidServer::SetNpadAnalogStickUseCenterClamp(HLERequestContext& ctx) {
 | 
			
		||||
 | 
			
		||||
    const auto parameters{rp.PopRaw<Parameters>()};
 | 
			
		||||
 | 
			
		||||
    LOG_WARNING(Service_HID, "(STUBBED) called, use_center_clamp={}, applet_resource_user_id={}",
 | 
			
		||||
                parameters.use_center_clamp, parameters.applet_resource_user_id);
 | 
			
		||||
    LOG_INFO(Service_HID, "called, use_center_clamp={}, applet_resource_user_id={}",
 | 
			
		||||
             parameters.use_center_clamp, parameters.applet_resource_user_id);
 | 
			
		||||
 | 
			
		||||
    GetResourceManager()->GetNpad()->SetNpadAnalogStickUseCenterClamp(
 | 
			
		||||
        parameters.applet_resource_user_id, parameters.use_center_clamp);
 | 
			
		||||
 
 | 
			
		||||
@@ -54,8 +54,8 @@ IHidSystemServer::IHidSystemServer(Core::System& system_, std::shared_ptr<Resour
 | 
			
		||||
        {318, &IHidSystemServer::HasBattery, "HasBattery"},
 | 
			
		||||
        {319, &IHidSystemServer::HasLeftRightBattery, "HasLeftRightBattery"},
 | 
			
		||||
        {321, &IHidSystemServer::GetUniquePadsFromNpad, "GetUniquePadsFromNpad"},
 | 
			
		||||
        {322, &IHidSystemServer::GetIrSensorState, "GetIrSensorState"},
 | 
			
		||||
        {323, nullptr, "GetXcdHandleForNpadWithIrSensor"},
 | 
			
		||||
        {322, &IHidSystemServer::SetNpadSystemExtStateEnabled, "SetNpadSystemExtStateEnabled"},
 | 
			
		||||
        {323, nullptr, "GetLastActiveUniquePad"},
 | 
			
		||||
        {324, nullptr, "GetUniquePadButtonSet"},
 | 
			
		||||
        {325, nullptr, "GetUniquePadColor"},
 | 
			
		||||
        {326, nullptr, "GetUniquePadAppletDetailedUiType"},
 | 
			
		||||
@@ -444,13 +444,25 @@ void IHidSystemServer::GetUniquePadsFromNpad(HLERequestContext& ctx) {
 | 
			
		||||
    rb.Push(static_cast<u32>(unique_pads.size()));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void IHidSystemServer::GetIrSensorState(HLERequestContext& ctx) {
 | 
			
		||||
void IHidSystemServer::SetNpadSystemExtStateEnabled(HLERequestContext& ctx) {
 | 
			
		||||
    IPC::RequestParser rp{ctx};
 | 
			
		||||
    struct Parameters {
 | 
			
		||||
        bool is_enabled;
 | 
			
		||||
        INSERT_PADDING_BYTES_NOINIT(7);
 | 
			
		||||
        u64 applet_resource_user_id;
 | 
			
		||||
    };
 | 
			
		||||
    static_assert(sizeof(Parameters) == 0x10, "Parameters has incorrect size.");
 | 
			
		||||
 | 
			
		||||
    LOG_WARNING(Service_HID, "(STUBBED) called");
 | 
			
		||||
    const auto parameters{rp.PopRaw<Parameters>()};
 | 
			
		||||
 | 
			
		||||
    LOG_INFO(Service_HID, "called, is_enabled={}, applet_resource_user_id={}",
 | 
			
		||||
             parameters.is_enabled, parameters.applet_resource_user_id);
 | 
			
		||||
 | 
			
		||||
    const auto result = GetResourceManager()->GetNpad()->SetNpadSystemExtStateEnabled(
 | 
			
		||||
        parameters.applet_resource_user_id, parameters.is_enabled);
 | 
			
		||||
 | 
			
		||||
    IPC::ResponseBuilder rb{ctx, 2};
 | 
			
		||||
    rb.Push(ResultSuccess);
 | 
			
		||||
    rb.Push(result);
 | 
			
		||||
}
 | 
			
		||||
void IHidSystemServer::RegisterAppletResourceUserId(HLERequestContext& ctx) {
 | 
			
		||||
    IPC::RequestParser rp{ctx};
 | 
			
		||||
 
 | 
			
		||||
@@ -38,7 +38,7 @@ private:
 | 
			
		||||
    void HasBattery(HLERequestContext& ctx);
 | 
			
		||||
    void HasLeftRightBattery(HLERequestContext& ctx);
 | 
			
		||||
    void GetUniquePadsFromNpad(HLERequestContext& ctx);
 | 
			
		||||
    void GetIrSensorState(HLERequestContext& ctx);
 | 
			
		||||
    void SetNpadSystemExtStateEnabled(HLERequestContext& ctx);
 | 
			
		||||
    void RegisterAppletResourceUserId(HLERequestContext& ctx);
 | 
			
		||||
    void UnregisterAppletResourceUserId(HLERequestContext& ctx);
 | 
			
		||||
    void EnableAppletToGetInput(HLERequestContext& ctx);
 | 
			
		||||
 
 | 
			
		||||
@@ -1356,4 +1356,16 @@ std::size_t NPad::GetNpadCaptureButtonAssignment(std::span<Core::HID::NpadButton
 | 
			
		||||
    return npad_resource.GetNpadCaptureButtonAssignment(out_list, aruid);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Result NPad::SetNpadSystemExtStateEnabled(u64 aruid, bool is_enabled) {
 | 
			
		||||
    std::scoped_lock lock{mutex};
 | 
			
		||||
    const auto result = npad_resource.SetNpadSystemExtStateEnabled(aruid, is_enabled);
 | 
			
		||||
 | 
			
		||||
    if (result.IsSuccess()) {
 | 
			
		||||
        std::scoped_lock shared_lock{*applet_resource_holder.shared_mutex};
 | 
			
		||||
        // TODO: abstracted_pad->EnableAppletToGetInput(aruid);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return result;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
} // namespace Service::HID
 | 
			
		||||
 
 | 
			
		||||
@@ -155,6 +155,8 @@ public:
 | 
			
		||||
    std::size_t GetNpadCaptureButtonAssignment(std::span<Core::HID::NpadButton> out_list,
 | 
			
		||||
                                               u64 aruid) const;
 | 
			
		||||
 | 
			
		||||
    Result SetNpadSystemExtStateEnabled(u64 aruid, bool is_enabled);
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
    struct VibrationData {
 | 
			
		||||
        bool device_mounted{};
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user