blob: c625b1e1eef72112659ea37ac9c40c23c7408572 [file] [log] [blame]
<?xml version="1.0" encoding="UTF-8"?>
<!--
Copyright (C) 2020 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<!--
This defines the format of the XML file used to provide static configuration values
for the displays on a device.
It is parsed in com/android/server/display/DisplayDeviceConfig.java
-->
<xs:schema version="2.0"
elementFormDefault="qualified"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="displayConfiguration">
<xs:complexType>
<xs:sequence>
<xs:element type ="xs:string" name="name">
<xs:annotation name="nullable"/>
<xs:annotation name="final"/>
</xs:element>
<xs:element type="densityMapping" name="densityMapping" minOccurs="0" maxOccurs="1">
<xs:annotation name="nullable"/>
<xs:annotation name="final"/>
</xs:element>
<xs:element type="nitsMap" name="screenBrightnessMap">
<xs:annotation name="nonnull"/>
<xs:annotation name="final"/>
</xs:element>
<xs:element type="nonNegativeDecimal" name="screenBrightnessDefault">
<xs:annotation name="nonnull"/>
<xs:annotation name="final"/>
</xs:element>
<xs:element type="thermalThrottling" name="thermalThrottling">
<xs:annotation name="nonnull"/>
<xs:annotation name="final"/>
</xs:element>
<xs:element type="powerThrottlingConfig" name="powerThrottlingConfig" minOccurs="0"
maxOccurs="1"/>
<xs:element type="luxThrottling" name="luxThrottling" minOccurs="0"
maxOccurs="1"/>
<xs:element type="highBrightnessMode" name="highBrightnessMode" minOccurs="0"
maxOccurs="1"/>
<xs:element name="hdrBrightnessConfig" type="hdrBrightnessConfig"
minOccurs="0" maxOccurs="1">
<xs:annotation name="nullable"/>
<xs:annotation name="final"/>
</xs:element>
<xs:element type="displayQuirks" name="quirks" minOccurs="0" maxOccurs="1"/>
<xs:element type="autoBrightness" name="autoBrightness" minOccurs="0"
maxOccurs="1"/>
<xs:element type="refreshRateConfigs" name="refreshRate" minOccurs="0"
maxOccurs="1"/>
<xs:element type="nonNegativeDecimal" name="screenBrightnessRampFastDecrease">
<xs:annotation name="final"/>
</xs:element>
<xs:element type="nonNegativeDecimal" name="screenBrightnessRampFastIncrease">
<xs:annotation name="final"/>
</xs:element>
<xs:element type="nonNegativeDecimal" name="screenBrightnessRampSlowDecrease">
<xs:annotation name="final"/>
</xs:element>
<xs:element type="nonNegativeDecimal" name="screenBrightnessRampSlowIncrease">
<xs:annotation name="final"/>
</xs:element>
<!-- Ramp speed used to decrease the screen brightness when in idle mode.
In framework brightness units per second. Must exist with
screenBrightnessRampSlowIncreaseIdle-->
<xs:element type="nonNegativeDecimal" name="screenBrightnessRampSlowDecreaseIdle">
<xs:annotation name="final"/>
</xs:element>
<!-- Ramp speed used to decrease the screen brightness when in idle mode.
In framework brightness units per second. Must exist with
screenBrightnessRampSlowDecreaseIdle-->
<xs:element type="nonNegativeDecimal" name="screenBrightnessRampSlowIncreaseIdle">
<xs:annotation name="final"/>
</xs:element>
<!-- Maximum time in milliseconds that a brightness increase animation
can take. -->
<xs:element type="xs:nonNegativeInteger" name="screenBrightnessRampIncreaseMaxMillis">
<xs:annotation name="final"/>
</xs:element>
<!-- Maximum time in milliseconds that a brightness decrease animation
can take. -->
<xs:element type="xs:nonNegativeInteger" name="screenBrightnessRampDecreaseMaxMillis">
<xs:annotation name="final"/>
</xs:element>
<!-- Maximum time in milliseconds that a brightness increase animation
can take in idle mode. -->
<xs:element type="xs:nonNegativeInteger" name="screenBrightnessRampIncreaseMaxIdleMillis">
<xs:annotation name="final"/>
</xs:element>
<!-- Maximum time in milliseconds that a brightness decrease animation
can take in idle mode. -->
<xs:element type="xs:nonNegativeInteger" name="screenBrightnessRampDecreaseMaxIdleMillis">
<xs:annotation name="final"/>
</xs:element>
<xs:element type="sensorDetails" name="lightSensor">
<xs:annotation name="final"/>
</xs:element>
<xs:element type="sensorDetails" name="screenOffBrightnessSensor">
<xs:annotation name="final"/>
</xs:element>
<xs:element type="sensorDetails" name="proxSensor">
<xs:annotation name="final"/>
</xs:element>
<!-- Length of the ambient light horizon used to calculate the long & short term
estimates of ambient light in milliseconds.-->
<xs:element type="xs:nonNegativeInteger" name="ambientLightHorizonLong">
<xs:annotation name="final"/>
</xs:element>
<xs:element type="xs:nonNegativeInteger" name="ambientLightHorizonShort">
<xs:annotation name="final"/>
</xs:element>
<!-- Set of thresholds that dictate the change needed for screen brightness
adaptations -->
<xs:element type="thresholds" name="displayBrightnessChangeThresholds">
<xs:annotation name="nonnull"/>
<xs:annotation name="final"/>
</xs:element>
<!-- Set of thresholds that dictate the change needed for ambient brightness
adaptations -->
<xs:element type="thresholds" name="ambientBrightnessChangeThresholds">
<xs:annotation name="nonnull"/>
<xs:annotation name="final"/>
</xs:element>
<!-- Set of thresholds that dictate the change needed for screen brightness
adaptations while in idle mode -->
<xs:element type="thresholds" name="displayBrightnessChangeThresholdsIdle" minOccurs="0" maxOccurs="1">
<xs:annotation name="final"/>
</xs:element>
<!-- Set of thresholds that dictate the change needed for ambient brightness
adaptations while in idle mode -->
<xs:element type="thresholds" name="ambientBrightnessChangeThresholdsIdle" minOccurs="0" maxOccurs="1">
<xs:annotation name="final"/>
</xs:element>
<!-- Table that translates sensor values from the screenOffBrightnessSensor
to lux values; -1 means the lux reading is not available. -->
<xs:element type="integer-array" name="screenOffBrightnessSensorValueToLux">
<xs:annotation name="final"/>
</xs:element>
<!-- The version of the Universal Stylus Initiative
(USI, https://universalstylus.org/) protocol supported by the display, if any. -->
<xs:element type="usiVersion" name="usiVersion">
<xs:annotation name="final"/>
</xs:element>
<!-- Maximum screen brightness setting when screen brightness capped in
Wear Bedtime mode. This must be a non-negative decimal within the range defined by
the first and the last brightness value in screenBrightnessMap. -->
<xs:element type="nonNegativeDecimal" name="screenBrightnessCapForWearBedtimeMode">
<xs:annotation name="final"/>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<!-- Type definitions -->
<xs:complexType name="displayQuirks">
<xs:sequence>
<xs:element name="quirk" type="xs:string" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="luxThrottling">
<xs:sequence>
<xs:element name="brightnessLimitMap" type="brightnessLimitMap"
maxOccurs="unbounded">
<xs:annotation name="nonnull"/>
<xs:annotation name="final"/>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="brightnessLimitMap">
<xs:sequence>
<xs:element name="type" type="PredefinedBrightnessLimitNames">
<xs:annotation name="nonnull"/>
<xs:annotation name="final"/>
</xs:element>
<!-- lux level from light sensor to screen brightness recommended max value map.
Screen brightness recommended max value is to highBrightnessMode.transitionPoint and must be below that -->
<xs:element name="map" type="nonNegativeFloatToFloatMap">
<xs:annotation name="nonnull"/>
<xs:annotation name="final"/>
</xs:element>
</xs:sequence>
</xs:complexType>
<!-- Predefined type names as defined by DisplayDeviceConfig.BrightnessLimitMapType -->
<xs:simpleType name="PredefinedBrightnessLimitNames">
<xs:restriction base="xs:string">
<xs:enumeration value="default"/>
<xs:enumeration value="adaptive"/>
</xs:restriction>
</xs:simpleType>
<xs:complexType name="highBrightnessMode">
<xs:all>
<xs:element name="transitionPoint" type="nonNegativeDecimal" minOccurs="1"
maxOccurs="1">
<xs:annotation name="nonnull"/>
<xs:annotation name="final"/>
</xs:element>
<xs:element name="minimumLux" type="nonNegativeDecimal" minOccurs="1" maxOccurs="1">
<xs:annotation name="nonnull"/>
<xs:annotation name="final"/>
</xs:element>
<xs:element name="timing" type="hbmTiming" minOccurs="1" maxOccurs="1"/>
<xs:element type="refreshRateRange" name="refreshRate" minOccurs="0" maxOccurs="1">
<xs:annotation name="nullable"/>
<xs:annotation name="final"/>
</xs:element>
<xs:element name="allowInLowPowerMode" type="xs:boolean" minOccurs="0" maxOccurs="1">
<xs:annotation name="nonnull"/>
<xs:annotation name="final"/>
</xs:element>
<!-- The minimum HDR video size at which high-brightness-mode is allowed to operate.
Default is 0.5 if not specified-->
<xs:element name="minimumHdrPercentOfScreen" type="nonNegativeDecimal"
minOccurs="0" maxOccurs="1">
<xs:annotation name="nullable"/>
<xs:annotation name="final"/>
</xs:element>
<!-- This LUT specifies how to boost HDR brightness at given SDR brightness (nits). -->
<xs:element type="sdrHdrRatioMap" name="sdrHdrRatioMap" minOccurs="0" maxOccurs="1">
<xs:annotation name="nullable"/>
<xs:annotation name="final"/>
</xs:element>
</xs:all>
<xs:attribute name="enabled" type="xs:boolean" use="optional"/>
</xs:complexType>
<xs:complexType name="hbmTiming">
<xs:all>
<xs:element name="timeWindowSecs" type="xs:nonNegativeInteger" minOccurs="1"
maxOccurs="1">
<xs:annotation name="nonnull"/>
<xs:annotation name="final"/>
</xs:element>
<xs:element name="timeMaxSecs" type="xs:nonNegativeInteger" minOccurs="1" maxOccurs="1">
<xs:annotation name="nonnull"/>
<xs:annotation name="final"/>
</xs:element>
<xs:element name="timeMinSecs" type="xs:nonNegativeInteger" minOccurs="1" maxOccurs="1">
<xs:annotation name="nonnull"/>
<xs:annotation name="final"/>
</xs:element>
</xs:all>
</xs:complexType>
<!-- brightness config for HDR content -->
<xs:complexType name="hdrBrightnessConfig">
<!-- lux level from light sensor to screen brightness recommended max value map. -->
<xs:element name="brightnessMap" type="nonNegativeFloatToFloatMap">
<xs:annotation name="nonnull"/>
<xs:annotation name="final"/>
</xs:element>
<!-- Debounce for brightness increase in millis -->
<xs:element name="brightnessIncreaseDebounceMillis" type="xs:nonNegativeInteger">
<xs:annotation name="final"/>
</xs:element>
<!-- Debounce for brightness decrease in millis -->
<xs:element name="brightnessDecreaseDebounceMillis" type="xs:nonNegativeInteger">
<xs:annotation name="final"/>
</xs:element>
<!-- Animation speed for brightness increase. In framework brightness units per second. -->
<xs:element name="screenBrightnessRampIncrease" type="nonNegativeDecimal">
<xs:annotation name="final"/>
</xs:element>
<!-- Animation speed for brightness decrease. In framework brightness units per second. -->
<xs:element name="screenBrightnessRampDecrease" type="nonNegativeDecimal">
<xs:annotation name="final"/>
</xs:element>
</xs:complexType>
<!-- Maps to PowerManager.THERMAL_STATUS_* values. -->
<xs:simpleType name="thermalStatus">
<xs:restriction base="xs:string">
<xs:enumeration value="none"/>
<xs:enumeration value="light"/>
<xs:enumeration value="moderate"/>
<xs:enumeration value="severe"/>
<xs:enumeration value="critical"/>
<xs:enumeration value="emergency"/>
<xs:enumeration value="shutdown"/>
</xs:restriction>
</xs:simpleType>
<xs:complexType name="thermalThrottling">
<xs:sequence>
<xs:element type="brightnessThrottlingMap" name="brightnessThrottlingMap" maxOccurs="unbounded">
<xs:annotation name="final"/>
</xs:element>
<xs:element type="refreshRateThrottlingMap" name="refreshRateThrottlingMap" maxOccurs="unbounded">
<xs:annotation name="final"/>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="refreshRateThrottlingMap">
<xs:attribute name="id" type="xs:string" />
<xs:sequence>
<xs:element name="refreshRateThrottlingPoint" type="refreshRateThrottlingPoint" maxOccurs="unbounded">
<xs:annotation name="nonnull"/>
<xs:annotation name="final"/>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="refreshRateThrottlingPoint">
<xs:sequence>
<xs:element type="thermalStatus" name="thermalStatus">
<xs:annotation name="nonnull"/>
<xs:annotation name="final"/>
</xs:element>
<xs:element type="refreshRateRange" name="refreshRateRange">
<xs:annotation name="nonnull"/>
<xs:annotation name="final"/>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="brightnessThrottlingMap">
<xs:sequence>
<xs:element name="brightnessThrottlingPoint" type="brightnessThrottlingPoint" maxOccurs="unbounded" minOccurs="1">
<xs:annotation name="nonnull"/>
<xs:annotation name="final"/>
</xs:element>
</xs:sequence>
<xs:attribute name="id" type="xs:string"/>
</xs:complexType>
<xs:complexType name="brightnessThrottlingPoint">
<xs:sequence>
<xs:element type="thermalStatus" name="thermalStatus">
<xs:annotation name="nonnull"/>
<xs:annotation name="final"/>
</xs:element>
<xs:element type="nonNegativeDecimal" name="brightness">
<xs:annotation name="nonnull"/>
<xs:annotation name="final"/>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="powerThrottlingMap">
<xs:sequence>
<xs:element name="powerThrottlingPoint" type="powerThrottlingPoint" maxOccurs="unbounded" minOccurs="1">
<xs:annotation name="nonnull"/>
<xs:annotation name="final"/>
</xs:element>
</xs:sequence>
<xs:attribute name="id" type="xs:string"/>
</xs:complexType>
<xs:complexType name="powerThrottlingPoint">
<xs:sequence>
<xs:element type="thermalStatus" name="thermalStatus">
<xs:annotation name="nonnull"/>
<xs:annotation name="final"/>
</xs:element>
<xs:element type="nonNegativeDecimal" name="powerQuotaMilliWatts">
<xs:annotation name="nonnull"/>
<xs:annotation name="final"/>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="powerThrottlingConfig">
<xs:element type="nonNegativeDecimal" name="brightnessLowestCapAllowed">
<xs:annotation name="nonnull"/>
<xs:annotation name="final"/>
</xs:element>
<xs:element name="pollingWindowMillis" type="xs:nonNegativeInteger">
<xs:annotation name="nonnull"/>
<xs:annotation name="final"/>
</xs:element>
<xs:element type="powerThrottlingMap" name="powerThrottlingMap" maxOccurs="unbounded">
<xs:annotation name="final"/>
</xs:element>
</xs:complexType>
<xs:complexType name="nitsMap">
<xs:sequence>
<xs:element name="point" type="point" maxOccurs="unbounded" minOccurs="2">
<xs:annotation name="nonnull"/>
<xs:annotation name="final"/>
</xs:element>
</xs:sequence>
<!-- valid value of interpolation if specified: linear -->
<xs:attribute name="interpolation" type="xs:string" use="optional"/>
</xs:complexType>
<xs:complexType name="point">
<xs:sequence>
<xs:element type="nonNegativeDecimal" name="value">
<xs:annotation name="nonnull"/>
<xs:annotation name="final"/>
</xs:element>
<xs:element type="nonNegativeDecimal" name="nits">
<xs:annotation name="nonnull"/>
<xs:annotation name="final"/>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="sdrHdrRatioMap">
<xs:sequence>
<xs:element name="point" type="sdrHdrRatioPoint" maxOccurs="unbounded" minOccurs="2">
<xs:annotation name="nonnull"/>
<xs:annotation name="final"/>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="sdrHdrRatioPoint">
<xs:sequence>
<xs:element type="nonNegativeDecimal" name="sdrNits">
<xs:annotation name="nonnull"/>
<xs:annotation name="final"/>
</xs:element>
<xs:element type="nonNegativeDecimal" name="hdrRatio">
<xs:annotation name="nonnull"/>
<xs:annotation name="final"/>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:simpleType name="nonNegativeDecimal">
<xs:restriction base="xs:decimal">
<xs:minInclusive value="0.0"/>
</xs:restriction>
</xs:simpleType>
<xs:complexType name="sensorDetails">
<xs:sequence>
<xs:element type="xs:string" name="type" minOccurs="0" maxOccurs="1">
<xs:annotation name="nullable"/>
<xs:annotation name="final"/>
</xs:element>
<xs:element type="xs:string" name="name" minOccurs="0" maxOccurs="1">
<xs:annotation name="nullable"/>
<xs:annotation name="final"/>
</xs:element>
<xs:element type="refreshRateRange" name="refreshRate" minOccurs="0" maxOccurs="1">
<xs:annotation name="nullable"/>
<xs:annotation name="final"/>
</xs:element>
<!-- list of supported modes when sensor is ON. Each point corresponds to one mode.
Mode format is : first = refreshRate, second = vsyncRate. E.g. :
<supportedModes>
<point>
<first>60</first> // refreshRate
<second>60</second> //vsyncRate
</point>
....
</supportedModes>
-->
<xs:element type="nonNegativeFloatToFloatMap" name="supportedModes" minOccurs="0">
<xs:annotation name="nullable"/>
<xs:annotation name="final"/>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="refreshRateRange">
<xs:sequence>
<xs:element type="xs:nonNegativeInteger" name="minimum" minOccurs="1" maxOccurs="1">
<xs:annotation name="final"/>
</xs:element>
<xs:element type="xs:nonNegativeInteger" name="maximum" minOccurs="1" maxOccurs="1">
<xs:annotation name="final"/>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="densityMapping">
<xs:sequence>
<xs:element name="density" type="density" maxOccurs="unbounded" minOccurs="1">
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="density">
<xs:sequence>
<xs:element type="xs:nonNegativeInteger" name="width">
<xs:annotation name="nonnull"/>
<xs:annotation name="final"/>
</xs:element>
<xs:element type="xs:nonNegativeInteger" name="height">
<xs:annotation name="nonnull"/>
<xs:annotation name="final"/>
</xs:element>
<xs:element type="xs:nonNegativeInteger" name="density">
<xs:annotation name="nonnull"/>
<xs:annotation name="final"/>
</xs:element>
</xs:sequence>
</xs:complexType>
<!-- Thresholds for brightness changes. -->
<xs:complexType name="thresholds">
<xs:sequence>
<!-- Brightening thresholds for active screen brightness mode. -->
<xs:element name="brighteningThresholds" type="brightnessThresholds" minOccurs="0"
maxOccurs="1" >
<xs:annotation name="nonnull"/>
<xs:annotation name="final"/>
</xs:element>
<!-- Darkening thresholds for active screen brightness mode. -->
<xs:element name="darkeningThresholds" type="brightnessThresholds" minOccurs="0"
maxOccurs="1" >
<xs:annotation name="nonnull"/>
<xs:annotation name="final"/>
</xs:element>
</xs:sequence>
</xs:complexType>
<!-- Brightening and darkening minimum change thresholds. -->
<xs:complexType name="brightnessThresholds">
<!-- Minimum brightness change needed. -->
<xs:element name="minimum" type="nonNegativeDecimal" minOccurs="0" maxOccurs="1" >
<xs:annotation name="nonnull"/>
<xs:annotation name="final"/>
</xs:element>
<xs:sequence>
<!-- Thresholds as tenths of percent of current brightness level, at each level of
brightness -->
<xs:element name="brightnessThresholdPoints" type="thresholdPoints" maxOccurs="1" minOccurs="0">
<xs:annotation name="final"/>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="thresholdPoints">
<xs:sequence>
<xs:element type="thresholdPoint" name="brightnessThresholdPoint" maxOccurs="unbounded" minOccurs="1">
<xs:annotation name="nonnull"/>
<xs:annotation name="final"/>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="thresholdPoint">
<xs:sequence>
<xs:element type="nonNegativeDecimal" name="threshold">
<xs:annotation name="nonnull"/>
<xs:annotation name="final"/>
</xs:element>
<xs:element type="nonNegativeDecimal" name="percentage">
<xs:annotation name="nonnull"/>
<xs:annotation name="final"/>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="autoBrightness">
<xs:attribute name="enabled" type="xs:boolean" use="optional" default="true"/>
<xs:sequence>
<!-- Sets the debounce for autoBrightness brightening in millis -->
<xs:element name="brighteningLightDebounceMillis" type="xs:nonNegativeInteger"
minOccurs="0" maxOccurs="1">
<xs:annotation name="final"/>
</xs:element>
<!-- Sets the debounce for autoBrightness darkening in millis -->
<xs:element name="darkeningLightDebounceMillis" type="xs:nonNegativeInteger"
minOccurs="0" maxOccurs="1">
<xs:annotation name="final"/>
</xs:element>
<!-- Sets the debounce for autoBrightness brightening in millis while in idle mode -->
<xs:element name="brighteningLightDebounceIdleMillis" type="xs:nonNegativeInteger"
minOccurs="0" maxOccurs="1">
<xs:annotation name="final"/>
</xs:element>
<!-- Sets the debounce for autoBrightness darkening in millis while in idle mode -->
<xs:element name="darkeningLightDebounceIdleMillis" type="xs:nonNegativeInteger"
minOccurs="0" maxOccurs="1">
<xs:annotation name="final"/>
</xs:element>
<!-- Sets the brightness mapping of the desired screen brightness to the corresponding
lux for the current display -->
<xs:element name="luxToBrightnessMapping" type="luxToBrightnessMapping"
minOccurs="0" maxOccurs="1">
<xs:annotation name="final"/>
</xs:element>
</xs:sequence>
</xs:complexType>
<!-- Sets the list of display brightness points, each representing the desired screen brightness
in a certain lux environment.
The first value of each point is the lux value and the second value is the brightness value.
The first lux value must be 0.
The control points must be strictly increasing.
Example: if currentLux == the second lux value in the mapping then the brightness will be
determined by the second brightness value in the mapping. Spline interpolation is used
to determine the auto-brightness values for lux levels between these control points.
The brightness values must be non-negative decimals within the range between the first and
the last brightness values in screenBrightnessMap.
This is used in place of config_autoBrightnessLevels and config_autoBrightnessLcdBacklightValues
defined in the config XML resource.
-->
<xs:complexType name="luxToBrightnessMapping">
<xs:element name="map" type="nonNegativeFloatToFloatMap">
<xs:annotation name="nonnull"/>
<xs:annotation name="final"/>
</xs:element>
</xs:complexType>
<!-- Represents a point in the display brightness mapping, representing the lux level from the
light sensor to the desired screen brightness in nits at this level -->
<xs:complexType name="displayBrightnessPoint">
<xs:sequence>
<!-- The lux level from the light sensor. This must be a non-negative integer -->
<xs:element name="lux" type="xs:nonNegativeInteger"
minOccurs="1" maxOccurs="1">
<xs:annotation name="final"/>
</xs:element>
<!-- Desired screen brightness in nits corresponding to the suggested lux values.
The display brightness is defined as the measured brightness of an all-white image.
This must be a non-negative integer -->
<xs:element name="nits" type="nonNegativeDecimal"
minOccurs="1" maxOccurs="1">
<xs:annotation name="final"/>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="refreshRateConfigs">
<xs:element name="defaultRefreshRate" type="xs:nonNegativeInteger"
minOccurs="0" maxOccurs="1">
<xs:annotation name="final"/>
</xs:element>
<xs:element name="defaultPeakRefreshRate" type="xs:nonNegativeInteger"
minOccurs="0" maxOccurs="1">
<xs:annotation name="final"/>
</xs:element>
<xs:element name="refreshRateZoneProfiles" type="refreshRateZoneProfiles"
minOccurs="0" maxOccurs="1">
<xs:annotation name="final"/>
</xs:element>
<xs:element name="defaultRefreshRateInHbmHdr" type="xs:nonNegativeInteger"
minOccurs="0" maxOccurs="1">
<xs:annotation name="final"/>
</xs:element>
<xs:element name="defaultRefreshRateInHbmSunlight" type="xs:nonNegativeInteger"
minOccurs="0" maxOccurs="1">
<xs:annotation name="final"/>
</xs:element>
<xs:element name="lowerBlockingZoneConfigs" type="blockingZoneConfig"
minOccurs="0" maxOccurs="1">
<xs:annotation name="final"/>
</xs:element>
<xs:element name="higherBlockingZoneConfigs" type="blockingZoneConfig"
minOccurs="0" maxOccurs="1">
<xs:annotation name="final"/>
</xs:element>
</xs:complexType>
<xs:complexType name="refreshRateZoneProfiles">
<xs:sequence>
<xs:element name="refreshRateZoneProfile" type="refreshRateZone"
minOccurs="0" maxOccurs="unbounded">
<xs:annotation name="final"/>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="refreshRateZone">
<xs:attribute name="id" use="required" type="xs:string" />
<xs:element name="refreshRateRange" type="refreshRateRange">
<xs:annotation name="final"/>
</xs:element>
</xs:complexType>
<xs:complexType name="blockingZoneConfig">
<xs:element name="defaultRefreshRate" type="xs:nonNegativeInteger"
minOccurs="1" maxOccurs="1">
<xs:annotation name="final"/>
</xs:element>
<xs:element type ="xs:string" name="refreshRateThermalThrottlingId">
<xs:annotation name="nullable"/>
<xs:annotation name="final"/>
</xs:element>
<xs:element name="blockingZoneThreshold" type="blockingZoneThreshold"
minOccurs="1" maxOccurs="1">
<xs:annotation name="final"/>
</xs:element>
</xs:complexType>
<xs:complexType name="blockingZoneThreshold">
<xs:sequence>
<xs:element name="displayBrightnessPoint" type="displayBrightnessPoint"
minOccurs="1" maxOccurs="unbounded">
<xs:annotation name="final"/>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="integer-array">
<xs:sequence>
<xs:element name="item" type="xs:nonNegativeInteger" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="usiVersion">
<xs:element name="majorVersion" type="xs:nonNegativeInteger"
minOccurs="1" maxOccurs="1">
<xs:annotation name="final"/>
</xs:element>
<xs:element name="minorVersion" type="xs:nonNegativeInteger"
minOccurs="1" maxOccurs="1">
<xs:annotation name="final"/>
</xs:element>
</xs:complexType>
<!-- generic types -->
<xs:complexType name="nonNegativeFloatToFloatPoint">
<xs:sequence>
<xs:element name="first" type="nonNegativeDecimal">
<xs:annotation name="nonnull"/>
<xs:annotation name="final"/>
</xs:element>
<xs:element name="second" type="nonNegativeDecimal">
<xs:annotation name="nonnull"/>
<xs:annotation name="final"/>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="nonNegativeFloatToFloatMap">
<xs:sequence>
<xs:element name="point" type="nonNegativeFloatToFloatPoint" maxOccurs="unbounded">
<xs:annotation name="nonnull"/>
<xs:annotation name="final"/>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:schema>