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