mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-10-30 21:30:04 +00:00 
			
		
		
		
	service: nfp: Fix size and increase timeout (#6868)
This commit is contained in:
		
							parent
							
								
									1f07ab8643
								
							
						
					
					
						commit
						33a2113b71
					
				
					 2 changed files with 20 additions and 11 deletions
				
			
		|  | @ -316,7 +316,7 @@ void Module::Interface::GetTagInfo2(Kernel::HLERequestContext& ctx) { | ||||||
| 
 | 
 | ||||||
|     if (nfc->nfc_mode == CommunicationMode::TrainTag) { |     if (nfc->nfc_mode == CommunicationMode::TrainTag) { | ||||||
|         LOG_ERROR(Service_NFC, "CommunicationMode  {} not implemented", nfc->nfc_mode); |         LOG_ERROR(Service_NFC, "CommunicationMode  {} not implemented", nfc->nfc_mode); | ||||||
|         IPC::RequestBuilder rb = rp.MakeBuilder(26, 0); |         IPC::RequestBuilder rb = rp.MakeBuilder(25, 0); | ||||||
|         rb.Push(RESULT_SUCCESS); |         rb.Push(RESULT_SUCCESS); | ||||||
|         rb.PushRaw<TagInfo2>({}); |         rb.PushRaw<TagInfo2>({}); | ||||||
|         return; |         return; | ||||||
|  | @ -324,7 +324,7 @@ void Module::Interface::GetTagInfo2(Kernel::HLERequestContext& ctx) { | ||||||
| 
 | 
 | ||||||
|     TagInfo2 tag_info{}; |     TagInfo2 tag_info{}; | ||||||
|     const auto result = nfc->device->GetTagInfo2(tag_info); |     const auto result = nfc->device->GetTagInfo2(tag_info); | ||||||
|     IPC::RequestBuilder rb = rp.MakeBuilder(26, 0); |     IPC::RequestBuilder rb = rp.MakeBuilder(25, 0); | ||||||
|     rb.Push(result); |     rb.Push(result); | ||||||
|     rb.PushRaw<TagInfo2>(tag_info); |     rb.PushRaw<TagInfo2>(tag_info); | ||||||
| } | } | ||||||
|  | @ -383,10 +383,14 @@ void Module::Interface::OpenApplicationArea(Kernel::HLERequestContext& ctx) { | ||||||
| void Module::Interface::CreateApplicationArea(Kernel::HLERequestContext& ctx) { | void Module::Interface::CreateApplicationArea(Kernel::HLERequestContext& ctx) { | ||||||
|     IPC::RequestParser rp(ctx); |     IPC::RequestParser rp(ctx); | ||||||
|     u32 access_id = rp.Pop<u32>(); |     u32 access_id = rp.Pop<u32>(); | ||||||
|     [[maybe_unused]] u32 size = rp.Pop<u32>(); |     u32 size = rp.Pop<u32>(); | ||||||
|     std::vector<u8> buffer = rp.PopStaticBuffer(); |     std::vector<u8> buffer = rp.PopStaticBuffer(); | ||||||
| 
 | 
 | ||||||
|     LOG_CRITICAL(Service_NFC, "called, size={}", size); |     LOG_INFO(Service_NFC, "called, size={}", size); | ||||||
|  | 
 | ||||||
|  |     if (buffer.size() > size) { | ||||||
|  |         buffer.resize(size); | ||||||
|  |     } | ||||||
| 
 | 
 | ||||||
|     if (nfc->nfc_mode != CommunicationMode::Amiibo) { |     if (nfc->nfc_mode != CommunicationMode::Amiibo) { | ||||||
|         IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); |         IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); | ||||||
|  | @ -402,8 +406,9 @@ void Module::Interface::CreateApplicationArea(Kernel::HLERequestContext& ctx) { | ||||||
| 
 | 
 | ||||||
| void Module::Interface::ReadApplicationArea(Kernel::HLERequestContext& ctx) { | void Module::Interface::ReadApplicationArea(Kernel::HLERequestContext& ctx) { | ||||||
|     IPC::RequestParser rp(ctx); |     IPC::RequestParser rp(ctx); | ||||||
|  |     u32 size = rp.Pop<u32>(); | ||||||
| 
 | 
 | ||||||
|     LOG_INFO(Service_NFC, "called"); |     LOG_INFO(Service_NFC, "called, size={}", size); | ||||||
| 
 | 
 | ||||||
|     nfc->device->RescheduleTagRemoveEvent(); |     nfc->device->RescheduleTagRemoveEvent(); | ||||||
| 
 | 
 | ||||||
|  | @ -413,7 +418,7 @@ void Module::Interface::ReadApplicationArea(Kernel::HLERequestContext& ctx) { | ||||||
|         return; |         return; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     std::vector<u8> buffer(sizeof(ApplicationArea)); |     std::vector<u8> buffer(size); | ||||||
|     const auto result = nfc->device->GetApplicationArea(buffer); |     const auto result = nfc->device->GetApplicationArea(buffer); | ||||||
| 
 | 
 | ||||||
|     IPC::RequestBuilder rb = rp.MakeBuilder(1, 2); |     IPC::RequestBuilder rb = rp.MakeBuilder(1, 2); | ||||||
|  | @ -423,11 +428,15 @@ void Module::Interface::ReadApplicationArea(Kernel::HLERequestContext& ctx) { | ||||||
| 
 | 
 | ||||||
| void Module::Interface::WriteApplicationArea(Kernel::HLERequestContext& ctx) { | void Module::Interface::WriteApplicationArea(Kernel::HLERequestContext& ctx) { | ||||||
|     IPC::RequestParser rp(ctx); |     IPC::RequestParser rp(ctx); | ||||||
|     [[maybe_unused]] u32 size = rp.Pop<u32>(); |     u32 size = rp.Pop<u32>(); | ||||||
|     std::vector<u8> tag_uuid_info = rp.PopStaticBuffer(); |     std::vector<u8> tag_uuid_info = rp.PopStaticBuffer(); | ||||||
|     std::vector<u8> buffer = rp.PopStaticBuffer(); |     std::vector<u8> buffer = rp.PopStaticBuffer(); | ||||||
| 
 | 
 | ||||||
|     LOG_CRITICAL(Service_NFC, "called, size={}", size); |     LOG_INFO(Service_NFC, "called, size={}", size); | ||||||
|  | 
 | ||||||
|  |     if (buffer.size() > size) { | ||||||
|  |         buffer.resize(size); | ||||||
|  |     } | ||||||
| 
 | 
 | ||||||
|     if (nfc->nfc_mode != CommunicationMode::Amiibo) { |     if (nfc->nfc_mode != CommunicationMode::Amiibo) { | ||||||
|         IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); |         IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); | ||||||
|  | @ -540,7 +549,7 @@ void Module::Interface::GetIdentificationBlock(Kernel::HLERequestContext& ctx) { | ||||||
|     ModelInfo model_info{}; |     ModelInfo model_info{}; | ||||||
|     const auto result = nfc->device->GetModelInfo(model_info); |     const auto result = nfc->device->GetModelInfo(model_info); | ||||||
| 
 | 
 | ||||||
|     IPC::RequestBuilder rb = rp.MakeBuilder(0x1F, 0); |     IPC::RequestBuilder rb = rp.MakeBuilder(14, 0); | ||||||
|     rb.Push(result); |     rb.Push(result); | ||||||
|     rb.PushRaw<ModelInfo>(model_info); |     rb.PushRaw<ModelInfo>(model_info); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -1101,8 +1101,8 @@ void NfcDevice::BuildAmiiboWithoutKeys() { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void NfcDevice::RescheduleTagRemoveEvent() { | void NfcDevice::RescheduleTagRemoveEvent() { | ||||||
|     /// The interval at which the amiibo will be removed automatically 1.5s
 |     /// The interval at which the amiibo will be removed automatically 3s
 | ||||||
|     static constexpr u64 amiibo_removal_interval = nsToCycles(1500 * 1000 * 1000); |     static constexpr u64 amiibo_removal_interval = msToCycles(3 * 1000); | ||||||
| 
 | 
 | ||||||
|     system.CoreTiming().UnscheduleEvent(remove_amiibo_event, 0); |     system.CoreTiming().UnscheduleEvent(remove_amiibo_event, 0); | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue