// 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(https://fxbug.dev/42118593): 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;
};
