// Copyright 2020 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.le;

using fuchsia.bluetooth;

/// Represents parameters that are set on a per-connection basis by FIDL protocols that create
/// Low Energy connections.
table ConnectionOptions {
    /// When true, the connection operates in bondable mode. This means pairing will form a bond,
    /// or persist across disconnections, if the peer is also in bondable mode. When not present,
    /// the connection defaults to bondable mode. When false, the connection operates in non-
    /// bondable mode, which means the local device only allows pairing that does not form a bond.
    1: bool bondable_mode;

    /// When present, service discovery performed following the connection is restricted to primary
    /// services that match this field. Otherwise, by default all available services are discovered.
    2: fuchsia.bluetooth.Uuid service_filter;
};
