blob: d1b34be4fc77fe5b3d24964db42bcce104b8d260 [file] [log] [blame]
// 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
type ButtonType = strict enum : uint8 {
VOLUME_UP = 0;
VOLUME_DOWN = 1;
RESET = 2;
MUTE = 3;
PLAY_PAUSE = 4;
KEY_A = 5;
KEY_M = 6;
CAM_MUTE = 7;
MAX = 8;
};
/// 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(struct {
type ButtonType;
}) -> (struct {
pressed bool;
});
/// 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(struct {
types uint8;
}) -> (struct {}) error zx.status;
/// Notify event. Called when state of previously registered button changes.
/// `type` : Button type.
/// `pressed` : True if button is pressed.
-> OnNotify(struct {
type ButtonType;
pressed bool;
});
};