diff options
| author | Narr the Reg <juangerman-13@hotmail.com> | 2023-03-21 20:04:01 -0600 | 
|---|---|---|
| committer | Narr the Reg <juangerman-13@hotmail.com> | 2023-03-21 20:09:36 -0600 | 
| commit | 6ff4bf9b1c48f4cd148cbebc9f0f21bcc74cdac8 (patch) | |
| tree | 3aec9d001317af55a6610ea8ca28da7758492c35 | |
| parent | 0e7e98e24e87b84fb438601b5e6d75c5673c4ce5 (diff) | |
nfc: Initialize device when controller is connected
| -rw-r--r-- | src/core/hle/service/nfc/nfc_device.cpp | 16 | ||||
| -rw-r--r-- | src/core/hle/service/nfc/nfc_device.h | 1 | ||||
| -rw-r--r-- | src/core/hle/service/nfp/nfp_device.cpp | 16 | ||||
| -rw-r--r-- | src/core/hle/service/nfp/nfp_device.h | 1 | 
4 files changed, 30 insertions, 4 deletions
| diff --git a/src/core/hle/service/nfc/nfc_device.cpp b/src/core/hle/service/nfc/nfc_device.cpp index 3f17d0c7a..c7db74d14 100644 --- a/src/core/hle/service/nfc/nfc_device.cpp +++ b/src/core/hle/service/nfc/nfc_device.cpp @@ -42,8 +42,18 @@ NfcDevice::~NfcDevice() {  };  void NfcDevice::NpadUpdate(Core::HID::ControllerTriggerType type) { -    if (type == Core::HID::ControllerTriggerType::Connected || -        type == Core::HID::ControllerTriggerType::Disconnected) { +    if (!is_initalized) { +        return; +    } + +    if (type == Core::HID::ControllerTriggerType::Connected) { +        Initialize(); +        availability_change_event->Signal(); +        return; +    } + +    if (type == Core::HID::ControllerTriggerType::Disconnected) { +        device_state = NFP::DeviceState::Unavailable;          availability_change_event->Signal();          return;      } @@ -113,6 +123,7 @@ void NfcDevice::Initialize() {      device_state =          npad_device->HasNfc() ? NFP::DeviceState::Initialized : NFP::DeviceState::Unavailable;      encrypted_tag_data = {}; +    is_initalized = true;  }  void NfcDevice::Finalize() { @@ -121,6 +132,7 @@ void NfcDevice::Finalize() {          StopDetection();      }      device_state = NFP::DeviceState::Unavailable; +    is_initalized = false;  }  Result NfcDevice::StartDetection(NFP::TagProtocol allowed_protocol) { diff --git a/src/core/hle/service/nfc/nfc_device.h b/src/core/hle/service/nfc/nfc_device.h index a6e114d36..ea63f0537 100644 --- a/src/core/hle/service/nfc/nfc_device.h +++ b/src/core/hle/service/nfc/nfc_device.h @@ -67,6 +67,7 @@ private:      Kernel::KEvent* deactivate_event = nullptr;      Kernel::KEvent* availability_change_event = nullptr; +    bool is_initalized{};      NFP::TagProtocol allowed_protocols{};      NFP::DeviceState device_state{NFP::DeviceState::Unavailable}; diff --git a/src/core/hle/service/nfp/nfp_device.cpp b/src/core/hle/service/nfp/nfp_device.cpp index 268337d2e..5990e1473 100644 --- a/src/core/hle/service/nfp/nfp_device.cpp +++ b/src/core/hle/service/nfp/nfp_device.cpp @@ -66,8 +66,18 @@ NfpDevice::~NfpDevice() {  };  void NfpDevice::NpadUpdate(Core::HID::ControllerTriggerType type) { -    if (type == Core::HID::ControllerTriggerType::Connected || -        type == Core::HID::ControllerTriggerType::Disconnected) { +    if (!is_initalized) { +        return; +    } + +    if (type == Core::HID::ControllerTriggerType::Connected) { +        Initialize(); +        availability_change_event->Signal(); +        return; +    } + +    if (type == Core::HID::ControllerTriggerType::Disconnected) { +        device_state = DeviceState::Unavailable;          availability_change_event->Signal();          return;      } @@ -145,6 +155,7 @@ void NfpDevice::Initialize() {      device_state = npad_device->HasNfc() ? DeviceState::Initialized : DeviceState::Unavailable;      encrypted_tag_data = {};      tag_data = {}; +    is_initalized = true;  }  void NfpDevice::Finalize() { @@ -155,6 +166,7 @@ void NfpDevice::Finalize() {          StopDetection();      }      device_state = DeviceState::Unavailable; +    is_initalized = false;  }  Result NfpDevice::StartDetection(TagProtocol allowed_protocol) { diff --git a/src/core/hle/service/nfp/nfp_device.h b/src/core/hle/service/nfp/nfp_device.h index 8813df998..27122e86e 100644 --- a/src/core/hle/service/nfp/nfp_device.h +++ b/src/core/hle/service/nfp/nfp_device.h @@ -92,6 +92,7 @@ private:      Kernel::KEvent* deactivate_event = nullptr;      Kernel::KEvent* availability_change_event = nullptr; +    bool is_initalized{};      bool is_data_moddified{};      bool is_app_area_open{};      TagProtocol allowed_protocols{}; | 
