| // Copyright 2016 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef DEVICE_BLUETOOTH_BLUETOOTH_LOCAL_GATT_DESCRIPTOR_H_ |
| #define DEVICE_BLUETOOTH_BLUETOOTH_LOCAL_GATT_DESCRIPTOR_H_ |
| |
| #include <stdint.h> |
| #include <vector> |
| |
| #include "base/macros.h" |
| #include "device/bluetooth/bluetooth_export.h" |
| #include "device/bluetooth/bluetooth_gatt_descriptor.h" |
| #include "device/bluetooth/bluetooth_local_gatt_characteristic.h" |
| #include "device/bluetooth/bluetooth_uuid.h" |
| |
| namespace device { |
| |
| // BluetoothLocalGattDescriptor represents a local GATT characteristic |
| // descriptor. A GATT characteristic descriptor provides further information |
| // about a characteristic's value. They can be used to describe the |
| // characteristic's features or to control certain behaviors. |
| // |
| // Note: We use virtual inheritance on the GATT descriptor since it will be |
| // inherited by platform specific versions of the GATT descriptor classes also. |
| // The platform specific local GATT descriptor classes will inherit both this |
| // class and their GATT descriptor class, hence causing an inheritance diamond. |
| class DEVICE_BLUETOOTH_EXPORT BluetoothLocalGattDescriptor |
| : public virtual BluetoothGattDescriptor { |
| public: |
| // Constructs a BluetoothLocalGattDescriptor that can be associated with a |
| // local GATT characteristic when the adapter is in the peripheral role. To |
| // associate the returned descriptor with a characteristic, provide a pointer |
| // to that characteristic instance to the create function. |
| // |
| // This method constructs a characteristic descriptor with UUID |uuid| and the |
| // initial cached value |value|. |value| will be cached and returned for read |
| // requests and automatically modified for write requests by default, unless |
| // an instance of BluetoothLocalGattService::Delegate has been provided to |
| // the |
| // associated BluetoothLocalGattService instance, in which case the delegate |
| // will |
| // handle the read and write requests. |
| // |
| // Currently, only custom UUIDs, |kCharacteristicDescriptionUuid|, and |
| // |kCharacteristicPresentationFormat| are supported for locally hosted |
| // descriptors. This method will return NULL if |uuid| is any one of the |
| // unsupported predefined descriptor UUIDs. |
| static base::WeakPtr<BluetoothLocalGattDescriptor> Create( |
| const BluetoothUUID& uuid, |
| BluetoothGattCharacteristic::Permissions permissions, |
| BluetoothLocalGattCharacteristic* characteristic); |
| |
| virtual BluetoothLocalGattCharacteristic* GetCharacteristic() const = 0; |
| |
| protected: |
| BluetoothLocalGattDescriptor(); |
| ~BluetoothLocalGattDescriptor() override; |
| |
| private: |
| DISALLOW_COPY_AND_ASSIGN(BluetoothLocalGattDescriptor); |
| }; |
| |
| } // namespace device |
| |
| #endif // DEVICE_BLUETOOTH_BLUETOOTH_LOCAL_GATT_DESCRIPTOR_H_ |