core/hid: Fix controller type validation
This commit is contained in:
parent
292dfac25e
commit
9ee5c4ec56
|
@ -45,26 +45,26 @@ void DefaultControllerApplet::ReconfigureControllers(std::function<void()> callb
|
||||||
// Pro Controller -> Dual Joycons -> Left Joycon/Right Joycon -> Handheld
|
// Pro Controller -> Dual Joycons -> Left Joycon/Right Joycon -> Handheld
|
||||||
if (parameters.allow_pro_controller) {
|
if (parameters.allow_pro_controller) {
|
||||||
controller->SetNpadStyleIndex(Core::HID::NpadStyleIndex::ProController);
|
controller->SetNpadStyleIndex(Core::HID::NpadStyleIndex::ProController);
|
||||||
controller->Connect();
|
controller->Connect(true);
|
||||||
} else if (parameters.allow_dual_joycons) {
|
} else if (parameters.allow_dual_joycons) {
|
||||||
controller->SetNpadStyleIndex(Core::HID::NpadStyleIndex::JoyconDual);
|
controller->SetNpadStyleIndex(Core::HID::NpadStyleIndex::JoyconDual);
|
||||||
controller->Connect();
|
controller->Connect(true);
|
||||||
} else if (parameters.allow_left_joycon && parameters.allow_right_joycon) {
|
} else if (parameters.allow_left_joycon && parameters.allow_right_joycon) {
|
||||||
// Assign left joycons to even player indices and right joycons to odd player indices.
|
// Assign left joycons to even player indices and right joycons to odd player indices.
|
||||||
// We do this since Captain Toad Treasure Tracker expects a left joycon for Player 1 and
|
// We do this since Captain Toad Treasure Tracker expects a left joycon for Player 1 and
|
||||||
// a right Joycon for Player 2 in 2 Player Assist mode.
|
// a right Joycon for Player 2 in 2 Player Assist mode.
|
||||||
if (index % 2 == 0) {
|
if (index % 2 == 0) {
|
||||||
controller->SetNpadStyleIndex(Core::HID::NpadStyleIndex::JoyconLeft);
|
controller->SetNpadStyleIndex(Core::HID::NpadStyleIndex::JoyconLeft);
|
||||||
controller->Connect();
|
controller->Connect(true);
|
||||||
} else {
|
} else {
|
||||||
controller->SetNpadStyleIndex(Core::HID::NpadStyleIndex::JoyconRight);
|
controller->SetNpadStyleIndex(Core::HID::NpadStyleIndex::JoyconRight);
|
||||||
controller->Connect();
|
controller->Connect(true);
|
||||||
}
|
}
|
||||||
} else if (index == 0 && parameters.enable_single_mode && parameters.allow_handheld &&
|
} else if (index == 0 && parameters.enable_single_mode && parameters.allow_handheld &&
|
||||||
!Settings::values.use_docked_mode.GetValue()) {
|
!Settings::values.use_docked_mode.GetValue()) {
|
||||||
// We should *never* reach here under any normal circumstances.
|
// We should *never* reach here under any normal circumstances.
|
||||||
controller->SetNpadStyleIndex(Core::HID::NpadStyleIndex::Handheld);
|
controller->SetNpadStyleIndex(Core::HID::NpadStyleIndex::Handheld);
|
||||||
controller->Connect();
|
controller->Connect(true);
|
||||||
} else {
|
} else {
|
||||||
UNREACHABLE_MSG("Unable to add a new controller based on the given parameters!");
|
UNREACHABLE_MSG("Unable to add a new controller based on the given parameters!");
|
||||||
}
|
}
|
||||||
|
|
|
@ -886,8 +886,9 @@ void EmulatedController::SetSupportedNpadStyleTag(NpadStyleTag supported_styles)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool EmulatedController::IsControllerSupported() const {
|
bool EmulatedController::IsControllerSupported(bool use_temporary_value) const {
|
||||||
switch (npad_type) {
|
const auto type = is_configuring && use_temporary_value ? tmp_npad_type : npad_type;
|
||||||
|
switch (type) {
|
||||||
case NpadStyleIndex::ProController:
|
case NpadStyleIndex::ProController:
|
||||||
return supported_style_tag.fullkey;
|
return supported_style_tag.fullkey;
|
||||||
case NpadStyleIndex::Handheld:
|
case NpadStyleIndex::Handheld:
|
||||||
|
@ -915,9 +916,10 @@ bool EmulatedController::IsControllerSupported() const {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void EmulatedController::Connect() {
|
void EmulatedController::Connect(bool use_temporary_value) {
|
||||||
if (!IsControllerSupported()) {
|
if (!IsControllerSupported(use_temporary_value)) {
|
||||||
LOG_ERROR(Service_HID, "Controller type {} is not supported", npad_type);
|
const auto type = is_configuring && use_temporary_value ? tmp_npad_type : npad_type;
|
||||||
|
LOG_ERROR(Service_HID, "Controller type {} is not supported", type);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
|
|
|
@ -167,8 +167,11 @@ public:
|
||||||
*/
|
*/
|
||||||
void SetSupportedNpadStyleTag(NpadStyleTag supported_styles);
|
void SetSupportedNpadStyleTag(NpadStyleTag supported_styles);
|
||||||
|
|
||||||
/// Sets the connected status to true
|
/**
|
||||||
void Connect();
|
* Sets the connected status to true
|
||||||
|
* @param use_temporary_value If true tmp_npad_type will be used
|
||||||
|
*/
|
||||||
|
void Connect(bool use_temporary_value = false);
|
||||||
|
|
||||||
/// Sets the connected status to false
|
/// Sets the connected status to false
|
||||||
void Disconnect();
|
void Disconnect();
|
||||||
|
@ -319,9 +322,10 @@ private:
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks the current controller type against the supported_style_tag
|
* Checks the current controller type against the supported_style_tag
|
||||||
|
* @param use_temporary_value If true tmp_npad_type will be used
|
||||||
* @return true if the controller is supported
|
* @return true if the controller is supported
|
||||||
*/
|
*/
|
||||||
bool IsControllerSupported() const;
|
bool IsControllerSupported(bool use_temporary_value = false) const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Updates the button status of the controller
|
* Updates the button status of the controller
|
||||||
|
|
|
@ -33,7 +33,7 @@ void UpdateController(Core::HID::EmulatedController* controller,
|
||||||
}
|
}
|
||||||
controller->SetNpadStyleIndex(controller_type);
|
controller->SetNpadStyleIndex(controller_type);
|
||||||
if (connected) {
|
if (connected) {
|
||||||
controller->Connect();
|
controller->Connect(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -599,11 +599,11 @@ ConfigureInputPlayer::ConfigureInputPlayer(QWidget* parent, std::size_t player_i
|
||||||
if (is_connected) {
|
if (is_connected) {
|
||||||
if (type == Core::HID::NpadStyleIndex::Handheld) {
|
if (type == Core::HID::NpadStyleIndex::Handheld) {
|
||||||
emulated_controller_p1->Disconnect();
|
emulated_controller_p1->Disconnect();
|
||||||
emulated_controller_handheld->Connect();
|
emulated_controller_handheld->Connect(true);
|
||||||
emulated_controller = emulated_controller_handheld;
|
emulated_controller = emulated_controller_handheld;
|
||||||
} else {
|
} else {
|
||||||
emulated_controller_handheld->Disconnect();
|
emulated_controller_handheld->Disconnect();
|
||||||
emulated_controller_p1->Connect();
|
emulated_controller_p1->Connect(true);
|
||||||
emulated_controller = emulated_controller_p1;
|
emulated_controller = emulated_controller_p1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -718,7 +718,7 @@ void ConfigureInputPlayer::LoadConfiguration() {
|
||||||
void ConfigureInputPlayer::ConnectPlayer(bool connected) {
|
void ConfigureInputPlayer::ConnectPlayer(bool connected) {
|
||||||
ui->groupConnectedController->setChecked(connected);
|
ui->groupConnectedController->setChecked(connected);
|
||||||
if (connected) {
|
if (connected) {
|
||||||
emulated_controller->Connect();
|
emulated_controller->Connect(true);
|
||||||
} else {
|
} else {
|
||||||
emulated_controller->Disconnect();
|
emulated_controller->Disconnect();
|
||||||
}
|
}
|
||||||
|
|
Reference in New Issue