| // Copyright 2021 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. |
| @available(added=7) |
| library fuchsia.bluetooth.deviceid; |
| |
| using zx; |
| |
| /// Maximum device identification records that a client can request to advertise at once. |
| const MAX_RECORDS uint8 = 3; |
| |
| /// Maximum length of a service description. |
| const MAX_SERVICE_DESCRIPTION_LENGTH uint8 = 128; |
| |
| /// The vendor id of the device. |
| /// Defined in DI 1.3 Section 5.6. |
| type VendorId = flexible union { |
| /// An ID assigned by the Bluetooth SIG. |
| /// From Bluetooth Assigned Numbers (https://www.bluetooth.com/specifications/assigned-numbers/) |
| 1: bluetooth_sig_id uint16; |
| |
| /// An ID assigned by the USB Implementors Forum |
| /// (https://www.usb.org/sites/default/files/vendor_ids072121_0.pdf). |
| 2: usb_if_id uint16; |
| }; |
| |
| /// The device release number. |
| /// This will be represented as Binary-Coded Decimal - JJ.M.N where JJ = major, M = minor, and |
| /// N = sub-minor versions (e.g 2.0.1). |
| type DeviceReleaseNumber = table { |
| /// Mandatory - major vesion number. |
| 1: major uint8; |
| |
| /// Mandatory - minor version number. Must be below 16. |
| 2: minor uint8; |
| |
| /// Mandatory - sub-minor version number. Must be below 16. |
| 3: subminor uint8; |
| }; |
| |
| /// A table of attributes providing information about the device. |
| // TODO(fxbug.dev/85943): Expand this table to include attributes defined in the Device Information |
| // GATT service when supported. |
| type DeviceIdentificationRecord = table { |
| /// Mandatory - the vendor of the device. |
| 1: vendor_id VendorId; |
| |
| /// Mandatory - the product identifier of the device. |
| 2: product_id uint16; |
| |
| /// Mandatory - the device release number. |
| 3: version DeviceReleaseNumber; |
| |
| /// Optional - specifies if this record is the primary record. |
| /// Default: false |
| 4: primary bool; |
| |
| /// Optional - a brief name describing the service. |
| /// Default: Empty string |
| 5: service_description string:MAX_SERVICE_DESCRIPTION_LENGTH; |
| }; |
| |
| /// Represents an active device identification advertisement. Close the handle with any epitaph to |
| /// unregister the device identification request. |
| protocol DeviceIdentificationHandle {}; |
| |
| /// An interface for setting the identification of a Fuchsia device. |
| @discoverable |
| protocol DeviceIdentification { |
| /// Request to set the device information to be advertised over Bluetooth. |
| /// |
| /// The device information can only be set once per provided `token`. To cancel the request, |
| /// close the `token` with any epitaph. |
| /// |
| /// At most one record in `records` may be denoted as the `primary` record. If multiple records |
| /// have `primary` set, `ZX_ERR_INVALID_ARGS` will be returned. |
| /// If the server is already advertising a `primary` record, a subsequent request with `primary` |
| /// may be rejected with `ZX_ERR_ALREADY_EXISTS`. |
| /// |
| /// + request `records` is the set of device information records that identify the device. |
| /// + request `token` is used to manage the lifetime of the advertised device information. |
| /// The `records` will remain advertised as long as the channel is open. |
| /// The device identification advertisement will be removed when `token` is closed |
| /// with any epitaph. |
| /// - response An empty response will be sent when the `token` has been closed and the server |
| /// has processed the closure. |
| /// * error Returns `ZX_ERR_INVALID_ARGS` if any of the provided `records` are invalidly |
| /// formatted. |
| /// * error Returns `ZX_ERR_NO_RESOURCES` if the server has reached the maximum number of |
| /// device information advertisements. |
| /// * error Returns `ZX_ERR_CANCELLED` if the request was cancelled by the server for all other |
| /// errors. |
| SetDeviceIdentification(resource struct { |
| records vector<DeviceIdentificationRecord>:MAX_RECORDS; |
| token server_end:DeviceIdentificationHandle; |
| }) -> (struct {}) error zx.status; |
| }; |