|
|
@@ -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) {
|