|
|
|
@ -77,6 +77,9 @@ void NfpDevice::NpadUpdate(Core::HID::ControllerTriggerType type) { |
|
|
|
LoadAmiibo(nfc_status.data); |
|
|
|
break; |
|
|
|
case Common::Input::NfcState::AmiiboRemoved: |
|
|
|
if (device_state == DeviceState::Initialized || device_state == DeviceState::TagRemoved) { |
|
|
|
break; |
|
|
|
} |
|
|
|
if (device_state != DeviceState::SearchingForTag) { |
|
|
|
CloseAmiibo(); |
|
|
|
} |
|
|
|
@ -97,6 +100,8 @@ bool NfpDevice::LoadAmiibo(std::span<const u8> data) { |
|
|
|
return false; |
|
|
|
} |
|
|
|
|
|
|
|
// TODO: Filter by allowed_protocols here
|
|
|
|
|
|
|
|
memcpy(&encrypted_tag_data, data.data(), sizeof(EncryptedNTAG215File)); |
|
|
|
|
|
|
|
device_state = DeviceState::TagFound; |
|
|
|
@ -143,7 +148,7 @@ void NfpDevice::Finalize() { |
|
|
|
device_state = DeviceState::Unavailable; |
|
|
|
} |
|
|
|
|
|
|
|
Result NfpDevice::StartDetection(s32 protocol_) { |
|
|
|
Result NfpDevice::StartDetection([[maybe_unused]] TagProtocol allowed_protocol) { |
|
|
|
if (device_state != DeviceState::Initialized && device_state != DeviceState::TagRemoved) { |
|
|
|
LOG_ERROR(Service_NFP, "Wrong device state {}", device_state); |
|
|
|
return WrongDeviceState; |
|
|
|
@ -155,7 +160,7 @@ Result NfpDevice::StartDetection(s32 protocol_) { |
|
|
|
} |
|
|
|
|
|
|
|
device_state = DeviceState::SearchingForTag; |
|
|
|
protocol = protocol_; |
|
|
|
allowed_protocols = allowed_protocol; |
|
|
|
return ResultSuccess; |
|
|
|
} |
|
|
|
|
|
|
|
@ -469,6 +474,30 @@ Result NfpDevice::OpenApplicationArea(u32 access_id) { |
|
|
|
return ResultSuccess; |
|
|
|
} |
|
|
|
|
|
|
|
Result NfpDevice::GetApplicationAreaId(u32& application_area_id) const { |
|
|
|
if (device_state != DeviceState::TagMounted) { |
|
|
|
LOG_ERROR(Service_NFP, "Wrong device state {}", device_state); |
|
|
|
if (device_state == DeviceState::TagRemoved) { |
|
|
|
return TagRemoved; |
|
|
|
} |
|
|
|
return WrongDeviceState; |
|
|
|
} |
|
|
|
|
|
|
|
if (mount_target == MountTarget::None || mount_target == MountTarget::Rom) { |
|
|
|
LOG_ERROR(Service_NFP, "Amiibo is read only", device_state); |
|
|
|
return WrongDeviceState; |
|
|
|
} |
|
|
|
|
|
|
|
if (tag_data.settings.settings.appdata_initialized.Value() == 0) { |
|
|
|
LOG_WARNING(Service_NFP, "Application area is not initialized"); |
|
|
|
return ApplicationAreaIsNotInitialized; |
|
|
|
} |
|
|
|
|
|
|
|
application_area_id = tag_data.application_area_id; |
|
|
|
|
|
|
|
return ResultSuccess; |
|
|
|
} |
|
|
|
|
|
|
|
Result NfpDevice::GetApplicationArea(std::vector<u8>& data) const { |
|
|
|
if (device_state != DeviceState::TagMounted) { |
|
|
|
LOG_ERROR(Service_NFP, "Wrong device state {}", device_state); |
|
|
|
|