| // Copyright 2023 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| library fuchsia.hardware.display; |
| |
| using fuchsia.images2; |
| using fuchsia.hardware.display.types; |
| |
| /// Describes an operational mode for a display device attached to the system. |
| /// |
| /// The operational parameters that make up a mode description must be updated |
| /// atomically, using a resource-intensive "mode setting" operation. Parameters |
| /// that can be changed quickly, such as brightness and contrast, do not belong |
| /// in a mode description. |
| type Mode = struct { |
| /// Number of pixels on a horizontal line of the displayed image. |
| /// |
| /// This describes the image data sent to the display, which is also called |
| /// the "active area" or "active pixels" in raster scan terminology. Despite |
| /// the name, some of the "active pixels" may not actually be shown to the |
| /// user, for example due to corners or notches. |
| horizontal_resolution uint32; |
| |
| /// Number of horizontal lines that make up a displayed image. |
| /// |
| /// This describes the image data sent to the display, which is also called |
| /// the "active area" or "active pixels" in raster scan terminology. Despite |
| /// the name, some of the "active pixels" may not actually be shown to the |
| /// user, for example due to corners or notches. |
| vertical_resolution uint32; |
| |
| /// Number of images transmitted to the display in 100 seconds. |
| /// |
| /// This is the display's vertical refresh rate, in centihertz (0.01 Hz). |
| refresh_rate_e2 uint32; |
| |
| /// Bit field of mode attributes. |
| /// |
| /// This field is currently unused. It will be used for binary attributes, |
| /// such as whether a display mode is interlaced. |
| flags uint32; |
| }; |
| |
| /// Description for a display device attached to the system. |
| /// |
| /// Display devices include external monitors and internal panels. |
| type Info = struct { |
| /// Uniquely identifies the display in a Controller connection. |
| /// |
| /// See [`fuchsia.hardware.display.types/DisplayId`]. |
| id fuchsia.hardware.display.types.DisplayId; |
| |
| /// Operational modes supported by the described display device. |
| /// |
| /// The first entry is the device's preferred mode. |
| modes vector<Mode>:MAX; |
| |
| /// Pixel formats that can be directly displayed on the attached display. |
| /// |
| /// This field will be revised to better reflect the subtleties around |
| /// modern display hardware, such as multiple layer types, and around |
| /// pixel format modifiers, such as tiling and framebuffer compression |
| /// formats. See https://fxbug.dev/42072347 and https://fxbug.dev/42076907. |
| /// |
| /// The formats listed here reflect support from both the display engine |
| /// hardware and the display device. This means some of the formats may be |
| /// subject to conversion inside the display engine hardware. |
| /// |
| /// The first entry in the list is the display's preferred format. This |
| /// format is likely to be supported for transferring data between the |
| /// display engine and the display hardware, and not require any conversion |
| /// inside the display engine. |
| /// |
| /// Format conversion inside the display engine is likely to be |
| /// significantly more power-efficient than a GPU render stage or software |
| /// conversion. So, using any format in this list is better than using the |
| /// GPU to convert to the preferred format. |
| pixel_format vector<fuchsia.images2.PixelFormat>:MAX; |
| |
| /// Part of a display device identifier that persists across boot cycles. |
| /// |
| /// If the `manufacturer_name`, `monitor_name` and `monitor_serial` fields |
| /// are all non-empty, they make up an identifier that is likely to be |
| /// unique to the attached device, and is highly unlikely to change across |
| /// boot cycles. Software that needs to identify displays (for example, to |
| /// honor display-specific preferences) should use this triplet. |
| manufacturer_name string:IDENTIFIER_MAX_LEN; |
| |
| /// Part of a display device identifier that persists across boot cycles. |
| /// |
| /// See `manufacturer_name` for details. |
| monitor_name string:IDENTIFIER_MAX_LEN; |
| |
| /// Part of a display device identifier that persists across boot cycles. |
| /// |
| /// See `manufacturer_name` for details. |
| monitor_serial string:IDENTIFIER_MAX_LEN; |
| |
| /// Physical horizontal size of the displayed image area, in millimeters. |
| /// |
| /// If `using_fallback_size` is true, the value is a best guess from the |
| /// driver. Otherwise, the value here is reported by the display device. |
| horizontal_size_mm uint32; |
| |
| /// Physical vertical size of the displayed image area, in millimeters. |
| /// |
| /// See `horizontal_size_mm` for more details. |
| vertical_size_mm uint32; |
| |
| /// True if the driver does not have the display's physical sizing info. |
| using_fallback_size bool; |
| }; |
| |
| const IDENTIFIER_MAX_LEN uint32 = 128; |