// Copyright 2019 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.buttons;
using zx;

/// ButtonType should the same as BUTTONS_ID_... in metadata/buttons.h
enum ButtonType : uint8 {
    VOLUME_UP = 0;
    VOLUME_DOWN = 1;
    RESET = 2;
    MUTE = 3;
    MAX = 4;
};

/// Protocol for other devices to get the state of buttons and register for
/// notifications of state change.
[Discoverable]
protocol Buttons {
    /// Gets the state of the button requested.
    /// |type| : Button type.
    /// @Returns: |pressed| : True if button is pressed.
    GetState(ButtonType type) -> (bool pressed);

    /// Registers to receive notifications of a state change for some buttons.
    /// |types| : Bitmask which indicates the interested buttons. 0 means not
    ///           interested, 1 means interested. Bit position corresponds to
    ///           ButtonType, e.g. (1 << VOLUME_UP) means notify only when
    ///           the state of the VOLUME_UP button changes. Types not listed
    ///           in subsequent calls are removed.
    /// @Returns: |status| : ZX_OK if succeeds.
    RegisterNotify(uint8 types) -> () error zx.status;

    /// Notify event. Called when state of previously registered button changes.
    /// |type| : Button type.
    /// |pressed| : True if button is pressed.
    -> Notify(ButtonType type, bool pressed);
};
