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

using fuchsia.bluetooth as bt;

enum TechnologyType {
    LOW_ENERGY = 1;
    CLASSIC = 2;
    DUAL_MODE = 3;
};

/// Maximum number of discovered services for each transport. Currently set to the number of valid
/// 16-bit handles or PSMs used to access services.
const uint16 MAX_PEER_SERVICES = 65535;

/// Represents a remote BR/EDR, LE, or dual-mode BR/EDR/LE peer.
table Peer {
    /// Uniquely identifies this peer on the current system.
    ///
    /// This field is always present.
    1: bt.PeerId id;

    /// Bluetooth device address that identifies this peer. Clients
    /// should display this field to the user when `name` is not available.
    ///
    /// This field is always present.
    ///
    /// NOTE: Clients should use the `identifier` field to keep track of peers instead of their
    /// address.
    2: bt.Address address;

    /// The Bluetooth technologies that are supported by this peer.
    ///
    /// This field is always present.
    3: TechnologyType technology;

    /// Whether or not a BR/EDR and/or LE connection exists to this peer.
    ///
    /// This field is always present.
    4: bool connected;

    /// Whether or not this peer is bonded.
    ///
    /// This field is always present.
    5: bool bonded;

    /// The name of the peer, if known.
    6: bt.DeviceName name;

    /// The LE appearance property. Present if this peer supports LE and the
    /// appearance information was obtained over advertising and/or GATT.
    7: bt.Appearance appearance;

    /// The class of device for this device, if known.
    8: bt.DeviceClass device_class;

    /// The most recently obtained advertising signal strength for this peer. Present if known.
    9: int8 rssi;

    /// The most recently obtained transmission power for this peer. Present if known.
    10: int8 tx_power;

    /// The list of service UUIDs known to be available on this peer.
    ///
    /// This is a legacy field that should not be depended on for new code.
    [Deprecated]
    11: vector<bt.Uuid>:MAX_PEER_SERVICES services;

    /// The list of service UUIDs known to be available on the LE transport.
    ///
    /// Never present if technology is CLASSIC.
    12: vector<bt.Uuid>:MAX_PEER_SERVICES le_services;

    /// The cached list of service UUIDs previously discovered on the BR/EDR transport.
    /// Services are not removed if peer is disconnected if subsequent searches don't find them.
    ///
    /// Never present if technology is LOW_ENERGY.
    ///
    /// This is a legacy field that should not be depended on for new code.
    [Deprecated]
    13: vector<bt.Uuid>:MAX_PEER_SERVICES bredr_services;
};
