blob: 8fd82f96a818e0a37aaa0e0c77685782be798670 [file] [log] [blame]
// 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.bredr;
using fuchsia.bluetooth;
using fuchsia.sys;
/// Information used to launch a profile component.
table LaunchInfo {
/// Required. The location from which to retrieve this component.
1: fuchsia.sys.component_url component_url;
/// Optional. The arguments to be provided to the component.
2: vector<string:MAX>:MAX arguments;
};
/// `PeerObserver` provides the integration test client with a way to validate the
/// behavior of a peer in the piconet.
/// Dropping `PeerObserver` will stop any subsequent updates for the peer.
protocol PeerObserver {
/// The peer discovered the services of another peer in the piconet.
///
/// + request `peer_id` The peer the service was found on.
/// + request `protocol` Includes the ProtocolDescriptorList in the service record.
/// + request `attributes` Contains all attributes requested from the search that
/// are present on the peer record.
ServiceFound(fuchsia.bluetooth.PeerId peer_id, ProtocolDescriptorList? protocol,
vector<Attribute>:MAX_ATTRIBUTES attributes) -> ();
/// Called when a peer has connected to a service.
///
/// + request `peer_id` The peer that connected to the service.
/// + request `protocol` Contains the protocol list of the connection.
PeerConnected(fuchsia.bluetooth.PeerId peer_id, ProtocolDescriptorList protocol) -> ();
/// Called when a component, launched by `MockPeer.LaunchProfile`, has terminated
/// for any reason. `ComponentTerminated` does not provide information regarding
/// why a component has terminated and should not be used for debugging.
///
/// + request `component_url` URL of the component that has terminated.
ComponentTerminated(fuchsia.sys.component_url component_url) -> ();
};
/// `MockPeer` provides an interface for managing the lifetime of a mock peer in the piconet.
/// Dropping `MockPeer` will unregister the peer from the Profile Test Server database.
/// - Any launched components associated with the mock peer will be terminated.
/// - Any actively connected `ProfileProxy` will be disconnected and dropped.
protocol MockPeer {
/// Connect a channel to the [`fuchsia.bluetooth.bredr.Profile`] protocol for
/// manipulation of the mock peer.
///
/// It is valid to connect multiple proxies to a `MockPeer`.
///
/// This parallels the current behavior of the bluetooth profile components.
/// Specifically, profiles internally use the [`fuchsia.bluetooth.bredr.Profile`]
/// service to register, search, and connect services. `ConnectProxy` provides a way
/// for the test client to do the same for a given mock peer.
///
/// If the `interface` is not connectable, it will be dropped with an epitaph
/// signaling the failure.
///
/// + request `interface` Interface to drive mock peer behavior.
ConnectProxy(request<Profile> interface) -> ();
/// Launch a profile specified by the `launch_info`.
///
/// + request `launch_info` Information about the component to be launched.
/// - response Acknowledgement when the profile has been launched, or an error code
/// if the profile could not be launched
LaunchProfile(LaunchInfo launch_info) -> () error fuchsia.bluetooth.ErrorCode;
};
/// The `ProfileTest` interface should be used to validate behavior of Bluetooth Profiles
/// that use the [`fuchsia.bluetooth.bredr.Profile`] service.
///
/// The ProfileTest interface is used to create and manage fake peers.
/// A mock piconet is created in which registered peers can discover and interact with
/// each other.
[Discoverable] protocol ProfileTest {
/// Creates a new fake peer in the Profile Test Server database. An empty response is
/// sent to indicate when registration is complete.
///
/// Use the provided [`PeerObserver`] interface to observe behavior of the registered peer.
/// Dropping the `observer` will cease the updates from the server for the associated peer.
///
/// If registration is unsuccessful, the `peer` and `observer` will be closed.
///
/// + request `peer_id` Identifier for the created peer.
/// + request `peer` Handle that can be used to drive peer behavior using the
/// [`fuchsia.blueooth.bredr.MockPeer`] interface.
/// + request `observer` Relay for communicating updates from the mock peer.
RegisterPeer(fuchsia.bluetooth.PeerId peer_id, request<MockPeer> peer, PeerObserver observer)
-> ();
};