core: hid: Add fallback for dualjoycon and pro controllers
This commit is contained in:
		@@ -99,8 +99,10 @@ void EmulatedController::ReloadFromSettings() {
 | 
			
		||||
    // Other or debug controller should always be a pro controller
 | 
			
		||||
    if (npad_id_type != NpadIdType::Other) {
 | 
			
		||||
        SetNpadStyleIndex(MapSettingsTypeToNPad(player.controller_type));
 | 
			
		||||
        original_npad_type = npad_type;
 | 
			
		||||
    } else {
 | 
			
		||||
        SetNpadStyleIndex(NpadStyleIndex::ProController);
 | 
			
		||||
        original_npad_type = npad_type;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (player.connected) {
 | 
			
		||||
@@ -339,6 +341,7 @@ void EmulatedController::DisableConfiguration() {
 | 
			
		||||
            Disconnect();
 | 
			
		||||
        }
 | 
			
		||||
        SetNpadStyleIndex(tmp_npad_type);
 | 
			
		||||
        original_npad_type = tmp_npad_type;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Apply temporary connected status to the real controller
 | 
			
		||||
@@ -950,13 +953,27 @@ void EmulatedController::SetSupportedNpadStyleTag(NpadStyleTag supported_styles)
 | 
			
		||||
    if (!is_connected) {
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Attempt to reconnect with the original type
 | 
			
		||||
    if (npad_type != original_npad_type) {
 | 
			
		||||
        Disconnect();
 | 
			
		||||
        const auto current_npad_type = npad_type;
 | 
			
		||||
        SetNpadStyleIndex(original_npad_type);
 | 
			
		||||
        if (IsControllerSupported()) {
 | 
			
		||||
            Connect();
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        SetNpadStyleIndex(current_npad_type);
 | 
			
		||||
        Connect();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (IsControllerSupported()) {
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    Disconnect();
 | 
			
		||||
 | 
			
		||||
    // Fallback fullkey controllers to Pro controllers
 | 
			
		||||
    // Fallback Fullkey controllers to Pro controllers
 | 
			
		||||
    if (IsControllerFullkey() && supported_style_tag.fullkey) {
 | 
			
		||||
        LOG_WARNING(Service_HID, "Reconnecting controller type {} as Pro controller", npad_type);
 | 
			
		||||
        SetNpadStyleIndex(NpadStyleIndex::ProController);
 | 
			
		||||
@@ -964,6 +981,22 @@ void EmulatedController::SetSupportedNpadStyleTag(NpadStyleTag supported_styles)
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Fallback Dual joycon controllers to Pro controllers
 | 
			
		||||
    if (npad_type == NpadStyleIndex::JoyconDual && supported_style_tag.fullkey) {
 | 
			
		||||
        LOG_WARNING(Service_HID, "Reconnecting controller type {} as Pro controller", npad_type);
 | 
			
		||||
        SetNpadStyleIndex(NpadStyleIndex::ProController);
 | 
			
		||||
        Connect();
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Fallback Pro controllers to Dual joycon
 | 
			
		||||
    if (npad_type == NpadStyleIndex::ProController && supported_style_tag.joycon_dual) {
 | 
			
		||||
        LOG_WARNING(Service_HID, "Reconnecting controller type {} as Dual Joycons", npad_type);
 | 
			
		||||
        SetNpadStyleIndex(NpadStyleIndex::JoyconDual);
 | 
			
		||||
        Connect();
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    LOG_ERROR(Service_HID, "Controller type {} is not supported. Disconnecting controller",
 | 
			
		||||
              npad_type);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -401,6 +401,7 @@ private:
 | 
			
		||||
 | 
			
		||||
    const NpadIdType npad_id_type;
 | 
			
		||||
    NpadStyleIndex npad_type{NpadStyleIndex::None};
 | 
			
		||||
    NpadStyleIndex original_npad_type{NpadStyleIndex::None};
 | 
			
		||||
    NpadStyleTag supported_style_tag{NpadStyleSet::All};
 | 
			
		||||
    bool is_connected{false};
 | 
			
		||||
    bool is_configuring{false};
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user