// 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.bluetooth.hfp.test;

/// Configure behavior for connections to remote peers.
type ConnectionBehavior = table {
    /// When true, HFP will immediately conenct to peers when they are
    /// discovered. Defaults to true if missing.
    1: autoconnect bool;
};

/// Provides additional methods not in `Hfp` that are strictly for testing.
@discoverable
closed protocol HfpTest {
    /// Set the value of the AG battery indicator.
    ///
    /// `level` must be within the range 0-5 inclusive. Values outside of this
    /// range cause the channel to close.
    strict BatteryIndicator(struct {
        level uint8;
    });

    /// Configure the connection behavior when the component discovers new peers.
    strict SetConnectionBehavior(struct {
        behavior ConnectionBehavior;
    });
};
