// Copyright 2020 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.ui.policy;

/// Manipulates global policy for display backlight. Serves as the main "front
/// end" interface for usage by UX components; other protocols (such as
/// fuchsia.ui.scenic.Session and fuchsia.hardware.display.Controller) act as
/// implementation.
///
/// Global Scope. All displays, in all display controllers, are affected uniformly.
///
/// Effect Timing. This protocol does not guarantee a deadline by which the
/// minimum value is applied to a display; it is best effort.
///
/// Multiple clients. This protocol does not guarantee unique access to
/// manipulate display backlight functionality.
///
/// Reference. Related to fuchsia.hardware.display.Controller.
@discoverable
protocol DisplayBacklight {
    /// Submits a new minimum color channel value for display backlight.
    ///
    /// The valid range for a minimum value is [0, 255] (inclusive).  For a new
    /// minimum value M, each color channel's range will be limited to [M, 255].
    ///
    /// Flow control: The caller is allowed at most one in-flight
    /// |SetMinimumRgb| at at time. Subsequent calls must wait until the
    /// acknowledgment returns. Non-compliance results in channel closure.
    SetMinimumRgb(struct {
        minimum_rgb uint8;
    }) -> ();
};
