| // 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; |
| }; |