// Copyright 2021 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.power.button;

/// Action to perform when power button is pressed.
type Action = flexible enum {
    /// Do nothing.
    IGNORE = 0;
    /// Shutdown the system.
    SHUTDOWN = 1;
};

type PowerButtonEvent = flexible enum {
    /// Button Pressed.
    PRESS = 0;
};

/// Protocol to manage the power button monitor.
/// This protocol allows applications to configure the action performed when the
/// power button is pressed.
/// It is intended for board-specific components that need to use the power
/// button for their own purposes (e.g. as a physical presence check).
@discoverable
closed protocol Monitor {
    /// Get the current action for the power button.
    /// Always returns immediately, never fails.
    strict GetAction() -> (struct {
        action Action;
    });

    /// Set the action that will be performed when the power button is pressed.
    /// Always returns immediately, never fails.
    strict SetAction(struct {
        action Action;
    }) -> ();

    /// Send a message to the client when the power button is pressed or released.
    strict -> OnButtonEvent(struct {
        event PowerButtonEvent;
    });
};
