blob: 62e69b7acd39ccd48895878e3bd842a26f321a52 [file] [log] [blame]
// Copyright 2018 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.url;
/// The maximum length that a sequence or set of alternatives supported in a
/// DataElement list. If a list is provided that is longer than this from a
/// peer, it is truncated.
const uint8 MAX_SEQUENCE_LENGTH = 255;
/// Maximum length of a string that is alowed in a DataElement. If a
/// DataElement string longer than this is sent by a peer it will be truncated.
const uint16 MAX_STRING_LENGTH = 1024;
/// A DataElement is one element in a SDP record. SDP attributes and other parameters are
/// expresssed in DataElements.
union DataElement {
1: int8 int8;
2: int16 int16;
3: int32 int32;
4: int64 int64;
5: uint8 uint8;
6: uint16 uint16;
7: uint32 uint32;
8: uint64 uint64;
9: string:MAX_STRING_LENGTH str;
10: fuchsia.url.Url url;
11: fuchsia.bluetooth.Uuid uuid;
12: bool b;
13: vector<DataElement?>:MAX_SEQUENCE_LENGTH sequence;
14: vector<DataElement?>:MAX_SEQUENCE_LENGTH alternatives;
};
/// Defined Protocol Identifiers for the Protocol Descriptor
/// We intentionally omit deprecated profile identifiers.
/// From Bluetooth Assigned Numbers:
/// https://www.bluetooth.com/specifications/assigned-numbers/service-discovery
enum ProtocolIdentifier : uint16 {
SDP = 1;
RFCOMM = 3;
ATT = 7;
OBEX = 8;
BNEP = 15;
HIDP = 17;
HARDCOPY_CONTROL_CHANNEL = 18;
HARDCOPY_DATA_CHANNEL = 20;
HARDCOPY_NOTIFICATION = 22;
AVCTP = 23;
AVDTP = 25;
MCAP_CONTROL_CHANNEL = 30;
MCAP_DATA_CHANNEL = 31;
L2CAP = 256;
};
/// Defined PSMs from the Bluetooth Assigned Numbers
/// https://www.bluetooth.com/specifications/assigned-numbers/logical-link-control
/// Used in DataElement as protocol parameters for L2CAP.
const uint16 PSM_SDP = 1;
const uint16 PSM_RFCOMM = 3;
const uint16 PSM_TCSBIN = 5; // Telephony Control Specification
const uint16 PSM_TCSBIN_CORDLESS = 7;
const uint16 PSM_BNEP = 15; // Bluetooth Network Encapsulation Protocol
const uint16 PSM_HID_CONTROL = 17; // Human Interface Device
const uint16 PSM_HID_INTERRUPT = 19; // Human Interface Device
const uint16 PSM_AVCTP = 23; // Audio/Video Control Transport Protocol
const uint16 PSM_AVDTP = 25; // Audio/Video Distribution Transport Protocol
const uint16 PSM_AVCTP_BROWSE = 27; // Audio/Video Remote Control Profile (Browsing)
const uint16 PSM_ATT = 31; // ATT
const uint16 PSM_3DSP = 33; // 3D Synchronization Profile
const uint16 PSM_LE_IPSP = 35; // Internet Protocol Support Profile
const uint16 PSM_OTS = 37; // Object Transfer Service
/// Identifies a communications protocol along with protocol-specific parameters.
/// Usually used to describe a protocol endpoint in a ProtocolDescriptorList
struct ProtocolDescriptor {
ProtocolIdentifier protocol;
vector<DataElement>:MAX_SEQUENCE_LENGTH params;
};
/// A ProtocolDescriptorList is a list of protocols in a "stack" from lowest to highest,
/// Specifying a specific protocol endpoint that can be connected.
alias ProtocolDescriptorList = vector<ProtocolDescriptor>:MAX_SEQUENCE_LENGTH;
/// Identifiers that are valid for Bluetooth Classes / Profiles.
/// We intentionally omit classes and profile IDs that are unsupported, deprecated,
/// or reserved for use by Fuchsia Bluetooth.
/// These numbers are sourced from the Bluetooth Assigned Numbers for SDP.
/// https://www.bluetooth.com/specifications/assigned-numbers/service-discovery
enum ServiceClassProfileIdentifier : uint16 {
// ServiceDiscoveryService and BrowseGroupDescriptorService claimed by Fuchsia
/// Serial Port Profile (SPP)
SERIAL_PORT = 0x1101;
// LANAccessUsingPPP omitted (deprecated)
/// Dial-up Networking Profile (DUN)
DIALUP_NETWORKING = 0x1103;
/// Object Push Profile (OPP)
OBEX_OBJECT_PUSH = 0x1105;
/// File Transfer Profile (FTP)
OPEX_FILE_TRANSFER = 0x1106;
/// Headset Profile (HSP)
HEADSET = 0x1108;
// CordlessTelephony (CTP) omitted (deprecated)
// Fax Profile (FAX) omitted (deprecated)
HEADSET_AUDIO_GATEWAY = 0x1112;
HEADSET_HS = 0x1131;
/// Advanced Audio Distribution Profile (A2DP)
AUDIO_SOURCE = 0x110A;
AUDIO_SINK = 0x110B;
ADVANCED_AUDIO_DISTRIBUTION = 0x110D;
/// Audio/Video Remote Control Profile (AVRCP)
AV_REMOTE_CONTROL_TARGET = 0x110C;
AV_REMOTE_CONTROL = 0x110E;
AV_REMOTE_CONTROL_CONTROLLER = 0x110F;
// Intercom (ICP) omitted (deprecated)
// Wap and Wap Client (WAP) omitted (deprecated)
// Synchronization Profile (SYNC) omitted (unsupported)
/// Personal Area Networking (PAN)
PANU = 0x1115;
NAP = 0x1116;
GN = 0x1117;
// Basic Printing and Basic Imaging Profiles omitted (unsupported)
/// Hands-Free Profile (HFP)
HANDSFREE = 0x111E;
HANDSFREE_AUDIO_GATEWAY = 0x111F;
// Human Interface Device and Hardcopy Cable Replacement Profile omitted (unsupported)
/// Sim Access Profile (SAP)
SIM_ACCESS = 0x112D;
/// Phonebook Access Profile (PBAP)
PHONEBOOK_PCE = 0x112E;
PHONEBOOK_PSE = 0x112F;
PHONEBOOK = 0x1130;
/// Message Access Profile (MAP)
MESSAGE_ACCESS_SERVER = 0x1132;
MESSAGE_NOTIFICATION_SERVER = 0x1133;
MESSAGE_ACCESS_PROFILE = 0x1134;
// GNSS and 3DSP omitted (unsupported)
/// Multi-Profile Specification (MPS)
MPS_PROFILE = 0x113A;
MPS_CLASS = 0x113B;
// Calendar, Task, and Notes Profile omitted (unsupported)
// Device ID claimed by Fuchsia
/// Generic Networking
GENERIC_NETWORKING = 0x1201;
/// Generic File Transfer
GENERIC_FILE_TRANSFER = 0x1202;
/// Generic Audio
GENERIC_AUDIO = 0x1203;
/// Generic Telephony
GENERIC_TELEPHONY = 0x1204;
// Enhanced Service Discovery Profile (ESDP) service classes omitted (deprecated).
/// Video Distribution Profile (VDP)
VIDEO_SOURCE = 0x1303;
VIDEO_SINK = 0x1304;
VIDEO_DISTRIBUTION = 0x1305;
/// Health Device Profile (HDP)
HDP = 0x1400;
HDP_SOURCE = 0x1401;
HDP_SINK = 0x1402;
};
/// A description of a profile that this service conforms to.
/// See Bluetooth Specification v5.2 Vol 3, Part B, Section 5.1.11
struct ProfileDescriptor {
ServiceClassProfileIdentifier profile_id;
uint8 major_version;
uint8 minor_version;
};
/// Maximum number of languages that are supported by SDP at the moment.
// Note: all informations must be within 0x0100 - 0x01FF per Spec Vol 3, Part B,
// Sec 5.1.8. Since each information consumes three spaces, this means there is
// a max of 256 / 3 = 85 supported.
const uint8 MAX_INFORMATION_COUNT = 85;
/// Human-readable information about a service. Strings are encoded in UTF-8.
/// See Bluetooth Specification v5.2 Vol 3, Part B, Sections 5.1.15 through 5.1.17
table Information {
/// Language that the other fields in this table are in.
/// Must be two characters long and a valid ICO 639:1988 identifier.
/// Must be present.
1: string:2 language;
/// Service name
2: string:MAX_STRING_LENGTH name;
/// A human-readable description
3: string:MAX_STRING_LENGTH description;
/// The provider of this service (person or organization)
4: string:MAX_STRING_LENGTH provider;
};
/// A generic attribute, used for protocol information;
struct Attribute {
uint16 id;
DataElement element;
};
/// Universal attribute IDs.
/// From the Bluetooth Specification v5.2, Vol 3, Part B
const uint16 ATTR_SERVICE_RECORD_HANDLE = 0x0000;
const uint16 ATTR_SERVICE_CLASS_ID_LIST = 0x0001;
const uint16 ATTR_SERVICE_RECORD_STATE = 0x0002;
const uint16 ATTR_SERVICE_ID = 0x0003;
const uint16 ATTR_PROTOCOL_DESCRIPTOR_LIST = 0x0004;
const uint16 ATTR_ADDITIONAL_PROTOCOL_DESCRIPTOR_LIST = 0x000D;
const uint16 ATTR_BROWSE_GROUP_LIST = 0x0005;
const uint16 ATTR_LANGUAGE_BASE_ATTRIBUTE_ID_LIST = 0x0006;
const uint16 ATTR_SERVICE_INFO_TIME_TO_LIVE = 0x0007;
const uint16 ATTR_SERVICE_AVAILABILITY = 0x0008;
const uint16 ATTR_BLUETOOTH_PROFILE_DESCRIPTOR_LIST = 0x0009;
/// Maximum additional attributes as defined by the spec. All attributes
/// must be above 0x0200 per the Bluetooth Specfication, Ver 5.2 Vol 3, Part B,
/// Section 5
const uint16 MAX_ADDITIONAL_ATTRIBUTES = 0xFDFF;
/// Definition for a service that is to be advertised as available via Bluetooth BR/EDR.
table ServiceDefinition {
/// UUIDs of service classes that this service record conforms to.
/// This field is required - all advertised services must have at least one service class.
1: vector<fuchsia.bluetooth.Uuid>:MAX_SEQUENCE_LENGTH service_class_uuids;
/// Specification for the primary protocol that can be used to gain access to this
/// service, with their protocol-specific identifiers.
/// This is ordered from lowest level (typically L2CAP) to highest.
2: ProtocolDescriptorList protocol_descriptor_list;
/// Additional protocol descriptor lists, if the service requires more channels
/// in addition to the main service.
3: vector<ProtocolDescriptorList>:MAX_SEQUENCE_LENGTH additional_protocol_descriptor_lists;
/// Bluetooth profiles that are supported by this service.
4: vector<ProfileDescriptor>:MAX_SEQUENCE_LENGTH profile_descriptors;
/// Human-readable service information, in one or more languages.
/// The first set of information is considered the primary language.
5: vector<Information>:MAX_INFORMATION_COUNT information;
/// Additional attributes to be included in the Service Definition for specific
/// services or profiles.
/// All of these attributes should have an Attribute ID above 0x0200.
6: vector<Attribute>:MAX_ADDITIONAL_ATTRIBUTES additional_attributes;
};