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 | This is "nn::capsrv::sf::IScreenShotControlService". | ||
This was added with [2.0.0+]. | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
! Cmd || Name | ! Cmd || Name | ||
|- | |- | ||
| 1 || [[#CaptureRawImage]] | | 1 || [[#CaptureRawImage]] | ||
|- | |- | ||
| 2 || [[#CaptureRawImageWithTimeout]] | | 2 || [[#CaptureRawImageWithTimeout]] | ||
|- | |- | ||
| 3 || [5.0.0+] AttachSharedBuffer | | 3 || [5.0.0+] [[#AttachSharedBuffer]] | ||
|- | |- | ||
| 5 || [5.0.0+] CaptureRawImageToAttachedSharedBuffer | | 5 || [5.0.0+] [[#CaptureRawImageToAttachedSharedBuffer]] | ||
|- | |- | ||
| 210 || [6.0.0+] | | 210 || [6.0.0+] | ||
|- | |- | ||
| [2.0.0-4.1.0] 1001 || RequestTakingScreenShot | | [2.0.0-4.1.0] 1001 || [[#RequestTakingScreenShot]] | ||
|- | |- | ||
| [2.0.0-4.1.0] 1002 || RequestTakingScreenShotWithTimeout | | [2.0.0-4.1.0] 1002 || [[#RequestTakingScreenShotWithTimeout]] | ||
|- | |- | ||
| [3.0.0-4.1.0] 1003 || RequestTakingScreenShotEx | | [3.0.0-4.1.0] 1003 || [[#RequestTakingScreenShotEx]] | ||
|- | |- | ||
| 1004 || [5.0.0+] RequestTakingScreenShotEx1 | | 1004 || [5.0.0+] [[#RequestTakingScreenShotEx1]] | ||
|- | |- | ||
| 1009 || [5.0.0+] CancelTakingScreenShot | | 1009 || [5.0.0+] [[#CancelTakingScreenShot]] | ||
|- | |- | ||
| 1010 || [5.0.0+] SetTakingScreenShotCancelState | | 1010 || [5.0.0+] [[#SetTakingScreenShotCancelState]] | ||
|- | |- | ||
| 1011 || NotifyTakingScreenShotRefused | | 1011 || [[#NotifyTakingScreenShotRefused]] | ||
|- | |- | ||
| 1012 || NotifyTakingScreenShotFailed | | 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 | | 1201 || [3.0.0+] [[#OpenRawScreenShotReadStream]] | ||
|- | |- | ||
| 1202 || [3.0.0+] CloseRawScreenShotReadStream | | 1202 || [3.0.0+] [[#CloseRawScreenShotReadStream]] | ||
|- | |- | ||
| 1203 || [3.0.0+] ReadRawScreenShotReadStream | | 1203 || [3.0.0+] [[#ReadRawScreenShotReadStream]] | ||
|- | |- | ||
| 1204 || [9.0.0+] | | 1204 || [9.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. | ||
== 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 | 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] | 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". | ||
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". | ||
{| 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: | ||
|} | |} | ||
== | == GetAmbientLightSensorValue == | ||
No input. Outputs lux in float. | |||
[5.0.0+] Now returns an output [[#AmbientLightSensorValue]]. | |||
== 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 | ||
|} | |} | ||
== ParcelData == | == ParcelData == | ||
Line 873: | Line 923: | ||
This normally contains an u32 with value 0? | This normally contains an u32 with value 0? | ||
= Resolution | = 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]] |