Changes

Jump to navigation Jump to search
12,657 bytes added ,  00:48, 27 October 2019
no edit summary
Line 2: Line 2:     
= caps:sc =
 
= caps:sc =
 +
This is "nn::capsrv::sf::IScreenShotControlService". This is available with [2.0.0+].
 +
 +
{| class="wikitable" border="1"
 +
|-
 +
! Cmd || Name || Notes
 +
|-
 +
| 1 || [[#CaptureRawImage]] ||
 +
|-
 +
| 2 || [[#CaptureRawImageWithTimeout]] ||
 +
|-
 +
| 3 || [5.0.0+] AttachSharedBuffer || Takes a total of 8-bytes of input, no output.
 +
|-
 +
| 5 || [5.0.0+] CaptureRawImageToAttachedSharedBuffer || Takes a total of 0x10-bytes of input, no output.
 +
|-
 +
| 210 || [6.0.0+] ? || Takes a total of 0x50-bytes of input, a type-0x15 input buffer, and a type-0x45 input buffer, returns a total of 0x20-bytes of output.
 +
|-
 +
| [2.0.0-4.1.0] 1001 || RequestTakingScreenShot || Takes a total of 0x10-bytes of input, no output.
 +
|-
 +
| [2.0.0-4.1.0] 1002 || RequestTakingScreenShotWithTimeout || Takes a total of 0x18-bytes of input, no output.
 +
|-
 +
| [3.0.0-4.1.0] 1003 || RequestTakingScreenShotEx || Takes a total of 0x58-bytes of input, no output.
 +
|-
 +
| 1004 || [5.0.0+] RequestTakingScreenShotEx1 || Takes a total of 0x60-bytes of input, no output. [6.0.0+]: In addition, this also takes a type-0x15 input buffer.
 +
|-
 +
| 1009 || [5.0.0+] CancelTakingScreenShot || Takes a total of 0x10-bytes of input, no output.
 +
|-
 +
| 1010 || [5.0.0+] SetTakingScreenShotCancelState || Takes a total of 0x10-bytes of input, no output.
 +
|-
 +
| 1011 || NotifyTakingScreenShotRefused || Takes a total of 8-bytes of input, no output.
 +
|-
 +
| 1012 || NotifyTakingScreenShotFailed || Takes a total of 8-bytes of input, no output.
 +
|-
 +
| 1101 || [4.0.0+] [[#SetupOverlayMovieThumbnail]] ||
 +
|-
 +
| 1106 || [4.0.0+] ? ||
 +
|-
 +
| 1107 || [4.0.0+] ? ||
 +
|-
 +
| 1201 || [3.0.0+] OpenRawScreenShotReadStream || Takes a total of 0x10-bytes of input, returns a total of 0x18-bytes of output.
 +
|-
 +
| 1202 || [3.0.0+] CloseRawScreenShotReadStream || No input/output.
 +
|-
 +
| 1203 || [3.0.0+] ReadRawScreenShotReadStream || Takes a total of 8-bytes of input and a type-0x6 output buffer, returns a total of 8-bytes of output.
 +
|-
 +
| 1204 || [9.0.0+] || Takes a total of 0x10-bytes of input and a type-0x46 output buffer, returns a total of 8-bytes of output.
 +
|}
 +
 +
* cmd210: User-processes use hard-coded size 0x88 for the type-0x15 buffer.
 +
* cmd1106/1107: User-processes use hard-coded sizes 0x400 and 0x404 for the first/second type-0x15 buffers.
 +
* cmd1201/1202/1203: These are only usable when the previously loaded value from [[Settings_services|set:sys GetDebugModeFlag]] is set.
 +
 +
The only caps:sc commands used by [[GRC_services|GRC]] are: 1101, 1106, and 1107.
 +
 +
[8.0.0+] Cmd210 and cmd1004 now takes an additional type-0x15 input buffer.
 +
 +
== CaptureRawImage ==
 +
Takes a type-0x46 output buffer, an input u32 '''layer_stack''', two input u64s '''width'''/'''height''', an input s64 '''buffer_count''', and an input s64 '''buffer_index'''.
 +
 +
'''width'''/'''height''' must match 1280/720. '''buffer_index''' must be < '''buffer_count'''. '''buffer_index''' and '''buffer_count''' must not be negative.
 +
 +
'''buffer_index''' and '''buffer_count''' correspond to buffers with size 0x384000(1280*720*4).
 +
 +
Value 0 is usable for the input u32.
 +
 +
This takes a screenshot, the output buffer contains the RGBA8 image.
 +
 +
Stubbed with [5.0.0+], where it now returns error 0x7FECE.
 +
 +
== CaptureRawImageWithTimeout ==
 +
Calls the same internal func as [[#CaptureRawImage]], where the last param is an additional cmd input u64 instead of hard-coded value 0x5f5e100.
 +
 +
Stubbed with [5.0.0+], where it now returns error 0x7FECE.
 +
 +
== SetupOverlayMovieThumbnail ==
 +
Takes two input u64s '''width'''/'''height''', a 0x18-byte input struct, and two type-0x46 output buffers.
 +
 +
For the input struct, [[GRC_services|GRC]] uses the output from [[Capture_services|caps:c]] cmd2101.
 +
 +
'''width'''/'''height''' must be 1280x720. The first buffer address must be 0x400-byte aligned. The size of the first buffer must be at least '''width'''*'''height''', and must be aligned to 0x20000-bytes.
 +
 +
The requirements for the second buffer address/size are the same as the first buffer, except the minimum size is ('''width'''*'''height''')/2.
 +
 +
== Cmd1106 ==
 +
Takes a 0x40-byte input struct, two input u64s '''width'''/'''height''', a 0x18-byte input struct, two type-0x15 input buffers, a type-0x6 output buffer, and two type-0x46 output buffers, returns 3 output u64s.
 +
 +
'''width'''/'''height''' have same requirements as [[#SetupOverlayMovieThumbnail]]. The size of the type-0x6 buffer must be at least 0x7D000. The requirements for the type-0x46 buffers are the same as [[#SetupOverlayMovieThumbnail]].
 +
 +
[5.0.0+] Now takes a total of 0x68-bytes of input instead of 0x30.
 +
 +
== Cmd1107 ==
 +
Takes a 0x40-byte input struct, two input u64s '''width'''/'''height''', a 0x18-byte input struct, two type-0x15 input buffers, a type-0x6 output buffer, and a type-0x45 input buffer, returns 3 output u64s.
 +
 +
'''width'''/'''height''' have same requirements as [[#SetupOverlayMovieThumbnail]]. The size of the type-0x6 buffer must be at least 0x7D000. The size of the type-0x45 buffer must be at least 0x384000.
 +
 +
[5.0.0+] Now takes a total of 0x68-bytes of input instead of 0x30.
    
= caps:ss =
 
= caps:ss =
 +
This is "nn::capsrv::sf::IScreenShotService". This is available with [2.0.0+].
 +
 +
{| class="wikitable" border="1"
 +
|-
 +
! Cmd || Name
 +
|-
 +
| 201 || SaveScreenShot
 +
|-
 +
| 202 || SaveEditedScreenShot
 +
|-
 +
| 203 || [3.0.0+] SaveScreenShotEx0
 +
|-
 +
| 204 || [3.0.0+] SaveEditedScreenShotEx0
 +
|-
 +
| 206 || [?+]
 +
|-
 +
| 208 || [5.0.0+] SaveScreenShotOfMovieEx1
 +
|}
 +
 +
= caps:su =
 +
This is "nn::capsrv::sf::IScreenShotApplicationService".
 +
 +
This was added with [3.0.0+]. This was moved to [[Applet_Manager_services|AM]] with [6.0.0+].
 +
 +
{| class="wikitable" border="1"
 +
|-
 +
! Cmd || Name
 +
|-
 +
| 201 || SaveScreenShot
 +
|-
 +
| 203 || SaveScreenShotEx0
 +
|}
    
= cec-mgr =
 
= cec-mgr =
 +
This is "nn::cec::ICecManager".
 +
 +
{| class="wikitable" border="1"
 +
|-
 +
! Cmd || Name
 +
|-
 +
| 0 || RegisterCallback
 +
|-
 +
| 1 || UnregisterCallback
 +
|-
 +
| 2 || TriggerSystemEvent
 +
|-
 +
| 3 || PerformAction
 +
|-
 +
| 4 || QueryState
 +
|-
 +
| 5 || OnSystemEvent
 +
|-
 +
| 6 || [2.0.0+] CancelCurrentCall
 +
|-
 +
| 100 || [4.0.0+] GetHdcpServiceObject
 +
|}
 +
 +
GetHdcpServiceObject: No input, returns a [[#IHdcpController]].
 +
 +
= IHdcpController =
 +
This is "nn::hdcp::IHdcpController".
 +
 +
Added with [4.0.0+].
 +
 +
{| class="wikitable" border="1"
 +
|-
 +
! Cmd || Name
 +
|-
 +
| 0 || GetHdcpStateTransitionEvent
 +
|-
 +
| 1 || GetHdcpAuthenticationState
 +
|-
 +
| 2 || SetCurrentHdcpMode
 +
|-
 +
| 3 || GetCurrentHdcpMode
 +
|}
    
= mm:u =
 
= mm:u =
 +
This is "nn::mmnv::IRequest".
 +
 
NVIDIA multimedia (NvMM) platform service.
 
NVIDIA multimedia (NvMM) platform service.
   Line 14: Line 185:  
! Cmd || Name
 
! Cmd || Name
 
|-
 
|-
| 0 || ?
+
| 0 || InitializeOld
 
|-
 
|-
| 1 || ?
+
| 1 || FinalizeOld
 
|-
 
|-
| 2 || ?
+
| 2 || SetAndWaitOld
 
|-
 
|-
| 3 || ?
+
| 3 || GetOld
 
|-
 
|-
| 4 || module_init_clk
+
| 4 || Initialize
 
|-
 
|-
| 5 || module_deinit_clk
+
| 5 || Finalize
 
|-
 
|-
| 6 || module_set_clk_rate
+
| 6 || SetAndWait
 
|-
 
|-
| 7 || module_get_clk_rate
+
| 7 || Get
 
|}
 
|}
   Line 36: Line 207:  
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 
|-
 
|-
! Cmd || Name || Notes
+
! Cmd || Name
 
|-
 
|-
| 0 || GetDisplayService || Returns an [[#IApplicationDisplayService]]. Takes an input u64(?), can be zero.
+
| 0 || [[#vi:u|GetDisplayService]]
 
|-
 
|-
 +
| 1 || [9.0.0+] [[#vi:u|GetDisplayServiceWithProxyNameExchange]]
 
|}
 
|}
 +
 +
== GetDisplayService ==
 +
Returns an [[#IApplicationDisplayService]]. Takes an input u32, user-processes use 0 or 1, with 0 for regular-applications normally. 0 = user-service(vi:u), 1 = system/manager service (vi:s/vi:m). Returns an error when using value 1 with vi:u(same error listed below for IApplicationDisplayService for unavailable commands), however passing 1 to vi:s/vi:m results in the IApplicationDisplayService having greater privileges.
 +
 +
== GetDisplayServiceWithProxyNameExchange ==
 +
Takes an input u32, and returns an [[#IApplicationDisplayService]].
    
= vi:s =
 
= vi:s =
Line 49: Line 227:  
! Cmd || Name
 
! Cmd || Name
 
|-
 
|-
| 1 || GetDisplayService || Returns an [[#IApplicationDisplayService]].
+
| 1 || [[#vi:s|GetDisplayService]]
 
|-
 
|-
| 3 || GetDisplayServiceWithProxyNameExchange || Returns an [[#IApplicationDisplayService]].
+
| 3 || [[#vi:s|GetDisplayServiceWithProxyNameExchange]]
 
|-
 
|-
 
|}
 
|}
 +
 +
== GetDisplayService ==
 +
Returns an [[#IApplicationDisplayService]]. Same input as vi:u.
 +
 +
== GetDisplayServiceWithProxyNameExchange ==
 +
Returns an [[#IApplicationDisplayService]].
    
= vi:m =
 
= vi:m =
Line 60: Line 244:  
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 
|-
 
|-
! Cmd || Name || Notes
+
! Cmd || Name
 
|-
 
|-
| 2 || GetDisplayService || Returns an [[#IApplicationDisplayService]].
+
| 2 || [[#vi:m|GetDisplayService]]
 
|-
 
|-
| 3 || GetDisplayServiceWithProxyNameExchange || Takes an input u64 and u32. Returns an [[#IApplicationDisplayService]].
+
| 3 || [[#vi:m|GetDisplayServiceWithProxyNameExchange]]
 
|-
 
|-
 
|}
 
|}
 +
 +
== GetDisplayService ==
 +
Returns an [[#IApplicationDisplayService]]. Same input as vi:u.
 +
 +
== GetDisplayServiceWithProxyNameExchange ==
 +
Takes an input u64 and u32. Returns an [[#IApplicationDisplayService]].
    
= IApplicationDisplayService =
 
= IApplicationDisplayService =
 +
This is "nn::visrv::sf::IApplicationDisplayService".
 +
 
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 
|-
 
|-
! Cmd || Name || Notes
+
! Cmd || Name
 +
|-
 +
| 100 || [[#GetRelayService]]
 
|-
 
|-
| 100 || GetRelayService || Returns an [[#IHOSBinderDriver]].
+
| 101 || [[#GetSystemDisplayService]]
 
|-
 
|-
| 101 || GetSystemDisplayService || Returns an [[#ISystemDisplayService]].
+
| 102 || [[#GetManagerDisplayService]]
 
|-
 
|-
| 102 || GetManagerDisplayService || Returns an [[#IManagerDisplayService]].
+
| 103 || [2.0.0+] [[#GetIndirectDisplayTransactionService]]
 
|-
 
|-
| 103 || GetIndirectDisplayTransactionService || Returns an [[#IHOSBinderDriver]].
+
| 1000 || [[#ListDisplays]]
 
|-
 
|-
| 1000 || ListDisplays ||  
+
| 1010 || [[#OpenDisplay]]
 
|-
 
|-
| 1010 || OpenDisplay ||
+
| 1011 || [[#OpenDefaultDisplay]]
 
|-
 
|-
| 1011 || OpenDefaultDisplay ||  
+
| 1020 || [[#CloseDisplay]]
 
|-
 
|-
| 1020 || CloseDisplay ||
+
| 1101 || [[#SetDisplayEnabled]]
 
|-
 
|-
| 1101 || SetDisplayEnabled ||
+
| 1102 || [[#GetDisplayResolution]]
 
|-
 
|-
| 1102 || GetDisplayResolution ||
+
| 2020 || [[#OpenLayer]]
 
|-
 
|-
| 2020 || OpenLayer ||
+
| 2021 || [[#CloseLayer]]
 
|-
 
|-
| 2021 || CloseLayer ||
+
| 2030 || [[#CreateStrayLayer]]
 
|-
 
|-
| 2030 || CreateStrayLayer ||
+
| 2031 || [[#DestroyStrayLayer]]
 
|-
 
|-
| 2031 || DestroyStrayLayer ||
+
| 2101 || [[#SetLayerScalingMode]]
 
|-
 
|-
| 2101 || SetLayerScalingMode ||
+
| 2102 || [5.0.0+] ConvertScalingMode
 
|-
 
|-
| 2450 || GetIndirectLayerImageMap ||
+
| 2450 || [[#GetIndirectLayerImageMap]]
 
|-
 
|-
| 2451 || GetIndirectLayerImageCropMap ||
+
| 2451 || [[#GetIndirectLayerImageCropMap]]
 
|-
 
|-
| 2460 || GetIndirectLayerImageRequiredMemoryInfo ||
+
| 2460 || [[#GetIndirectLayerImageRequiredMemoryInfo]]
 
|-
 
|-
| 5202 || GetDisplayVsyncEvent ||
+
| 5202 || [[#GetDisplayVsyncEvent]]
 
|-
 
|-
| 5203 || GetDisplayVsyncEventForDebug ||
+
| 5203 || [[#GetDisplayVsyncEventForDebug]]
 
|-
 
|-
 
|}
 
|}
Line 121: Line 315:     
When attempting to use a get-session cmd with a service it's not available with, error 0xA72 is returned.
 
When attempting to use a get-session cmd with a service it's not available with, error 0xA72 is returned.
 +
 +
These commands using PIDs have AppletResourceUserId as the last input u64, hence AppletResourceUserId must [[IPC_Marshalling|match]] the user-process PID(no special handling for value 0).
 +
 +
== GetRelayService ==
 +
Returns an [[Nvnflinger_services#dispdrv|IHOSBinderDriver]] interface which abstracts "nn::visrv::service::RelayServiceImpl".
 +
 +
== GetIndirectDisplayTransactionService ==
 +
Returns an [[Nvnflinger_services#dispdrv|IHOSBinderDriver]] interface which abstracts "nn::visrv::service::IndirectDisplayTransactionServiceImpl".
 +
 +
== GetSystemDisplayService ==
 +
Returns an [[#ISystemDisplayService]].
 +
 +
== GetManagerDisplayService ==
 +
Returns an [[#IManagerDisplayService]].
    
== ListDisplays ==
 
== ListDisplays ==
Line 141: Line 349:     
== SetDisplayEnabled ==
 
== SetDisplayEnabled ==
Takes an input u32 boolean, and an u64(DisplayId?).
+
Takes an input u32 boolean, and an u64 DisplayId.
    
== GetDisplayResolution ==
 
== GetDisplayResolution ==
Takes an input u64 DisplayId and returns two output u64s.
+
Takes an input u64 DisplayId and returns two output s64s: width and height. Official sw copies these to s32 output fields.
    
== OpenLayer ==
 
== OpenLayer ==
Line 152: Line 360:  
* When AppletResourceUserId==0, [[#CreateStrayLayer]] is used instead of the OpenLayer cmd.
 
* When AppletResourceUserId==0, [[#CreateStrayLayer]] is used instead of the OpenLayer cmd.
 
* When AppletResourceUserId!=0, [[AM_services#CreateManagedDisplayLayer]] is used and the output from that is used for LayerId with the OpenLayer cmd.
 
* When AppletResourceUserId!=0, [[AM_services#CreateManagedDisplayLayer]] is used and the output from that is used for LayerId with the OpenLayer cmd.
 +
 +
This OpenLayer command returns error 0x272 when the AppletResourceUserId is invalid.
    
== CloseLayer ==
 
== CloseLayer ==
Line 163: Line 373:     
== SetLayerScalingMode ==
 
== SetLayerScalingMode ==
Takes an input u32("ScalingMode") and u64.
+
Takes an input u64("ScalingMode") and u64 ("LayerId").
    
== GetIndirectLayerImageMap ==
 
== GetIndirectLayerImageMap ==
Takes a PID-descriptor, an type-0x46 buffer, and four u64s: width(s32), height(s32), <output from [[AM_services|AM]] GetIndirectLayerConsumerHandle>, and [[AM_services|AppletResourceUserId]]. Returns two output u64s.
+
Takes a PID-descriptor, an type-0x46 buffer, two s64s width/height, then two u64s: <output from [[AM_services|AM]] GetIndirectLayerConsumerHandle>, and [[AM_services|AppletResourceUserId]]. Returns two output s64s, which are copied to output u64s by official sw.
 +
 
 +
Official sw sets the width/height using input s32s.
 +
 
 +
Calls the same func as [[#GetIndirectLayerImageCropMap]] internally, with the input floats set to 0.0f, then 1.0f for the rest.
    
== GetIndirectLayerImageCropMap ==
 
== GetIndirectLayerImageCropMap ==
Line 172: Line 386:     
== GetIndirectLayerImageRequiredMemoryInfo ==
 
== GetIndirectLayerImageRequiredMemoryInfo ==
Takes two input u64s: with and height. Returns two output u64s. First u64 is the buffer size to use with the ImageMap cmds.
+
Takes two input s64s: width and height. Returns two output s64s, which are copied to output u64s by official sw. First field is the buffer size to use with the ImageMap cmds, second field is the buffer address alignment for those cmds.
 +
 
 +
Official sw sets the width/height using input s32s.
    
== GetDisplayVsyncEvent ==
 
== GetDisplayVsyncEvent ==
Line 180: Line 396:  
Takes an input u64 DisplayId and returns a handle.
 
Takes an input u64 DisplayId and returns a handle.
   −
== IHOSBinderDriver ==
+
== ISystemDisplayService ==
{| class="wikitable" border="1"
+
This is "nn::visrv::sf::ISystemDisplayService".
|-
  −
! Cmd || Name
  −
|-
  −
| 0 || TransactParcel
  −
|-
  −
| 1 || AdjustRefcount
  −
|-
  −
| 2 || GetNativeHandle
  −
|-
  −
| 3 || TransactParcelAuto
  −
|}
     −
== ISystemDisplayService ==
   
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 
|-
 
|-
Line 205: Line 409:  
| 1203 || GetDisplayLogicalResolution
 
| 1203 || GetDisplayLogicalResolution
 
|-
 
|-
| 1204 || SetDisplayMagnification
+
| 1204 || [3.0.0+] SetDisplayMagnification
 
|-
 
|-
 
| 2201 || SetLayerPosition
 
| 2201 || SetLayerPosition
Line 219: Line 423:  
| 2209 || SetLayerAlpha
 
| 2209 || SetLayerAlpha
 
|-
 
|-
| 2312 || CreateStrayLayer
+
| 2312 || [1.0.0-6.2.0] CreateStrayLayer
 
|-
 
|-
 
| 2400 || OpenIndirectLayer
 
| 2400 || OpenIndirectLayer
Line 265: Line 469:  
| 3217 || SetDisplayCmuLuma
 
| 3217 || SetDisplayCmuLuma
 
|-
 
|-
 +
| 8225 || [4.0.0+] GetSharedBufferMemoryHandleId
 +
|-
 +
| 8250 || [4.0.0+] OpenSharedLayer
 +
|-
 +
| 8251 || [4.0.0+] CloseSharedLayer
 +
|-
 +
| 8252 || [4.0.0+] ConnectSharedLayer
 +
|-
 +
| 8253 || [4.0.0+] DisconnectSharedLayer
 +
|-
 +
| 8254 || [4.0.0+] AcquireSharedFrameBuffer
 +
|-
 +
| 8255 || [4.0.0+] PresentSharedFrameBuffer
 +
|-
 +
| 8256 || [4.0.0+] GetSharedFrameBufferAcquirableEvent
 +
|-
 +
| 8257 || [4.0.0+] FillSharedFrameBufferColor
 +
|-
 +
| 8258 || [5.0.0+] CancelSharedFrameBuffer
 
|}
 
|}
    
== IManagerDisplayService ==
 
== IManagerDisplayService ==
 +
This is "nn::visrv::sf::IManagerDisplayService".
 +
 
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 
|-
 
|-
 
! Cmd || Name
 
! Cmd || Name
 
|-
 
|-
| 1102 || GetDisplayResolution
+
| 200 || [4.0.0+] AllocateProcessHeapBlock
 +
|-
 +
| 201 || [4.0.0+] FreeProcessHeapBlock
 +
|-
 +
| 1102 || [3.0.0+] GetDisplayResolution
 
|-
 
|-
 
| 2010 || CreateManagedLayer
 
| 2010 || CreateManagedLayer
 
|-
 
|-
 
| 2011 || DestroyManagedLayer
 
| 2011 || DestroyManagedLayer
 +
|-
 +
| 2012 || [7.0.0+] CreateStrayLayer
 
|-
 
|-
 
| 2050 || CreateIndirectLayer
 
| 2050 || CreateIndirectLayer
Line 295: Line 526:  
|-
 
|-
 
| 2302 || GetDisplayHotplugEvent
 
| 2302 || GetDisplayHotplugEvent
 +
|-
 +
| 2303 || [5.1.0+] GetDisplayModeChangedEvent
 
|-
 
|-
 
| 2402 || GetDisplayHotplugState
 
| 2402 || GetDisplayHotplugState
 +
|-
 +
| 2501 || [4.0.0+] GetCompositorErrorInfo
 +
|-
 +
| 2601 || [4.0.0+] GetDisplayErrorEvent
 
|-
 
|-
 
| 4201 || SetDisplayAlpha
 
| 4201 || SetDisplayAlpha
Line 303: Line 540:  
|-
 
|-
 
| 4205 || SetDisplayPowerState
 
| 4205 || SetDisplayPowerState
 +
|-
 +
| 4206 || [4.0.0+] SetDefaultDisplay
 
|-
 
|-
 
| 6000 || AddToLayerStack
 
| 6000 || AddToLayerStack
Line 309: Line 548:  
|-
 
|-
 
| 6002 || SetLayerVisibility
 
| 6002 || SetLayerVisibility
 +
|-
 +
| 6003 || [5.0.0+] SetLayerConfig
 +
|-
 +
| 6004 || [5.0.0+] AttachLayerPresentationTracer
 +
|-
 +
| 6005 || [5.0.0+] DetachLayerPresentationTracer
 +
|-
 +
| 6006 || [5.0.0+] StartLayerPresentationRecording
 +
|-
 +
| 6007 || [5.0.0+] StopLayerPresentationRecording
 +
|-
 +
| 6008 || [5.0.0+] StartLayerPresentationFenceWait
 +
|-
 +
| 6009 || [5.0.0+] StopLayerPresentationFenceWait
 +
|-
 +
| 6010 || [5.0.0+] GetLayerPresentationAllFencesExpiredEvent
 +
|-
 +
| 6011 || [7.0.0+] EnableLayerAutoClearTransitionBuffer
 +
|-
 +
| 6012 || [7.0.0+] DisableLayerAutoClearTransitionBuffer
 
|-
 
|-
 
| 7000 || SetContentVisibility
 
| 7000 || SetContentVisibility
 
|-
 
|-
 
| 8000 || SetConductorLayer
 
| 8000 || SetConductorLayer
 +
|-
 +
| 8001 || [8.0.0+] SetTimestampTracking
 
|-
 
|-
 
| 8100 || SetIndirectProducerFlipOffset
 
| 8100 || SetIndirectProducerFlipOffset
 +
|-
 +
| 8200 || [4.0.0+] CreateSharedBufferStaticStorage
 +
|-
 +
| 8201 || [4.0.0+] CreateSharedBufferTransferMemory
 +
|-
 +
| 8202 || [4.0.0+] DestroySharedBuffer
 +
|-
 +
| 8203 || [4.0.0+] BindSharedLowLevelLayerToManagedLayer
 +
|-
 +
| 8204 || [4.0.0+] BindSharedLowLevelLayerToIndirectLayer
 +
|-
 +
| 8207 || [4.0.0+] UnbindSharedLowLevelLayer
 +
|-
 +
| 8208 || [4.0.0+] ConnectSharedLowLevelLayerToSharedBuffer
 +
|-
 +
| 8209 || [4.0.0+] DisconnectSharedLowLevelLayerFromSharedBuffer
 +
|-
 +
| 8210 || [4.0.0+] CreateSharedLayer
 +
|-
 +
| 8211 || [4.0.0+] DestroySharedLayer
 +
|-
 +
| 8216 || [4.0.0+] AttachSharedLayerToLowLevelLayer
 +
|-
 +
| 8217 || [4.0.0+] ForceDetachSharedLayerFromLowLevelLayer
 +
|-
 +
| 8218 || [4.0.0+] StartDetachSharedLayerFromLowLevelLayer
 +
|-
 +
| 8219 || [4.0.0+] FinishDetachSharedLayerFromLowLevelLayer
 +
|-
 +
| 8220 || [4.0.0+] GetSharedLayerDetachReadyEvent
 +
|-
 +
| 8221 || [4.0.0+] GetSharedLowLevelLayerSynchronizedEvent
 +
|-
 +
| 8222 || [4.0.0+] CheckSharedLowLevelLayerSynchronized
 +
|-
 +
| 8223 || [4.0.0+] RegisterSharedBufferImporterAruid
 +
|-
 +
| 8224 || [4.0.0+] UnregisterSharedBufferImporterAruid
 +
|-
 +
| 8227 || [4.0.0+] CreateSharedBufferProcessHeap
 +
|-
 +
| 8228 || [4.0.0+] GetSharedLayerLayerStacks
 +
|-
 +
| 8229 || [4.0.0+] SetSharedLayerLayerStacks
 +
|-
 +
| 8291 || [4.0.0+] PresentDetachedSharedFrameBufferToLowLevelLayer
 +
|-
 +
| 8292 || [4.0.0+] FillDetachedSharedFrameBufferColor
 +
|-
 +
| 8293 || [4.0.0+] GetDetachedSharedFrameBufferImage
 +
|-
 +
| 8294 || [4.0.0+] SetDetachedSharedFrameBufferImage
 +
|-
 +
| 8295 || [4.0.0+] CopyDetachedSharedFrameBufferImage
 +
|-
 +
| 8296 || [4.0.0+] SetDetachedSharedFrameBufferSubImage
 +
|-
 +
| 8297 || [4.0.0+] GetSharedFrameBufferContentParameter
 +
|-
 +
| 8298 || [5.0.0+] ExpandStartupLogoOnSharedFrameBuffer
 
|}
 
|}
   −
=DisplayInfo=
+
[5.0.0+] SetDetachedSharedFrameBufferImage now takes an additional 0x10-bytes of input. CopyDetachedSharedFrameBufferImage now takes an additional 0x18-bytes of input. SetDetachedSharedFrameBufferSubImage now takes an additional 0x10-bytes of input, and the buffer type was changed from 0x5 to 0x45.
 +
 
 +
= DisplayInfo =
 
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 
|-
 
|-
Line 324: Line 647:  
| 0x0 || 0x40 || [[#DisplayName]]
 
| 0x0 || 0x40 || [[#DisplayName]]
 
|-
 
|-
| 0x40 || 0x8? || Normally 0x1 for the "Default" Display?
+
| 0x40 || 0x1 || Whether or not the display has a constrained number of layers.
 
|-
 
|-
| 0x48 || 0x8? || Normally 0x1 for the "Default" Display?
+
| 0x41 || 0x7 || Padding/Reserved
 
|-
 
|-
| 0x50 || 0x8? || Width
+
| 0x48 || 0x8 || If this display has a constrained number of layers (0x40 is set), indicates the maximum number of layers.
 
|-
 
|-
| 0x58 || 0x8? || Height
+
| 0x50 || 0x8 || Width in pixels
 +
|-
 +
| 0x58 || 0x8 || Height in pixels
 
|}
 
|}
   Line 337: Line 662:  
The width/height for the "Default" Display is the resolution for 1080p even when in handheld-mode.
 
The width/height for the "Default" Display is the resolution for 1080p even when in handheld-mode.
   −
=DisplayName=
+
= DisplayName =
 
This is a 0x40-byte block: a NUL-terminated string.
 
This is a 0x40-byte block: a NUL-terminated string.
   −
=NativeWindow=
+
Can be "Default", "External", "[https://en.wikipedia.org/wiki/Extended_Display_Identification_Data Edid]", "Internal" or "Null".
 +
 
 +
= Parcel =
 
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 
|-
 
|-
 
! Offset || Size || Description
 
! Offset || Size || Description
 
|-
 
|-
| 0x0 || 0x8? || ?
+
| 0x0 || 0x4 || ParcelDataSize
 
|-
 
|-
| 0x8 || 0x8? || ?
+
| 0x4 || 0x4 || ParcelDataOffset
 
|-
 
|-
| 0x10 || 0x8? || ?
+
| 0x8 || 0x4 || ParcelObjectsSize
 
|-
 
|-
| 0x18 || 0x8? || ?
+
| 0xC || 0x4 || ParcelObjectsOffset
 
|-
 
|-
| 0x20 || 0x8? || ?
+
| 0x10 || ? || FlattenedBinder
 +
|}
 +
 
 +
= NativeWindow =
 +
Max size of this buffer is 0x100-bytes(outbuf size used by official user-processes). Parsed("...DeserializeNativeWindow()") by a function called by the code described under [[#OpenLayer]], which executes code with Android symbols.
 +
 
 +
This is a [[#Parcel]].
 +
 
 +
== ParcelData ==
 +
This normally contains the following:
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset || Size || Description
 +
|-
 +
| 0x0 || 0x4 || 0x2
 +
|-
 +
| 0x4 || 0x4 || Probably the user-process PID?
 +
|-
 +
| 0x8 || 0x4 || ID
 +
|-
 +
| 0xC || 0xC || All-zero normally?
 +
|-
 +
| 0x18 || 0x8 || NUL-terminated "dispdrv" string.
 
|-
 
|-
| 0x28 || ? || "dispdrv" string normally?
+
| 0x20 || 0x8 || All-zero normally?
 
|}
 
|}
   −
Max size of this buffer is 0x100-bytes(outbuf size used by official user-processes). Parsed("Deserialize...") by a function called by the code described under [[#OpenLayer]], which executes code with Android symbols.
+
The above ID is used for the ID param for the binder commands with [[#GetRelayService|IHOSBinderDriver]].
 +
 
 +
== ParcelObjects ==
 +
This normally contains an u32 with value 0?
 +
 
 +
= Resolution handling =
 +
There doesn't seem to be a way to get the actual TV resolution while using the "Default" Display. Official apps just hard-code what resolution to use depending on the current [[AM_services|OperationMode]].
    
[[Category:Services]]
 
[[Category:Services]]

Navigation menu