service: nfc: Ensure controller is in the correct mode

This commit is contained in:
german77 2023-07-02 19:21:16 -06:00
parent 95ceae40e6
commit 9cd698e8ad
3 changed files with 41 additions and 11 deletions

View file

@ -66,10 +66,6 @@ NfcDevice::~NfcDevice() {
};
void NfcDevice::NpadUpdate(Core::HID::ControllerTriggerType type) {
if (!is_initalized) {
return;
}
if (type == Core::HID::ControllerTriggerType::Connected) {
Initialize();
availability_change_event->Signal();
@ -77,12 +73,12 @@ void NfcDevice::NpadUpdate(Core::HID::ControllerTriggerType type) {
}
if (type == Core::HID::ControllerTriggerType::Disconnected) {
device_state = DeviceState::Unavailable;
Finalize();
availability_change_event->Signal();
return;
}
if (type != Core::HID::ControllerTriggerType::Nfc) {
if (!is_initalized) {
return;
}
@ -90,6 +86,17 @@ void NfcDevice::NpadUpdate(Core::HID::ControllerTriggerType type) {
return;
}
// Ensure nfc mode is always active
if (npad_device->GetPollingMode(Core::HID::EmulatedDeviceIndex::RightIndex) ==
Common::Input::PollingMode::Active) {
npad_device->SetPollingMode(Core::HID::EmulatedDeviceIndex::RightIndex,
Common::Input::PollingMode::NFC);
}
if (type != Core::HID::ControllerTriggerType::Nfc) {
return;
}
const auto nfc_status = npad_device->GetNfc();
switch (nfc_status.state) {
case Common::Input::NfcState::NewAmiibo:
@ -207,11 +214,14 @@ void NfcDevice::Initialize() {
}
void NfcDevice::Finalize() {
if (device_state == DeviceState::TagMounted) {
Unmount();
}
if (device_state == DeviceState::SearchingForTag || device_state == DeviceState::TagRemoved) {
StopDetection();
if (npad_device->IsConnected()) {
if (device_state == DeviceState::TagMounted) {
Unmount();
}
if (device_state == DeviceState::SearchingForTag ||
device_state == DeviceState::TagRemoved) {
StopDetection();
}
}
if (device_state != DeviceState::Unavailable) {