// Copyright 2022 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.display.internal;

using zx;

/// `DisplayPower` is an internal service that controls the power state of all
/// display devices.
@discoverable
protocol DisplayPower {
    /// Set the power state of all connected display devices to `power_on`.
    ///
    /// It succeeds when all connected displays are turned on or off; once
    /// display devices are turned off, `fuchsia.hardware.display.Controller`
    /// clients will not receive `OnVsync` events anymore until they are turned
    /// on again.
    ///
    /// If any of the connected displays fails to turn on/off, it will return
    /// `ZX_ERR_NOT_SUPPORTED` error, and only the power states of the devices
    /// which support power state control will be changed.
    ///
    /// All display devices are turned on by default.
    ///
    // TODO(fxbug.dev/95196): Currently this method controls all displays and
    // only succeeds when all displays support DDIC power control. We should
    // improve this function to better support multi-display use cases.
    SetDisplayPower(struct {
        power_on bool;
    }) -> (struct {}) error zx.status;
};
