input_common: Fix issue where ring and irs are enabled at the same time
This commit is contained in:
		@@ -74,8 +74,6 @@ void IRS::DeactivateIrsensor(Kernel::HLERequestContext& ctx) {
 | 
			
		||||
    LOG_WARNING(Service_IRS, "(STUBBED) called, applet_resource_user_id={}",
 | 
			
		||||
                applet_resource_user_id);
 | 
			
		||||
 | 
			
		||||
    npad_device->SetPollingMode(Common::Input::PollingMode::Active);
 | 
			
		||||
 | 
			
		||||
    IPC::ResponseBuilder rb{ctx, 2};
 | 
			
		||||
    rb.Push(ResultSuccess);
 | 
			
		||||
}
 | 
			
		||||
@@ -514,7 +512,7 @@ void IRS::StopImageProcessorAsync(Kernel::HLERequestContext& ctx) {
 | 
			
		||||
    auto result = IsIrCameraHandleValid(parameters.camera_handle);
 | 
			
		||||
    if (result.IsSuccess()) {
 | 
			
		||||
        // TODO: Stop image processor async
 | 
			
		||||
        npad_device->SetPollingMode(Common::Input::PollingMode::IR);
 | 
			
		||||
        npad_device->SetPollingMode(Common::Input::PollingMode::Active);
 | 
			
		||||
        result = ResultSuccess;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -262,6 +262,16 @@ DriverResult JoyconDriver::SetPollingMode() {
 | 
			
		||||
        irs_protocol->DisableIrs();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (nfc_protocol->IsEnabled()) {
 | 
			
		||||
        amiibo_detected = false;
 | 
			
		||||
        nfc_protocol->DisableNfc();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (ring_protocol->IsEnabled()) {
 | 
			
		||||
        ring_connected = false;
 | 
			
		||||
        ring_protocol->DisableRingCon();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (irs_enabled && supported_features.irs) {
 | 
			
		||||
        auto result = irs_protocol->EnableIrs();
 | 
			
		||||
        if (result == DriverResult::Success) {
 | 
			
		||||
@@ -272,11 +282,6 @@ DriverResult JoyconDriver::SetPollingMode() {
 | 
			
		||||
        LOG_ERROR(Input, "Error enabling IRS");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (nfc_protocol->IsEnabled()) {
 | 
			
		||||
        amiibo_detected = false;
 | 
			
		||||
        nfc_protocol->DisableNfc();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (nfc_enabled && supported_features.nfc) {
 | 
			
		||||
        auto result = nfc_protocol->EnableNfc();
 | 
			
		||||
        if (result == DriverResult::Success) {
 | 
			
		||||
@@ -290,11 +295,6 @@ DriverResult JoyconDriver::SetPollingMode() {
 | 
			
		||||
        LOG_ERROR(Input, "Error enabling NFC");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (ring_protocol->IsEnabled()) {
 | 
			
		||||
        ring_connected = false;
 | 
			
		||||
        ring_protocol->DisableRingCon();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (hidbus_enabled && supported_features.hidbus) {
 | 
			
		||||
        auto result = ring_protocol->EnableRingCon();
 | 
			
		||||
        if (result == DriverResult::Success) {
 | 
			
		||||
@@ -418,6 +418,12 @@ DriverResult JoyconDriver::SetPasiveMode() {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
DriverResult JoyconDriver::SetActiveMode() {
 | 
			
		||||
    if (is_ring_disabled_by_irs) {
 | 
			
		||||
        is_ring_disabled_by_irs = false;
 | 
			
		||||
        SetActiveMode();
 | 
			
		||||
        return SetRingConMode();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    std::scoped_lock lock{mutex};
 | 
			
		||||
    motion_enabled = true;
 | 
			
		||||
    hidbus_enabled = false;
 | 
			
		||||
@@ -434,6 +440,10 @@ DriverResult JoyconDriver::SetIrMode() {
 | 
			
		||||
        return DriverResult::NotSupported;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (ring_connected) {
 | 
			
		||||
        is_ring_disabled_by_irs = true;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    motion_enabled = false;
 | 
			
		||||
    hidbus_enabled = false;
 | 
			
		||||
    nfc_enabled = false;
 | 
			
		||||
 
 | 
			
		||||
@@ -107,6 +107,7 @@ private:
 | 
			
		||||
    bool starlink_connected{};
 | 
			
		||||
    bool ring_connected{};
 | 
			
		||||
    bool amiibo_detected{};
 | 
			
		||||
    bool is_ring_disabled_by_irs{};
 | 
			
		||||
 | 
			
		||||
    // Harware configuration
 | 
			
		||||
    u8 leds{};
 | 
			
		||||
 
 | 
			
		||||
@@ -74,8 +74,8 @@ DriverResult JoyconCommonProtocol::SendData(std::span<const u8> buffer) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
DriverResult JoyconCommonProtocol::GetSubCommandResponse(SubCommand sc, std::vector<u8>& output) {
 | 
			
		||||
    constexpr int timeout_mili = 100;
 | 
			
		||||
    constexpr int MaxTries = 10;
 | 
			
		||||
    constexpr int timeout_mili = 66;
 | 
			
		||||
    constexpr int MaxTries = 15;
 | 
			
		||||
    int tries = 0;
 | 
			
		||||
    output.resize(MaxSubCommandResponseSize);
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user