// 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.sys;

/// The security level required for this pairing - corresponds to the security
/// levels defined in the Security Manager Protocol in Vol 3, Part H, Section 2.3.1
type PairingSecurityLevel = strict enum {
    /// Encrypted without MITM protection (unauthenticated)
    ENCRYPTED = 1;

    /// Encrypted with MITM protection (authenticated), although this level of security does not
    /// fully protect against passive eavesdroppers
    AUTHENTICATED = 2;
};

/// Whether or not the device should form a bluetooth bond during the pairing prodecure.
/// As described in Core Spec v5.2 | Vol 3, Part C, Sec 4.3
type BondableMode = strict enum {
    /// The device will form a bond during pairing with peers
    BONDABLE = 1;
    /// The device will not form a bond during pairing with peers
    NON_BONDABLE = 2;
};

/// Parameters that give a caller more fine-grained control over the pairing process. All of the
/// fields of this table are optional and pairing can still succeed if none of them are set.
type PairingOptions = table {
    /// Only relevant for LE. If present, determines the Security Manager security level to pair
    /// with. If not present, interpreted as PairingSecurityLevel.AUTHENTICATED.
    1: le_security_level PairingSecurityLevel;

    /// If transport is LOW_ENERGY or DUAL_MODE, whether the device should form a bond or not during
    /// pairing. If not present, interpreted as bondable mode.
    ///
    /// If transport is CLASSIC, this option must be absent or otherwise the value BONDABLE.
    /// NON_BONDABLE mode is not currently supported for the CLASSIC transport
    // TODO(fxbug.dev/42403): Support NON_BONDABLE for the CLASSIC transport.
    2: bondable_mode BondableMode;

    /// If transport is LOW_ENERGY, indicate a desire to pair over the LE transport.
    /// If transport is CLASSIC, indicate a desire to pair over the Br/Edr transport.
    /// If transport is DUAL_MODE, indicate a desire to pair over both transports.
    /// If not present, interpreted as TechnologyType.DUAL_MODE
    3: transport TechnologyType;
};
