mirror of
				https://git.suyu.dev/suyu/suyu
				synced 2025-10-30 23:49:01 -05:00 
			
		
		
		
	APT: Remove use of Memory::GetPointer
This commit is contained in:
		| @@ -32,9 +32,9 @@ ResultCode MiiSelector::ReceiveParameter(const Service::APT::MessageParameter& p | ||||
|     // The LibAppJustStarted 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); | ||||
|     ASSERT(sizeof(capture_info) == parameter.buffer.size()); | ||||
|  | ||||
|     memcpy(&capture_info, parameter.data, sizeof(capture_info)); | ||||
|     memcpy(&capture_info, parameter.buffer.data(), sizeof(capture_info)); | ||||
|  | ||||
|     using Kernel::MemoryPermission; | ||||
|     // Allocate a heap block of the required size for this applet. | ||||
| @@ -47,8 +47,7 @@ ResultCode MiiSelector::ReceiveParameter(const Service::APT::MessageParameter& p | ||||
|     // Send the response message with the newly created SharedMemory | ||||
|     Service::APT::MessageParameter result; | ||||
|     result.signal = static_cast<u32>(Service::APT::SignalType::LibAppFinished); | ||||
|     result.data = nullptr; | ||||
|     result.buffer_size = 0; | ||||
|     result.buffer.clear(); | ||||
|     result.destination_id = static_cast<u32>(Service::APT::AppletId::Application); | ||||
|     result.sender_id = static_cast<u32>(id); | ||||
|     result.object = framebuffer_memory; | ||||
| @@ -63,15 +62,17 @@ ResultCode MiiSelector::StartImpl(const Service::APT::AppletStartupParameter& pa | ||||
|     // TODO(Subv): Set the expected fields in the response buffer before resending it to the application. | ||||
|     // TODO(Subv): Reverse the parameter format for the Mii Selector | ||||
|  | ||||
|     if(parameter.buffer_size >= sizeof(u32)) { | ||||
|         // TODO: defaults return no error, but garbage in other unknown fields | ||||
|         memset(parameter.data, 0, sizeof(u32)); | ||||
|     } | ||||
|     memcpy(&config, parameter.buffer.data(), parameter.buffer.size()); | ||||
|  | ||||
|     // TODO(Subv): Find more about this structure, result code 0 is enough to let most games continue. | ||||
|     MiiResult result; | ||||
|     memset(&result, 0, sizeof(result)); | ||||
|     result.result_code = 0; | ||||
|  | ||||
|     // Let the application know that we're closing | ||||
|     Service::APT::MessageParameter message; | ||||
|     message.buffer_size = parameter.buffer_size; | ||||
|     message.data = parameter.data; | ||||
|     message.buffer.resize(sizeof(MiiResult)); | ||||
|     std::memcpy(message.buffer.data(), &result, message.buffer.size()); | ||||
|     message.signal = static_cast<u32>(Service::APT::SignalType::LibAppClosed); | ||||
|     message.destination_id = static_cast<u32>(Service::APT::AppletId::Application); | ||||
|     message.sender_id = static_cast<u32>(id); | ||||
|   | ||||
| @@ -24,7 +24,7 @@ struct MiiConfig { | ||||
|     u8  unk_004; | ||||
|     INSERT_PADDING_BYTES(3); | ||||
|     u16 unk_008; | ||||
|     INSERT_PADDING_BYTES(0x8C - 0xA); | ||||
|     INSERT_PADDING_BYTES(0x82); | ||||
|     u8  unk_08C; | ||||
|     INSERT_PADDING_BYTES(3); | ||||
|     u16 unk_090; | ||||
| @@ -75,6 +75,8 @@ public: | ||||
|  | ||||
|     /// Whether this applet is currently running instead of the host application or not. | ||||
|     bool started; | ||||
|  | ||||
|     MiiConfig config; | ||||
| }; | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -35,9 +35,9 @@ ResultCode SoftwareKeyboard::ReceiveParameter(Service::APT::MessageParameter con | ||||
|     // The LibAppJustStarted 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); | ||||
|     ASSERT(sizeof(capture_info) == parameter.buffer.size()); | ||||
|  | ||||
|     memcpy(&capture_info, parameter.data, sizeof(capture_info)); | ||||
|     memcpy(&capture_info, parameter.buffer.data(), sizeof(capture_info)); | ||||
|  | ||||
|     using Kernel::MemoryPermission; | ||||
|     // Allocate a heap block of the required size for this applet. | ||||
| @@ -50,8 +50,7 @@ ResultCode SoftwareKeyboard::ReceiveParameter(Service::APT::MessageParameter con | ||||
|     // Send the response message with the newly created SharedMemory | ||||
|     Service::APT::MessageParameter result; | ||||
|     result.signal = static_cast<u32>(Service::APT::SignalType::LibAppFinished); | ||||
|     result.data = nullptr; | ||||
|     result.buffer_size = 0; | ||||
|     result.buffer.clear(); | ||||
|     result.destination_id = static_cast<u32>(Service::APT::AppletId::Application); | ||||
|     result.sender_id = static_cast<u32>(id); | ||||
|     result.object = framebuffer_memory; | ||||
| @@ -61,9 +60,9 @@ ResultCode SoftwareKeyboard::ReceiveParameter(Service::APT::MessageParameter con | ||||
| } | ||||
|  | ||||
| ResultCode SoftwareKeyboard::StartImpl(Service::APT::AppletStartupParameter const& parameter) { | ||||
|     ASSERT_MSG(parameter.buffer_size == sizeof(config), "The size of the parameter (SoftwareKeyboardConfig) is wrong"); | ||||
|     ASSERT_MSG(parameter.buffer.size() == sizeof(config), "The size of the parameter (SoftwareKeyboardConfig) is wrong"); | ||||
|  | ||||
|     memcpy(&config, parameter.data, parameter.buffer_size); | ||||
|     memcpy(&config, parameter.buffer.data(), parameter.buffer.size()); | ||||
|     text_memory = boost::static_pointer_cast<Kernel::SharedMemory, Kernel::Object>(parameter.object); | ||||
|  | ||||
|     // TODO(Subv): Verify if this is the correct behavior | ||||
| @@ -107,8 +106,8 @@ void SoftwareKeyboard::DrawScreenKeyboard() { | ||||
| void SoftwareKeyboard::Finalize() { | ||||
|     // Let the application know that we're closing | ||||
|     Service::APT::MessageParameter message; | ||||
|     message.buffer_size = sizeof(SoftwareKeyboardConfig); | ||||
|     message.data = reinterpret_cast<u8*>(&config); | ||||
|     message.buffer.resize(sizeof(SoftwareKeyboardConfig)); | ||||
|     std::memcpy(message.buffer.data(), &config, message.buffer.size()); | ||||
|     message.signal = static_cast<u32>(Service::APT::SignalType::LibAppClosed); | ||||
|     message.destination_id = static_cast<u32>(Service::APT::AppletId::Application); | ||||
|     message.sender_id = static_cast<u32>(id); | ||||
|   | ||||
| @@ -176,12 +176,12 @@ void SendParameter(Service::Interface* self) { | ||||
|     } | ||||
|  | ||||
|     MessageParameter param; | ||||
|     param.buffer_size = buffer_size; | ||||
|     param.destination_id = dst_app_id; | ||||
|     param.sender_id = src_app_id; | ||||
|     param.object = Kernel::g_handle_table.GetGeneric(handle); | ||||
|     param.signal = signal_type; | ||||
|     param.data = Memory::GetPointer(buffer); | ||||
|     param.buffer.resize(buffer_size); | ||||
|     Memory::ReadBlock(buffer, param.buffer.data(), param.buffer.size()); | ||||
|  | ||||
|     cmd_buff[1] = dest_applet->ReceiveParameter(param).raw; | ||||
|  | ||||
| @@ -199,16 +199,15 @@ void ReceiveParameter(Service::Interface* self) { | ||||
|     cmd_buff[1] = RESULT_SUCCESS.raw; // No error | ||||
|     cmd_buff[2] = next_parameter.sender_id; | ||||
|     cmd_buff[3] = next_parameter.signal; // Signal type | ||||
|     cmd_buff[4] = next_parameter.buffer_size; // Parameter buffer size | ||||
|     cmd_buff[4] = next_parameter.buffer.size(); // Parameter buffer size | ||||
|     cmd_buff[5] = 0x10; | ||||
|     cmd_buff[6] = 0; | ||||
|     if (next_parameter.object != nullptr) | ||||
|         cmd_buff[6] = Kernel::g_handle_table.Create(next_parameter.object).MoveFrom(); | ||||
|     cmd_buff[7] = (next_parameter.buffer_size << 14) | 2; | ||||
|     cmd_buff[7] = (next_parameter.buffer.size() << 14) | 2; | ||||
|     cmd_buff[8] = buffer; | ||||
|  | ||||
|     if (next_parameter.data) | ||||
|         memcpy(Memory::GetPointer(buffer), next_parameter.data, std::min(buffer_size, next_parameter.buffer_size)); | ||||
|     Memory::WriteBlock(buffer, next_parameter.buffer.data(), next_parameter.buffer.size()); | ||||
|  | ||||
|     LOG_WARNING(Service_APT, "called app_id=0x%08X, buffer_size=0x%08X", app_id, buffer_size); | ||||
| } | ||||
| @@ -222,16 +221,15 @@ void GlanceParameter(Service::Interface* self) { | ||||
|     cmd_buff[1] = RESULT_SUCCESS.raw; // No error | ||||
|     cmd_buff[2] = next_parameter.sender_id; | ||||
|     cmd_buff[3] = next_parameter.signal; // Signal type | ||||
|     cmd_buff[4] = next_parameter.buffer_size; // Parameter buffer size | ||||
|     cmd_buff[4] = next_parameter.buffer.size(); // Parameter buffer size | ||||
|     cmd_buff[5] = 0x10; | ||||
|     cmd_buff[6] = 0; | ||||
|     if (next_parameter.object != nullptr) | ||||
|         cmd_buff[6] = Kernel::g_handle_table.Create(next_parameter.object).MoveFrom(); | ||||
|     cmd_buff[7] = (next_parameter.buffer_size << 14) | 2; | ||||
|     cmd_buff[7] = (next_parameter.buffer.size() << 14) | 2; | ||||
|     cmd_buff[8] = buffer; | ||||
|  | ||||
|     if (next_parameter.data) | ||||
|         memcpy(Memory::GetPointer(buffer), next_parameter.data, std::min(buffer_size, next_parameter.buffer_size)); | ||||
|     Memory::WriteBlock(buffer, next_parameter.buffer.data(), std::min(static_cast<size_t>(buffer_size), next_parameter.buffer.size())); | ||||
|  | ||||
|     LOG_WARNING(Service_APT, "called app_id=0x%08X, buffer_size=0x%08X", app_id, buffer_size); | ||||
| } | ||||
| @@ -365,10 +363,13 @@ void StartLibraryApplet(Service::Interface* self) { | ||||
|         return; | ||||
|     } | ||||
|  | ||||
|     size_t buffer_size = cmd_buff[2]; | ||||
|     VAddr buffer_addr = cmd_buff[6]; | ||||
|  | ||||
|     AppletStartupParameter parameter; | ||||
|     parameter.buffer_size = cmd_buff[2]; | ||||
|     parameter.object = Kernel::g_handle_table.GetGeneric(cmd_buff[4]); | ||||
|     parameter.data = Memory::GetPointer(cmd_buff[6]); | ||||
|     parameter.buffer.resize(buffer_size); | ||||
|     Memory::ReadBlock(buffer_addr, parameter.buffer.data(), parameter.buffer.size()); | ||||
|  | ||||
|     cmd_buff[1] = applet->Start(parameter).raw; | ||||
| } | ||||
|   | ||||
| @@ -20,16 +20,14 @@ struct MessageParameter { | ||||
|     u32 sender_id = 0; | ||||
|     u32 destination_id = 0; | ||||
|     u32 signal = 0; | ||||
|     u32 buffer_size = 0; | ||||
|     Kernel::SharedPtr<Kernel::Object> object = nullptr; | ||||
|     u8* data = nullptr; | ||||
|     std::vector<u8> buffer; | ||||
| }; | ||||
|  | ||||
| /// Holds information about the parameters used in StartLibraryApplet | ||||
| struct AppletStartupParameter { | ||||
|     u32 buffer_size = 0; | ||||
|     Kernel::SharedPtr<Kernel::Object> object = nullptr; | ||||
|     u8* data = nullptr; | ||||
|     std::vector<u8> buffer; | ||||
| }; | ||||
|  | ||||
| /// Used by the application to pass information about the current framebuffer to applets. | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 MerryMage
					MerryMage