| // Copyright 2017 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.le; |
| |
| enum PeripheralError { |
| /// The operation or parameters requested are not supported on the current hardware. |
| NOT_SUPPORTED = 1; |
| |
| /// The provided advertising data exceeds the maximum allowed length when encoded. |
| ADVERTISING_DATA_TOO_LONG = 2; |
| |
| /// The provided scan response data exceeds the maximum allowed length when encoded. |
| SCAN_RESPONSE_DATA_TOO_LONG = 3; |
| |
| /// The requested parameters are invalid. |
| INVALID_PARAMETERS = 4; |
| |
| /// The request to start advertising was aborted, for example by issuing a new request with new |
| /// parameters. |
| ABORTED = 5; |
| |
| /// Advertising could not be initiated due to a hardware or system error. |
| FAILED = 6; |
| }; |
| |
| /// A client can indicate the transmission rate of advertising packets by specifying a mode. The |
| /// mode provides a hint to the system when configuring the controller with advertising interval and |
| /// window parameters. |
| /// |
| /// The mode affects how quickly a scanner or central is able to discover the peripheral; however it |
| /// can have an adverse effect on power consumption. While the system will try to honor a client's |
| /// request, it is not guaranteed to do so. |
| enum AdvertisingModeHint : uint8 { |
| /// Advertise with a very short interval and window for fast discovery at the cost of higher |
| /// power consumption. This corresponds to a 30-60ms interval on the 1M PHYs and 90-180ms on the |
| /// coded PHY. |
| VERY_FAST = 1; |
| |
| /// Advertise with a short interval and window that uses less power than `VERY_FAST`. |
| /// This corresponds to a 100-150ms interval on the 1M PHYs and 300-450ms on the coded PHY. |
| FAST = 2; |
| |
| /// Advertise with a moderate interval and window. This corresponds to 1-1.2s on the 1M PHYs and 3s |
| /// on the coded PHY. |
| SLOW = 3; |
| }; |
| |
| /// Represents the parameters for configuring advertisements. |
| table AdvertisingParameters { |
| /// The fields that will be encoded in the data section of advertising packets. |
| /// |
| /// This field is required. |
| 1: AdvertisingData data; |
| |
| /// The fields that are to be sent in a scan response packet. Clients may use this to send |
| /// additional data that does not fit inside an advertising packet on platforms that do not |
| /// support the advertising data length extensions. |
| /// |
| /// If present advertisements will be configured to be scannable. |
| 2: AdvertisingData scan_response; |
| |
| /// The desired advertising frequency. See [`fuchsia.bluetooth.le/AdvertisingModeHint`]. |
| /// Defaults to [`fuchsia.bluetooth.le/AdvertisingModeHint.SLOW`] if not present. |
| 3: AdvertisingModeHint mode_hint; |
| |
| /// [[DEPRECATED]]: Prefer to use the ConnectionOptions field for new code. |
| /// If present and true then the controller will broadcast connectable advertisements which |
| /// allows remote LE centrals to initiate a connection to the Peripheral. If false or otherwise |
| /// not present then the advertisements will be non-connectable. |
| 4: bool connectable; |
| |
| /// If present, the controller will broadcast connectable advertisements which allow remote LE |
| /// centrals to initiate connections to the Peripheral. The fields of ConnectionOptions will |
| /// configure any connections set up from advertising. |
| 5: ConnectionOptions connection_options; |
| }; |
| |
| /// Capability that is valid for the duration of advertising. The caller can close the handle to |
| /// stop advertising. If the system internally stops advertising for any reason, the handle will be |
| /// closed to communicate this to the client. |
| protocol AdvertisingHandle { |
| }; |
| |
| [Discoverable] |
| protocol Peripheral { |
| /// Start advertising as a LE peripheral. An empty response is sent to indicate when advertising |
| /// has successfully initiated. If advertising cannot be initiated, then the response will |
| /// contain a [`fuchsia.bluetooth.le/PeripheralError`]. |
| /// |
| /// This method can get called any number of times and successive calls can be made to |
| /// reconfigure the advertising parameters. However only the most recent |
| /// [`fuchsia.bluetooth.le/AdvertisingHandle`] will remain valid. |
| /// |
| /// An instance of [`fuchsia.bluetooth.le/Peripheral`] can only have one active advertisement at |
| /// a time. Clients must obtain multiple Peripheral instances for multiple simultaneous |
| /// advertisements. |
| /// |
| /// If the client closes its end of the [`fuchsia.bluetooth.le/AdvertisingHandle`] channel, |
| /// advertising will be stopped. If the handle is closed before the request is fulfilled, |
| /// advertising will be briefly enabled before it is terminated. |
| /// |
| /// + request `parameters` Parameters used while configuring the advertising instance. |
| /// + request `handle` Handle that remains valid for the duration of this advertising session. |
| /// * error Returns a [`fuchsia.bluetooth.le/PeripheralError`] if advertising cannot be |
| /// initiated. In this case the `handle` will be closed. |
| StartAdvertising(AdvertisingParameters parameters, request<AdvertisingHandle> handle) -> () error PeripheralError; |
| |
| /// Event delivered when a remote LE central initiates a connection to this Peripheral when |
| /// connectable advertising is enabled via |
| /// [`fuchsia.bluetooth.le/Peripheral.StartAdvertising`]. |
| /// |
| /// The returned [`fuchsia.bluetooth.le/Connection`] handle can be used to interact with the |
| /// peer. It also represents a peripheral's ownership over the connection: the client can drop |
| /// the handle to request a disconnection. Similarly, the handle is closed by the system to |
| /// indicate that the connection to the peer has been lost. |
| /// |
| /// + request `peer` Information about the central that initiated the connection. |
| /// + request `handle` Represents the connection. |
| -> OnPeerConnected(Peer peer, Connection connection); |
| }; |