blob: b272c51bf63ad93fe2a91afa1ccacb3bf0f116b5 [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.gatt;
// Codes that can be returned in the |protocol_error_code| field of a
// bluetooth.Error.
enum ErrorCode {
// Indicates that the operation was successful.
NO_ERROR = 0;
// Indicates that the offset used in a read or write request exceeds the
// bounds of the value.
INVALID_OFFSET = 1;
// Indicates that the value given in a write request would exceed the maximum
// length allowed for the destionation characteristic or descriptor.
INVALID_VALUE_LENGTH = 2;
// Indicates that a read or write request is not permitted.
NOT_PERMITTED = 3;
};
// Represents encryption, authentication, and authorization permissions that can
// be assigned to a specific access permission.
struct SecurityRequirements {
// If true, the physical link must be encrypted to access this attribute.
bool encryption_required;
// If true, the physical link must be authenticated to access this
// attribute.
bool authentication_required;
// If true, the client needs to be authorized before accessing this
// attribute.
bool authorization_required;
};
// Specifies the access permissions for a specific attribute value.
struct AttributePermissions {
// Specifies whether or not an attribute has the read permission. If null,
// then the attribute value cannot be read. Otherwise, it can be read only if
// the permissions specified in the Permissions struct are satisfied.
SecurityRequirements? read;
// Specifies whether or not an attribute has the write permission. If null,
// then the attribute value cannot be written. Otherwise, it be written only
// if the permissions specified in the Permissions struct are satisfied.
SecurityRequirements? write;
// Specifies the security requirements for a client to subscribe to
// notifications or indications on a characteristic. A characteristic's
// support for notifications or indiciations is specified using the NOTIFY and
// INDICATE characteristic properties. If a local characteristic has one of
// these properties then this field can not be null. Otherwise, this field
// must be left as null.
//
// This field is ignored for Descriptors.
SecurityRequirements? update;
};
// Possible values for the characteristic properties bitfield. These specify the
// GATT procedures that are allowed for a particular characteristic.
const uint32 kPropertyBroadcast = 1;
const uint32 kPropertyRead = 2;
const uint32 kPropertyWriteWithoutResponse = 4;
const uint32 kPropertyWrite = 8;
const uint32 kPropertyNotify = 16;
const uint32 kPropertyIndicate = 32;
const uint32 kPropertyAuthenticatedSignedWrites = 64;
const uint32 kPropertyReliableWrite = 256;
const uint32 kPropertyWritableAuxiliaries = 512;
// Represents a local or remote GATT service.
struct ServiceInfo {
// Uniquely identifies this GATT service. This value will be ignored for local
// services. Remote services will always have an identifier.
uint64 id;
// Indicates whether this is a primary or secondary service.
bool primary;
// The 128-bit UUID that identifies the type of this service. This is a string
// in the canonical 8-4-4-4-12 format.
string type;
// The characteristics of this service.
vector<Characteristic>? characteristics;
// Ids of other services that are included by this service.
vector<uint64>? includes;
};
// Represents a local or remote GATT characteristic.
struct Characteristic {
// Uniquely identifies this characteristic within a service.
uint64 id;
// The 128-bit UUID that identifies the type of this characteristic. This is a
// string in the canonical 8-4-4-4-12 format.
string type;
// The characteristic properties bitfield. See kProperty* above for possible
// values.
uint32 properties;
// The attribute permissions of this characteristic. For remote
// characteristics, this value will be null until the permissions are
// discovered via read and write requests.
//
// For local characteristics, this value is mandatory.
AttributePermissions? permissions;
// The descriptors of this characteristic.
vector<Descriptor>? descriptors;
};
// Represents a local or remote GATT characteristic descriptor.
struct Descriptor {
// Uniquely identifies this descriptor within the characteristic that it
// belongs to.
uint64 id;
// The 128-bit UUID that identifies the type of this descriptor. This is a
// string in the canonical 8-4-4-4-12 format.
string type;
// The attribute permissions of this descriptor. For remote
// descriptors, this value will be null until the permissions are
// discovered via read and write requests.
//
// For local descriptors, this value is mandatory.
AttributePermissions? permissions;
};