Display services: Difference between revisions

No edit summary
No edit summary
Line 2: Line 2:


= caps:sc =
= caps:sc =
This is "nn::capsrv::sf::IScreenShotControlService". This is available with [2.0.0+].
This is "nn::capsrv::sf::IScreenShotControlService".
 
This was added with [2.0.0+].


{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-
! Cmd || Name || Notes
! Cmd || Name
|-
|-
| 1 || [[#CaptureRawImage]] ||
| 1 || [[#CaptureRawImage]]
|-
|-
| 2 || [[#CaptureRawImageWithTimeout]] ||
| 2 || [[#CaptureRawImageWithTimeout]]
|-
|-
| 3 || [5.0.0+] AttachSharedBuffer || Takes a total of 8-bytes of input, no output.
| 3 || [5.0.0+] [[#AttachSharedBuffer]]
|-
|-
| 5 || [5.0.0+] CaptureRawImageToAttachedSharedBuffer || Takes a total of 0x10-bytes of input, no output.
| 5 || [5.0.0+] [[#CaptureRawImageToAttachedSharedBuffer]]
|-
|-
| 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.
| 210 || [6.0.0+]
|-
|-
| [2.0.0-4.1.0] 1001 || RequestTakingScreenShot || Takes a total of 0x10-bytes of input, no output.
| [2.0.0-4.1.0] 1001 || [[#RequestTakingScreenShot]]
|-
|-
| [2.0.0-4.1.0] 1002 || RequestTakingScreenShotWithTimeout || Takes a total of 0x18-bytes of input, no output.
| [2.0.0-4.1.0] 1002 || [[#RequestTakingScreenShotWithTimeout]]
|-
|-
| [3.0.0-4.1.0] 1003 || RequestTakingScreenShotEx || Takes a total of 0x58-bytes of input, no output.
| [3.0.0-4.1.0] 1003 || [[#RequestTakingScreenShotEx]]
|-
|-
| 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. [11.0.0+] Now takes an additional 8-bytes of input.
| 1004 || [5.0.0+] [[#RequestTakingScreenShotEx1]]
|-
|-
| 1009 || [5.0.0+] CancelTakingScreenShot || Takes a total of 0x10-bytes of input, no output.
| 1009 || [5.0.0+] [[#CancelTakingScreenShot]]
|-
|-
| 1010 || [5.0.0+] SetTakingScreenShotCancelState || Takes a total of 0x10-bytes of input, no output.
| 1010 || [5.0.0+] [[#SetTakingScreenShotCancelState]]
|-
|-
| 1011 || NotifyTakingScreenShotRefused || Takes a total of 8-bytes of input, no output.
| 1011 || [[#NotifyTakingScreenShotRefused]]
|-
|-
| 1012 || NotifyTakingScreenShotFailed || Takes a total of 8-bytes of input, no output.
| 1012 || [[#NotifyTakingScreenShotFailed]]
|-
|-
| 1101 || [4.0.0+] [[#SetupOverlayMovieThumbnail]] ||
| 1101 || [4.0.0+] [[#SetupOverlayMovieThumbnail]]
|-
|-
| 1106 || [4.0.0+] ? ||
| 1106 || [4.0.0+]
|-
|-
| 1107 || [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.
| 1201 || [3.0.0+] [[#OpenRawScreenShotReadStream]]
|-
|-
| 1202 || [3.0.0+] CloseRawScreenShotReadStream || No input/output.
| 1202 || [3.0.0+] [[#CloseRawScreenShotReadStream]]
|-
|-
| 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.
| 1203 || [3.0.0+] [[#ReadRawScreenShotReadStream]]
|-
|-
| 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.
| 1204 || [9.0.0+]
|}
|}
* 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.
* cmd1204: Also required the mentioned debug flag but does no longer as of [10.0.0].


The only caps:sc commands used by [[GRC_services|GRC]] are: 1101, 1106, and 1107.
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 ==
== CaptureRawImage ==
Line 75: Line 70:


Stubbed with [5.0.0+], where it now returns error 0x7FECE.
Stubbed with [5.0.0+], where it now returns error 0x7FECE.
== AttachSharedBuffer ==
Takes a total of 8-bytes of input. No output.
== CaptureRawImageToAttachedSharedBuffer ==
Takes a total of 0x10-bytes of input. No output.
== Cmd210 ==
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.
User-processes use hard-coded size 0x88 for the type-0x15 buffer.
[8.0.0+] Now takes an additional type-0x15 input buffer.
== RequestTakingScreenShot ==
Takes a total of 0x10-bytes of input. No output.
== RequestTakingScreenShotWithTimeout ==
Takes a total of 0x18-bytes of input. No output.
== RequestTakingScreenShotEx ==
Takes a total of 0x58-bytes of input. No output.
== RequestTakingScreenShotEx1 ==
Takes a total of 0x60-bytes of input. No output.
[6.0.0+] In addition, this also takes a type-0x15 input buffer.
[8.0.0+] Now takes an additional type-0x15 input buffer.
[11.0.0+] Now takes an additional 8-bytes of input.
== CancelTakingScreenShot ==
Takes a total of 0x10-bytes of input. No output.
== SetTakingScreenShotCancelState ==
Takes a total of 0x10-bytes of input. No output.
== NotifyTakingScreenShotRefused ==
Takes a total of 8-bytes of input. No output.
== NotifyTakingScreenShotFailed ==
Takes a total of 8-bytes of input. No output.


== SetupOverlayMovieThumbnail ==
== SetupOverlayMovieThumbnail ==
Line 89: Line 127:


'''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]].
'''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]].
User-processes use hard-coded sizes 0x400 and 0x404 for the first/second type-0x15 buffers.


[5.0.0+] Now takes a total of 0x68-bytes of input instead of 0x30.
[5.0.0+] Now takes a total of 0x68-bytes of input instead of 0x30.
Line 96: Line 136:


'''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.
'''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.
User-processes use hard-coded sizes 0x400 and 0x404 for the first/second type-0x15 buffers.


[5.0.0+] Now takes a total of 0x68-bytes of input instead of 0x30.
[5.0.0+] Now takes a total of 0x68-bytes of input instead of 0x30.
== OpenRawScreenShotReadStream ==
Takes a total of 0x10-bytes of input. Returns a total of 0x18-bytes of output.
Only usable when the previously loaded value from [[Settings_services|set:sys GetDebugModeFlag]] is set.
== CloseRawScreenShotReadStream ==
No input/output.
Only usable when the previously loaded value from [[Settings_services|set:sys GetDebugModeFlag]] is set.
== ReadRawScreenShotReadStream ==
Takes a total of 8-bytes of input and a type-0x6 output buffer. Returns a total of 8-bytes of output.
Only usable when the previously loaded value from [[Settings_services|set:sys GetDebugModeFlag]] is set.
== Cmd1204 ==
Takes a total of 0x10-bytes of input and a type-0x46 output buffer. Returns a total of 8-bytes of output.
Also required the mentioned debug flag but does no longer as of [10.0.0].


= caps:ss =
= caps:ss =
This is "nn::capsrv::sf::IScreenShotService". This is available with [2.0.0+].
This is "nn::capsrv::sf::IScreenShotService".
 
This was added with [2.0.0+].


{| class="wikitable" border="1"
{| class="wikitable" border="1"
Line 122: Line 186:
This is "nn::capsrv::sf::IScreenShotApplicationService".
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+].
This was added with [3.0.0+].
 
[6.0.0+] This was moved to [[Applet_Manager_services|AM]].


{| class="wikitable" border="1"
{| class="wikitable" border="1"
Line 163: Line 229:
This is "nn::hdcp::IHdcpController".
This is "nn::hdcp::IHdcpController".


Added with [4.0.0+].
This was added with [4.0.0+].


{| class="wikitable" border="1"
{| class="wikitable" border="1"
Line 180: Line 246:
= mm:u =
= mm:u =
This is "nn::mmnv::IRequest".
This is "nn::mmnv::IRequest".
NVIDIA multimedia (NvMM) platform service.


{| class="wikitable" border="1"
{| class="wikitable" border="1"
Line 232: Line 296:
|-
|-
| 3 || [[#vi:s|GetDisplayServiceWithProxyNameExchange]]
| 3 || [[#vi:s|GetDisplayServiceWithProxyNameExchange]]
|-
|}
|}


Line 251: Line 314:
|-
|-
| 3 || [[#vi:m|GetDisplayServiceWithProxyNameExchange]]
| 3 || [[#vi:m|GetDisplayServiceWithProxyNameExchange]]
|-
|}
|}


Line 761: Line 823:
|}
|}


== Ambient Light Sensor Notes ==
== GetAmbientLightSensorValue ==
The BH1730 outputs 2 values. Visible light and IR light. This is then calculated through an algorithm that checks for Gain, Measurement time, filter qualities and ouputs lux (max correct measurement of 100K lux).
No input. Outputs lux in float.
The default values are Gain 64x and ITIME of 38 (256 - 218). This allows for a max lux value of 17972 lux when visible light value is maximum and IR light is 0. When both of them are on their limit, the output is 1192 lux.
The sensor is fully configurable.


== GetAmbientLightSensorValue ==
[5.0.0+] Now returns an output [[#AmbientLightSensorValue]].
No input. Before 5.x, outputs lux in float. (5.0.0+) Returns an output struct:
{| class="wikitable" border="1"
|-
! Offset || Size || Description
|-
| 0x0 || 0x4 || bOverLimit. (u32) Equals to 1 if visible or IR light data is over 65534.
|-
| 0x4 || 0x4 || fLux. (float) Value in lux from the ambient light sensor.
|}
Note: if bOverLimit=1 and the default ALS configuration is used, the measurement of fLux should not be considered and the actual max value depends on the type of light. Ranges from 12.5K - 17.5K.


== GetCurrentBrightnessSetting ==
== GetCurrentBrightnessSetting ==
Line 826: Line 876:


Can be "Default", "External", "[https://en.wikipedia.org/wiki/Extended_Display_Identification_Data Edid]", "Internal" or "Null".
Can be "Default", "External", "[https://en.wikipedia.org/wiki/Extended_Display_Identification_Data Edid]", "Internal" or "Null".
= 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]].


= Parcel =
= Parcel =
Line 842: Line 897:
| 0x10 || ? || FlattenedBinder
| 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 ==
== ParcelData ==
Line 873: Line 923:
This normally contains an u32 with value 0?
This normally contains an u32 with value 0?


= Resolution handling =
= AmbientLightSensorValue =
{| class="wikitable" border="1"
|-
! Offset || Size || Description
|-
| 0x0 || 0x4 || bOverLimit. (u32) Equals to 1 if visible or IR light data is over 65534.
|-
| 0x4 || 0x4 || fLux. (float) Value in lux from the ambient light sensor.
|}
Note: if bOverLimit=1 and the default ALS configuration is used, the measurement of fLux should not be considered and the actual max value depends on the type of light. Ranges from 12.5K - 17.5K.
 
= 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]].
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]].
= Ambient Light Sensor Notes =
The BH1730 outputs 2 values. Visible light and IR light. This is then calculated through an algorithm that checks for Gain, Measurement time, filter qualities and ouputs lux (max correct measurement of 100K lux).
The default values are Gain 64x and ITIME of 38 (256 - 218). This allows for a max lux value of 17972 lux when visible light value is maximum and IR light is 0. When both of them are on their limit, the output is 1192 lux.
The sensor is fully configurable.


[[Category:Services]]
[[Category:Services]]