Display services: Difference between revisions

No edit summary
(15 intermediate revisions by 2 users not shown)
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.
| 1001 || [2.0.0-4.1.0] [[#RequestTakingScreenShot]]
|-
|-
| [2.0.0-4.1.0] 1002 || RequestTakingScreenShotWithTimeout || Takes a total of 0x18-bytes of input, no output.
| 1002 || [2.0.0-4.1.0] [[#RequestTakingScreenShotWithTimeout]]
|-
|-
| [3.0.0-4.1.0] 1003 || RequestTakingScreenShotEx || Takes a total of 0x58-bytes of input, no output.
| 1003 || [3.0.0-4.1.0] [[#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]] ||
| 1100 || [18.0.0+]  
|-
|-
| 1106 || [4.0.0+] ? ||
| 1101 || [4.0.0+] [[#SetupOverlayMovieThumbnail]]
|-
|-
| 1107 || [4.0.0+] ? ||
| 1106 || [4.0.0+]
|-
|-
| 1201 || [3.0.0+] OpenRawScreenShotReadStream || Takes a total of 0x10-bytes of input, returns a total of 0x18-bytes of output.
| 1107 || [4.0.0+]
|-
|-
| 1202 || [3.0.0+] CloseRawScreenShotReadStream || No input/output.
| 1108 || [18.0.0+]
|-
|-
| 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.
| 1201 || [3.0.0+] [[#OpenRawScreenShotReadStream]]
|-
|-
| 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.
| 1202 || [3.0.0+] [[#CloseRawScreenShotReadStream]]
|-
| 1203 || [3.0.0+] [[#ReadRawScreenShotReadStream]]
|-
| 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 74:


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 131:


'''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 140:


'''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 117: Line 185:
|-
|-
| 208 || [5.0.0+] SaveScreenShotOfMovieEx1
| 208 || [5.0.0+] SaveScreenShotOfMovieEx1
|-
| 1000 || [13.0.0+]
|}
|}


Line 122: Line 192:
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 154: Line 226:
| 6 || [2.0.0+] CancelCurrentCall
| 6 || [2.0.0+] CancelCurrentCall
|-
|-
| 100 || [4.0.0+] GetHdcpServiceObject
| 100 || [4.0.0+] [[#GetHdcpServiceObject]]
|}
|}


GetHdcpServiceObject: No input, returns a [[#IHdcpController]].
== GetHdcpServiceObject ==
No input. Returns a [[#IHdcpController]].


= IHdcpController =
= IHdcpController =
This is "nn::hdcp::IHdcpController".
This is "nn::hdcp::detail::IHdcpController".


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


{| class="wikitable" border="1"
{| class="wikitable" border="1"
Line 179: Line 252:
= 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 186: Line 257:
! Cmd || Name
! Cmd || Name
|-
|-
| 0 || InitializeOld
| 0 || [[#InitializeOld]]
|-
|-
| 1 || FinalizeOld
| 1 || [[#FinalizeOld]]
|-
|-
| 2 || SetAndWaitOld
| 2 || [[#SetAndWaitOld]]
|-
|-
| 3 || GetOld
| 3 || [[#GetOld]]
|-
|-
| 4 || Initialize
| 4 || [[#Initialize]]
|-
|-
| 5 || Finalize
| 5 || [[#Finalize]]
|-
|-
| 6 || SetAndWait
| 6 || [[#SetAndWait]]
|-
|-
| 7 || Get
| 7 || [[#Get]]
|}
|}
== InitializeOld ==
Takes an input [[#Module]], an input [[#Priority]] and an input u32 '''EventClearMode'''. No output.
== FinalizeOld ==
Takes an input [[#Module]]. No output.
== SetAndWaitOld ==
Takes an input [[#Module]] and two input [[#Setting]] '''Min''' and '''Max'''. No output.
== GetOld ==
Takes an input [[#Module]]. Returns an output [[#Setting]] '''Current'''.
== Initialize ==
Same as [[#InitializeOld]], but returns an output u32 '''RequestId'''.
== Finalize ==
Same as [[#FinalizeOld]], but takes an input u32 '''RequestId''' instead of an input [[#Module]].
== SetAndWait ==
Same as [[#SetAndWaitOld]], but takes an input u32 '''RequestId''' instead of an input [[#Module]].
== Get ==
Same as [[#GetOld]], but takes an input u32 '''RequestId''' instead of an input [[#Module]].


= vi:u =
= vi:u =
Line 231: Line 326:
|-
|-
| 3 || [[#vi:s|GetDisplayServiceWithProxyNameExchange]]
| 3 || [[#vi:s|GetDisplayServiceWithProxyNameExchange]]
|-
|}
|}


Line 251: Line 345:
| 3 || [[#vi:m|GetDisplayServiceWithProxyNameExchange]]
| 3 || [[#vi:m|GetDisplayServiceWithProxyNameExchange]]
|-
|-
| 100 || [16.0.0+] PrepareFatal
|-
| 101 || [16.0.0+] ShowFatal
|-
| 102 || [16.0.0+] DrawFatalRectangle
|-
| 103 || [16.0.0+] DrawFatalText32
|}
|}


Line 424: Line 525:
| 2209 || SetLayerAlpha
| 2209 || SetLayerAlpha
|-
|-
| 2210 || [11.0.0+] SetLayerPositionAndSize
| 2210 || [11.0.0-11.0.1] SetLayerPositionAndSize
|-
|-
| 2312 || [1.0.0-6.2.0] CreateStrayLayer
| 2312 || [1.0.0-6.2.0] CreateStrayLayer
Line 496: Line 597:
| 8258 || [5.0.0+] CancelSharedFrameBuffer
| 8258 || [5.0.0+] CancelSharedFrameBuffer
|-
|-
| 9000 || [11.0.0+] GetDp2hdmiController
| 9000 || [11.0.0+] [[#GetDp2hdmiController]]
|}
|}


Line 521: Line 622:
| 4 || StartFirmwareUpdateWithSpecifiedImage
| 4 || StartFirmwareUpdateWithSpecifiedImage
|-
|-
| 5 || OverwriteFirmware
| 5 || GetFirmwareUpdateState ([11.0.0-11.0.1] OverwriteFirmware)
|-
|-
| 6 || OverwriteFirmwareWithSpecifiedImage
| 6 || ResetDevice ([11.0.0-11.0.1] OverwriteFirmwareWithSpecifiedImage)
|-
|-
| 7 || GetFirmwareUpdateState
| 7 || [16.0.0+] StartBootFirmwareUpdate ([11.0.0-11.0.1] GetFirmwareUpdateState)
|-
|-
| 8 || ResetDevice
| 8 || [16.0.0+] StartBootFirmwareUpdateWithSpecifiedImage ([11.0.0-11.0.1] ResetDevice)
|-
| 9 || [17.0.0+] GetBootFirmwareVersion
|}
|}


Line 560: Line 663:
|-
|-
| 2055 || DestroyIndirectConsumerEndPoint
| 2055 || DestroyIndirectConsumerEndPoint
|-
| 2060 || [16.0.0+] CreateWatermarkCompositor
|-
| 2062 || [16.0.0+] SetWatermarkText
|-
| 2063 || [16.0.0+] SetWatermarkLayerStacks
|-
|-
| 2300 || AcquireLayerTexturePresentingEvent
| 2300 || AcquireLayerTexturePresentingEvent
Line 587: Line 696:
| 4207 || [11.0.0+] ResetDisplayPanel
| 4207 || [11.0.0+] ResetDisplayPanel
|-
|-
| 4208 || [11.0.0+] EnableDisplayFatalError
| 4208 || [11.0.0+] [[#SetDisplayFatalErrorEnabled]] ([11.0.0-11.0.1] EnableDisplayFatalError)
|-
| 4209 || [12.0.0+] IsDisplayPanelOn
|-
|-
| 4300 || [11.0.0+] GetInternalPanelId
| 4300 || [11.0.0+] GetInternalPanelId
Line 616: Line 727:
|-
|-
| 6012 || [7.0.0+] DisableLayerAutoClearTransitionBuffer
| 6012 || [7.0.0+] DisableLayerAutoClearTransitionBuffer
|-
| 6013 || [13.0.0+] SetLayerOpacity
|-
| 6014 || [16.0.0+] AttachLayerWatermarkCompositor
|-
| 6015 || [16.0.0+] DetachLayerWatermarkCompositor
|-
|-
| 7000 || SetContentVisibility
| 7000 || SetContentVisibility
Line 673: Line 790:
| 8292 || [4.0.0+] FillDetachedSharedFrameBufferColor
| 8292 || [4.0.0+] FillDetachedSharedFrameBufferColor
|-
|-
| 8293 || [4.0.0+] GetDetachedSharedFrameBufferImage
| 8293 || [4.0.0+] [[#GetDetachedSharedFrameBufferImage]]
|-
|-
| 8294 || [4.0.0+] SetDetachedSharedFrameBufferImage
| 8294 || [4.0.0+] SetDetachedSharedFrameBufferImage
Line 689: Line 806:


[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.
[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.
=== GetDetachedSharedFrameBufferImage ===
Takes a total of 0x10-bytes of input and a type-0x6 output buffer, returns a total of 8-bytes of output.
[15.0.0+] Now takes a total of 0x28-bytes of input and a type-0x6 output buffer, returns a total of 8-bytes of output.
== SetDisplayFatalErrorEnabled ==
Takes an input u64, no output.
[12.0.0+] Takes an input bool and u64, no output.
= lbl =
This is "nn::lbl::detail::ILblController".
[11.0.0+] this was moved from [[PTM_services|ptm]].
{| class="wikitable" border="1"
|-
! Cmd || Name
|-
| 0 || SaveCurrentSetting
|-
| 1 || LoadCurrentSetting
|-
| 2 || SetCurrentBrightnessSetting
|-
| 3 || GetCurrentBrightnessSetting
|-
| 4 || ApplyCurrentBrightnessSettingToBacklight
|-
| 5 || GetBrightnessSettingAppliedToBacklight
|-
| 6 || SwitchBacklightOn
|-
| 7 || SwitchBacklightOff
|-
| 8 || GetBacklightSwitchStatus
|-
| 9 || EnableDimming
|-
| 10 || DisableDimming
|-
| 11 || IsDimmingEnabled
|-
| 12 || EnableAutoBrightnessControl
|-
| 13 || DisableAutoBrightnessControl
|-
| 14 || IsAutoBrightnessControlEnabled
|-
| 15 || SetAmbientLightSensorValue
|-
| 16 || [[#GetAmbientLightSensorValue]]
|-
| 17 || SetBrightnessReflectionDelayLevel
|-
| 18 || GetBrightnessReflectionDelayLevel
|-
| 19 || SetCurrentBrightnessMapping
|-
| 20 || GetCurrentBrightnessMapping
|-
| 21 || SetCurrentAmbientLightSensorMapping
|-
| 22 || GetCurrentAmbientLightSensorMapping
|-
| 23 || [3.0.0+] IsAmbientLightSensorAvailable
|-
| 24 || [3.0.0+] SetCurrentBrightnessSettingForVrMode
|-
| 25 || [3.0.0+] GetCurrentBrightnessSettingForVrMode
|-
| 26 || [3.0.0+] [[#EnableVrMode]]
|-
| 27 || [3.0.0+] [[#DisableVrMode]]
|-
| 28 || [3.0.0+] [[#IsVrModeEnabled]]
|-
| 29 || [7.0.0+] IsAutoBrightnessControlSupported
|}
== GetAmbientLightSensorValue ==
No input. Outputs lux in float.
[5.0.0+] Now returns an output [[#AmbientLightSensorValue]].
== GetCurrentBrightnessSetting ==
No input. Returns an output u32 int of the current backlight level.
== GetBrightnessSettingAppliedToBacklight ==
No input. Returns an output u32 int of the backlight level computed from the ambient light sensor.
== IsAutoBrightnessControlEnabled ==
No input. Returns an output u8 bool indicating whether auto brightness is enabled.
== EnableVrMode ==
No input/output. Used by [[AM_services#SetVrModeEnabled]].
Sets a global state field to 0x1.
== DisableVrMode ==
No input/output. Used by [[AM_services#SetVrModeEnabled]].
Sets the global state field used by [[#EnableVrMode]] to 0x0.
== IsVrModeEnabled ==
No input. Returns an output u8 bool set by the above commands.
= Module =
This is "nn::mmnv::Module".
{| class="wikitable" border="1"
|-
! Value || Name
|-
| 0 || Cpu
|-
| 1 || Gpu
|-
| 2 || Emc
|-
| 3 || SysBus
|-
| 4 || Mselect
|-
| 5 || Nvdec
|-
| 6 || Nvenc
|-
| 7 || Nvjpg
|-
| 8 || Test
|}
= Priority =
This is "nn::mmnv::Priority". This is an u32.
= Setting =
This is "nn::mmnv::Setting". This is an u32.


= DisplayInfo =
= DisplayInfo =
This is "nn::vi::DisplayInfo". This is a 0x60-byte structure.
{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-
! Offset || Size || Description
! Offset || Size || Description
|-
|-
| 0x0 || 0x40 || [[#DisplayName]]
| 0x0 || 0x40 || [[#DisplayName|Name]]
|-
|-
| 0x40 || 0x1 || Whether or not the display has a constrained number of layers.
| 0x40 || 0x1 || HasLayerLimit
|-
|-
| 0x41 || 0x7 || Padding/Reserved
| 0x41 || 0x7 || Reserved
|-
|-
| 0x48 || 0x8 || If this display has a constrained number of layers (0x40 is set), indicates the maximum number of layers.
| 0x48 || 0x8 || LayerCountMax
|-
|-
| 0x50 || 0x8 || Width in pixels
| 0x50 || 0x8 || LayerWidthPixelCountMax
|-  
|-  
| 0x58 || 0x8 || Height in pixels
| 0x58 || 0x8 || LayerHeightPixelCountMax
|}
|}
This is a 0x60-byte structure.


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 "nn::vi::DisplayName". This is a 0x40-byte block: a NUL-terminated string.


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 732: Line 993:
| 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 763: Line 1,019:
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.
 
= Notes =
== 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 ==
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]]