// Copyright 2018 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.device.display;

// An interface for accessing and modifying display state.
[Discoverable]
interface Manager {
    // Retrieves the current brightness of the display. The brightness is
    // specified as a percentage of the maximum brightness.
    1: GetBrightness() -> (bool success, float64 brightness);

    // Sets the brightness of the display. The brightness is specified a
    // percentage of the maximum brightness.
    2: SetBrightness(float64 brightness) -> (bool success);
};
