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

/// Represents the Bluetooth Host Subsystem parameters available for configuration. Each parameter
/// is set to a default upon Bluetooth system initialization. The default values for each parameter
/// can be found in //src/connectivity/bluetooth/core/bt-gap/config/default.js.
type Settings = table {
    /// If true then enable the LE Privacy feature, if false disable it. If not present, leaves the
    /// current value unchanged. When enabled, all BLE procedures that broadcast the local device
    /// address (active scanning, connection initiation, and advertising) use a Resolvable Private
    /// Address type. When disabled, these procedures reveal the local public identity address
    /// assigned to the controller.
    ///
    /// Enabling this feature is highly recommended on products.
    1: le_privacy bool;

    /// If true then enable LE background-scan feature, if false disable it. If not present, leaves
    /// the current value unchanged. When enabled, the system maintains an on-going passive scan
    /// and establishes connections to bonded peers that are in "Connectable" or "Directed
    /// Connectable" mode.
    2: le_background_scan bool;

    /// If true then enable BR/EDR connectable mode, if false disable it. If not present, leaves
    /// the current value unchanged. When enabled, bt-host devices are put into BR/EDR page scan
    /// mode and accept connections.
    3: bredr_connectable_mode bool;

    /// If present then sets the LE Security mode of the Host Subsystem, if not present leaves the
    /// current value unchanged. See BT Core Spec v5.2 Vol. 3 Part C 10.2 for more details. If
    /// present and set to Secure Connections Only mode, any active connections not meeting the
    /// requirements of Secure Connections Only mode are disconnected.
    4: le_security_mode LeSecurityMode;
};

/// Protocol to configure parameters and features for the core Bluetooth system. These settings
/// apply to all bt-host drivers known to the system.
///
/// This protocol should only be exposed to highly privileged components (e.g. Bluetooth developer
/// tools in a testing/qualification environment).
@discoverable
protocol Configuration {
    /// Applies the fields present in `settings` to all bt-host drivers known to the system. Any
    /// fields not present in `settings` will remain unchanged.
    ///
    /// + request `settings` The new settings for active bt-host drivers - only modified settings
    ///   need be present.
    /// - response `result` A fully-populated table with the resultant settings after the new
    ///   settings are applied.
    Update(struct {
        settings Settings;
    }) -> (struct {
        result Settings;
    });
};
