// Copyright 2023 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.
@available(added=HEAD)
library fuchsia.buttons;

using fuchsia.input.report;

/// Analog-to-Digital Converter Buttons
type AdcButtonConfig = table {
    /// ADC Channel Index to read button value on.
    1: channel_idx uint32;

    /// If press_threshold <= value <= release_threshold, button is pressed. Otherwise, not pressed.
    2: release_threshold uint32;
    3: press_threshold uint32;
};

type ButtonConfig = flexible union {
    /// ADC Buttons.
    1: adc AdcButtonConfig;
};

type Button = table {
    /// Button Types. A single button may affect multiple things and thus have multiple
    /// functionalities. For example, a privacy switch that mutes both the camera and mic may map to
    /// the combination of fuchsia.input.report.ConsumerControlButton.MIC_MUTE and CAMERA_DISABLE.
    1: types vector<fuchsia.input.report.ConsumerControlButton>:MAX;

    /// Button Config.
    2: button_config ButtonConfig;
};

type Metadata = table {
    /// Polling Rate in usec if exists.
    1: polling_rate_usec uint32;

    /// Buttons.
    2: buttons vector<Button>:MAX;
};
