mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-10-30 21:30:04 +00:00 
			
		
		
		
	APT: Implement SendCaptureBufferInfo and ReceiveCaptureBufferInfo (#3467)
* APT: Implement SendCaptureBufferInfo and ReceiveCaptureBufferInfo * adressed comments * Clear screen_capture_buffer on Receive * fix response in ReceiveCaptureBufferInfo * fix response in ReceiveCaptureBufferInfo * fix clang-format
This commit is contained in:
		
							parent
							
								
									001ad9da3b
								
							
						
					
					
						commit
						d6157a49db
					
				
					 5 changed files with 59 additions and 9 deletions
				
			
		|  | @ -550,6 +550,27 @@ void Module::Interface::CancelLibraryApplet(Kernel::HLERequestContext& ctx) { | ||||||
|     LOG_WARNING(Service_APT, "(STUBBED) called exiting=%d", exiting); |     LOG_WARNING(Service_APT, "(STUBBED) called exiting=%d", exiting); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | void Module::Interface::SendCaptureBufferInfo(Kernel::HLERequestContext& ctx) { | ||||||
|  |     IPC::RequestParser rp(ctx, 0x40, 1, 2); // 0x00400042
 | ||||||
|  |     u32 size = rp.Pop<u32>(); | ||||||
|  |     ASSERT(size == 0x20); | ||||||
|  |     apt->screen_capture_buffer = rp.PopStaticBuffer(); | ||||||
|  | 
 | ||||||
|  |     IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); | ||||||
|  |     rb.Push(RESULT_SUCCESS); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void Module::Interface::ReceiveCaptureBufferInfo(Kernel::HLERequestContext& ctx) { | ||||||
|  |     IPC::RequestParser rp(ctx, 0x41, 1, 0); // 0x00410040
 | ||||||
|  |     u32 size = rp.Pop<u32>(); | ||||||
|  |     ASSERT(size == 0x20); | ||||||
|  | 
 | ||||||
|  |     IPC::RequestBuilder rb = rp.MakeBuilder(2, 2); | ||||||
|  |     rb.Push(RESULT_SUCCESS); | ||||||
|  |     rb.Push(static_cast<u32>(apt->screen_capture_buffer.size())); | ||||||
|  |     rb.PushStaticBuffer(std::move(apt->screen_capture_buffer), 0); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| void Module::Interface::SetScreenCapPostPermission(Kernel::HLERequestContext& ctx) { | void Module::Interface::SetScreenCapPostPermission(Kernel::HLERequestContext& ctx) { | ||||||
|     IPC::RequestParser rp(ctx, 0x55, 1, 0); // 0x00550040
 |     IPC::RequestParser rp(ctx, 0x55, 1, 0); // 0x00550040
 | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -14,7 +14,7 @@ | ||||||
| namespace Kernel { | namespace Kernel { | ||||||
| class Mutex; | class Mutex; | ||||||
| class SharedMemory; | class SharedMemory; | ||||||
| } | } // namespace Kernel
 | ||||||
| 
 | 
 | ||||||
| namespace Service { | namespace Service { | ||||||
| namespace APT { | namespace APT { | ||||||
|  | @ -420,6 +420,33 @@ public: | ||||||
|          */ |          */ | ||||||
|         void CancelLibraryApplet(Kernel::HLERequestContext& ctx); |         void CancelLibraryApplet(Kernel::HLERequestContext& ctx); | ||||||
| 
 | 
 | ||||||
|  |         /**
 | ||||||
|  |          * APT::SendCaptureBufferInfo service function | ||||||
|  |          *  Inputs: | ||||||
|  |          *      0 : Command header [0x00400042] | ||||||
|  |          *      1 : Size | ||||||
|  |          *      2 : (Size << 14) | 2 | ||||||
|  |          *      3 : void*, CaptureBufferInfo | ||||||
|  |          *  Outputs: | ||||||
|  |          *      0 : Header code | ||||||
|  |          *      1 : Result code | ||||||
|  |          */ | ||||||
|  |         void SendCaptureBufferInfo(Kernel::HLERequestContext& ctx); | ||||||
|  | 
 | ||||||
|  |         /**
 | ||||||
|  |          * APT::ReceiveCaptureBufferInfo service function | ||||||
|  |          *  Inputs: | ||||||
|  |          *      0 : Command header [0x00410040] | ||||||
|  |          *      1 : Size | ||||||
|  |          *      64 : Size << 14 | 2 | ||||||
|  |          *      65 : void*, CaptureBufferInfo | ||||||
|  |          *  Outputs: | ||||||
|  |          *      0 : Header code | ||||||
|  |          *      1 : Result code | ||||||
|  |          *      2 : Actual Size | ||||||
|  |          */ | ||||||
|  |         void ReceiveCaptureBufferInfo(Kernel::HLERequestContext& ctx); | ||||||
|  | 
 | ||||||
|         /**
 |         /**
 | ||||||
|          * APT::GetStartupArgument service function |          * APT::GetStartupArgument service function | ||||||
|          *  Inputs: |          *  Inputs: | ||||||
|  | @ -496,6 +523,8 @@ private: | ||||||
|     // APT::CheckNew3DSApp will check this unknown_ns_state_field to determine processing mode
 |     // APT::CheckNew3DSApp will check this unknown_ns_state_field to determine processing mode
 | ||||||
|     u8 unknown_ns_state_field = 0; |     u8 unknown_ns_state_field = 0; | ||||||
| 
 | 
 | ||||||
|  |     std::vector<u8> screen_capture_buffer; | ||||||
|  | 
 | ||||||
|     ScreencapPostPermission screen_capture_post_permission = |     ScreencapPostPermission screen_capture_post_permission = | ||||||
|         ScreencapPostPermission::CleanThePermission; // TODO(JamePeng): verify the initial value
 |         ScreencapPostPermission::CleanThePermission; // TODO(JamePeng): verify the initial value
 | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -73,8 +73,8 @@ APT_A::APT_A(std::shared_ptr<Module> apt) | ||||||
|         {0x003D0042, nullptr, "SendDspWakeUp"}, |         {0x003D0042, nullptr, "SendDspWakeUp"}, | ||||||
|         {0x003E0080, nullptr, "ReplySleepQuery"}, |         {0x003E0080, nullptr, "ReplySleepQuery"}, | ||||||
|         {0x003F0040, nullptr, "ReplySleepNotificationComplete"}, |         {0x003F0040, nullptr, "ReplySleepNotificationComplete"}, | ||||||
|         {0x00400042, nullptr, "SendCaptureBufferInfo"}, |         {0x00400042, &APT_A::SendCaptureBufferInfo, "SendCaptureBufferInfo"}, | ||||||
|         {0x00410040, nullptr, "ReceiveCaptureBufferInfo"}, |         {0x00410040, &APT_A::ReceiveCaptureBufferInfo, "ReceiveCaptureBufferInfo"}, | ||||||
|         {0x00420080, nullptr, "SleepSystem"}, |         {0x00420080, nullptr, "SleepSystem"}, | ||||||
|         {0x00430040, &APT_A::NotifyToWait, "NotifyToWait"}, |         {0x00430040, &APT_A::NotifyToWait, "NotifyToWait"}, | ||||||
|         {0x00440000, &APT_A::GetSharedFont, "GetSharedFont"}, |         {0x00440000, &APT_A::GetSharedFont, "GetSharedFont"}, | ||||||
|  |  | ||||||
|  | @ -73,8 +73,8 @@ APT_S::APT_S(std::shared_ptr<Module> apt) | ||||||
|         {0x003D0042, nullptr, "SendDspWakeUp"}, |         {0x003D0042, nullptr, "SendDspWakeUp"}, | ||||||
|         {0x003E0080, nullptr, "ReplySleepQuery"}, |         {0x003E0080, nullptr, "ReplySleepQuery"}, | ||||||
|         {0x003F0040, nullptr, "ReplySleepNotificationComplete"}, |         {0x003F0040, nullptr, "ReplySleepNotificationComplete"}, | ||||||
|         {0x00400042, nullptr, "SendCaptureBufferInfo"}, |         {0x00400042, &APT_S::SendCaptureBufferInfo, "SendCaptureBufferInfo"}, | ||||||
|         {0x00410040, nullptr, "ReceiveCaptureBufferInfo"}, |         {0x00410040, &APT_S::ReceiveCaptureBufferInfo, "ReceiveCaptureBufferInfo"}, | ||||||
|         {0x00420080, nullptr, "SleepSystem"}, |         {0x00420080, nullptr, "SleepSystem"}, | ||||||
|         {0x00430040, &APT_S::NotifyToWait, "NotifyToWait"}, |         {0x00430040, &APT_S::NotifyToWait, "NotifyToWait"}, | ||||||
|         {0x00440000, &APT_S::GetSharedFont, "GetSharedFont"}, |         {0x00440000, &APT_S::GetSharedFont, "GetSharedFont"}, | ||||||
|  |  | ||||||
|  | @ -73,8 +73,8 @@ APT_U::APT_U(std::shared_ptr<Module> apt) | ||||||
|         {0x003D0042, nullptr, "SendDspWakeUp"}, |         {0x003D0042, nullptr, "SendDspWakeUp"}, | ||||||
|         {0x003E0080, nullptr, "ReplySleepQuery"}, |         {0x003E0080, nullptr, "ReplySleepQuery"}, | ||||||
|         {0x003F0040, nullptr, "ReplySleepNotificationComplete"}, |         {0x003F0040, nullptr, "ReplySleepNotificationComplete"}, | ||||||
|         {0x00400042, nullptr, "SendCaptureBufferInfo"}, |         {0x00400042, &APT_U::SendCaptureBufferInfo, "SendCaptureBufferInfo"}, | ||||||
|         {0x00410040, nullptr, "ReceiveCaptureBufferInfo"}, |         {0x00410040, &APT_U::ReceiveCaptureBufferInfo, "ReceiveCaptureBufferInfo"}, | ||||||
|         {0x00420080, nullptr, "SleepSystem"}, |         {0x00420080, nullptr, "SleepSystem"}, | ||||||
|         {0x00430040, &APT_U::NotifyToWait, "NotifyToWait"}, |         {0x00430040, &APT_U::NotifyToWait, "NotifyToWait"}, | ||||||
|         {0x00440000, &APT_U::GetSharedFont, "GetSharedFont"}, |         {0x00440000, &APT_U::GetSharedFont, "GetSharedFont"}, | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue