mirror of
				https://git.zaroz.cloud/nintendo-back-up/yuzu/yuzu.git
				synced 2025-05-12 00:45:25 +00:00 
			
		
		
		
	HLE/Applets: Stub Mint (eShop) Applet (#2463)
This allows Phoenix Wright - Dual Destinies to boot.
This commit is contained in:
		
							parent
							
								
									0b9c59ff22
								
							
						
					
					
						commit
						d0bf7df5ba
					
				| @ -40,6 +40,7 @@ set(SRCS | ||||
|             hle/applets/applet.cpp | ||||
|             hle/applets/erreula.cpp | ||||
|             hle/applets/mii_selector.cpp | ||||
|             hle/applets/mint.cpp | ||||
|             hle/applets/swkbd.cpp | ||||
|             hle/kernel/address_arbiter.cpp | ||||
|             hle/kernel/client_port.cpp | ||||
| @ -219,6 +220,7 @@ set(HEADERS | ||||
|             hle/applets/applet.h | ||||
|             hle/applets/erreula.h | ||||
|             hle/applets/mii_selector.h | ||||
|             hle/applets/mint.h | ||||
|             hle/applets/swkbd.h | ||||
|             hle/kernel/address_arbiter.h | ||||
|             hle/kernel/client_port.h | ||||
|  | ||||
| @ -12,6 +12,7 @@ | ||||
| #include "core/hle/applets/applet.h" | ||||
| #include "core/hle/applets/erreula.h" | ||||
| #include "core/hle/applets/mii_selector.h" | ||||
| #include "core/hle/applets/mint.h" | ||||
| #include "core/hle/applets/swkbd.h" | ||||
| #include "core/hle/result.h" | ||||
| #include "core/hle/service/apt/apt.h" | ||||
| @ -56,6 +57,10 @@ ResultCode Applet::Create(Service::APT::AppletId id) { | ||||
|     case Service::APT::AppletId::Error2: | ||||
|         applets[id] = std::make_shared<ErrEula>(id); | ||||
|         break; | ||||
|     case Service::APT::AppletId::Mint: | ||||
|     case Service::APT::AppletId::Mint2: | ||||
|         applets[id] = std::make_shared<Mint>(id); | ||||
|         break; | ||||
|     default: | ||||
|         LOG_ERROR(Service_APT, "Could not create applet %u", id); | ||||
|         // TODO(Subv): Find the right error code
 | ||||
|  | ||||
							
								
								
									
										72
									
								
								src/core/hle/applets/mint.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										72
									
								
								src/core/hle/applets/mint.cpp
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,72 @@ | ||||
| // Copyright 2016 Citra Emulator Project
 | ||||
| // Licensed under GPLv2 or any later version
 | ||||
| // Refer to the license.txt file included.
 | ||||
| 
 | ||||
| #include "common/string_util.h" | ||||
| #include "core/hle/applets/mint.h" | ||||
| #include "core/hle/service/apt/apt.h" | ||||
| 
 | ||||
| namespace HLE { | ||||
| namespace Applets { | ||||
| 
 | ||||
| ResultCode Mint::ReceiveParameter(const Service::APT::MessageParameter& parameter) { | ||||
|     if (parameter.signal != static_cast<u32>(Service::APT::SignalType::Request)) { | ||||
|         LOG_ERROR(Service_APT, "unsupported signal %u", parameter.signal); | ||||
|         UNIMPLEMENTED(); | ||||
|         // TODO(Subv): Find the right error code
 | ||||
|         return ResultCode(-1); | ||||
|     } | ||||
| 
 | ||||
|     // The Request message contains a buffer with the size of the framebuffer shared
 | ||||
|     // memory.
 | ||||
|     // Create the SharedMemory that will hold the framebuffer data
 | ||||
|     Service::APT::CaptureBufferInfo capture_info; | ||||
|     ASSERT(sizeof(capture_info) == parameter.buffer.size()); | ||||
| 
 | ||||
|     memcpy(&capture_info, parameter.buffer.data(), sizeof(capture_info)); | ||||
| 
 | ||||
|     // TODO: allocated memory never released
 | ||||
|     using Kernel::MemoryPermission; | ||||
|     // Allocate a heap block of the required size for this applet.
 | ||||
|     heap_memory = std::make_shared<std::vector<u8>>(capture_info.size); | ||||
|     // Create a SharedMemory that directly points to this heap block.
 | ||||
|     framebuffer_memory = Kernel::SharedMemory::CreateForApplet( | ||||
|         heap_memory, 0, heap_memory->size(), MemoryPermission::ReadWrite, | ||||
|         MemoryPermission::ReadWrite, "Mint Memory"); | ||||
| 
 | ||||
|     // Send the response message with the newly created SharedMemory
 | ||||
|     Service::APT::MessageParameter result; | ||||
|     result.signal = static_cast<u32>(Service::APT::SignalType::Response); | ||||
|     result.buffer.clear(); | ||||
|     result.destination_id = static_cast<u32>(Service::APT::AppletId::Application); | ||||
|     result.sender_id = static_cast<u32>(id); | ||||
|     result.object = framebuffer_memory; | ||||
| 
 | ||||
|     Service::APT::SendParameter(result); | ||||
|     return RESULT_SUCCESS; | ||||
| } | ||||
| 
 | ||||
| ResultCode Mint::StartImpl(const Service::APT::AppletStartupParameter& parameter) { | ||||
|     is_running = true; | ||||
| 
 | ||||
|     // TODO(Subv): Set the expected fields in the response buffer before resending it to the
 | ||||
|     // application.
 | ||||
|     // TODO(Subv): Reverse the parameter format for the Mint applet
 | ||||
| 
 | ||||
|     // Let the application know that we're closing
 | ||||
|     Service::APT::MessageParameter message; | ||||
|     message.buffer.resize(parameter.buffer.size()); | ||||
|     std::fill(message.buffer.begin(), message.buffer.end(), 0); | ||||
|     message.signal = static_cast<u32>(Service::APT::SignalType::WakeupByExit); | ||||
|     message.destination_id = static_cast<u32>(Service::APT::AppletId::Application); | ||||
|     message.sender_id = static_cast<u32>(id); | ||||
|     Service::APT::SendParameter(message); | ||||
| 
 | ||||
|     is_running = false; | ||||
|     return RESULT_SUCCESS; | ||||
| } | ||||
| 
 | ||||
| void Mint::Update() {} | ||||
| 
 | ||||
| } // namespace Applets
 | ||||
| } // namespace HLE
 | ||||
							
								
								
									
										29
									
								
								src/core/hle/applets/mint.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								src/core/hle/applets/mint.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,29 @@ | ||||
| // Copyright 2016 Citra Emulator Project
 | ||||
| // Licensed under GPLv2 or any later version
 | ||||
| // Refer to the license.txt file included.
 | ||||
| 
 | ||||
| #pragma once | ||||
| 
 | ||||
| #include "core/hle/applets/applet.h" | ||||
| #include "core/hle/kernel/shared_memory.h" | ||||
| 
 | ||||
| namespace HLE { | ||||
| namespace Applets { | ||||
| 
 | ||||
| class Mint final : public Applet { | ||||
| public: | ||||
|     explicit Mint(Service::APT::AppletId id) : Applet(id) {} | ||||
| 
 | ||||
|     ResultCode ReceiveParameter(const Service::APT::MessageParameter& parameter) override; | ||||
|     ResultCode StartImpl(const Service::APT::AppletStartupParameter& parameter) override; | ||||
|     void Update() override; | ||||
| 
 | ||||
| private: | ||||
|     /// This SharedMemory will be created when we receive the Request message.
 | ||||
|     /// It holds the framebuffer info retrieved by the application with
 | ||||
|     /// GSPGPU::ImportDisplayCaptureInfo
 | ||||
|     Kernel::SharedPtr<Kernel::SharedMemory> framebuffer_memory; | ||||
| }; | ||||
| 
 | ||||
| } // namespace Applets
 | ||||
| } // namespace HLE
 | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 mailwl
						mailwl