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/applet.cpp | ||||||
|             hle/applets/erreula.cpp |             hle/applets/erreula.cpp | ||||||
|             hle/applets/mii_selector.cpp |             hle/applets/mii_selector.cpp | ||||||
|  |             hle/applets/mint.cpp | ||||||
|             hle/applets/swkbd.cpp |             hle/applets/swkbd.cpp | ||||||
|             hle/kernel/address_arbiter.cpp |             hle/kernel/address_arbiter.cpp | ||||||
|             hle/kernel/client_port.cpp |             hle/kernel/client_port.cpp | ||||||
| @ -219,6 +220,7 @@ set(HEADERS | |||||||
|             hle/applets/applet.h |             hle/applets/applet.h | ||||||
|             hle/applets/erreula.h |             hle/applets/erreula.h | ||||||
|             hle/applets/mii_selector.h |             hle/applets/mii_selector.h | ||||||
|  |             hle/applets/mint.h | ||||||
|             hle/applets/swkbd.h |             hle/applets/swkbd.h | ||||||
|             hle/kernel/address_arbiter.h |             hle/kernel/address_arbiter.h | ||||||
|             hle/kernel/client_port.h |             hle/kernel/client_port.h | ||||||
|  | |||||||
| @ -12,6 +12,7 @@ | |||||||
| #include "core/hle/applets/applet.h" | #include "core/hle/applets/applet.h" | ||||||
| #include "core/hle/applets/erreula.h" | #include "core/hle/applets/erreula.h" | ||||||
| #include "core/hle/applets/mii_selector.h" | #include "core/hle/applets/mii_selector.h" | ||||||
|  | #include "core/hle/applets/mint.h" | ||||||
| #include "core/hle/applets/swkbd.h" | #include "core/hle/applets/swkbd.h" | ||||||
| #include "core/hle/result.h" | #include "core/hle/result.h" | ||||||
| #include "core/hle/service/apt/apt.h" | #include "core/hle/service/apt/apt.h" | ||||||
| @ -56,6 +57,10 @@ ResultCode Applet::Create(Service::APT::AppletId id) { | |||||||
|     case Service::APT::AppletId::Error2: |     case Service::APT::AppletId::Error2: | ||||||
|         applets[id] = std::make_shared<ErrEula>(id); |         applets[id] = std::make_shared<ErrEula>(id); | ||||||
|         break; |         break; | ||||||
|  |     case Service::APT::AppletId::Mint: | ||||||
|  |     case Service::APT::AppletId::Mint2: | ||||||
|  |         applets[id] = std::make_shared<Mint>(id); | ||||||
|  |         break; | ||||||
|     default: |     default: | ||||||
|         LOG_ERROR(Service_APT, "Could not create applet %u", id); |         LOG_ERROR(Service_APT, "Could not create applet %u", id); | ||||||
|         // TODO(Subv): Find the right error code
 |         // 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