123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- // 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_CHARACTERISTIC_H_
- #define DEVICE_BLUETOOTH_BLUETOOTH_LOCAL_GATT_CHARACTERISTIC_H_
- #include <stdint.h>
- #include <vector>
- #include "device/bluetooth/bluetooth_export.h"
- #include "device/bluetooth/bluetooth_gatt_characteristic.h"
- #include "device/bluetooth/bluetooth_local_gatt_service.h"
- #include "device/bluetooth/public/cpp/bluetooth_uuid.h"
- namespace device {
- // BluetoothLocalGattCharacteristic represents a local GATT characteristic. This
- // class is used to represent GATT characteristics that belong to a locally
- // hosted service. To achieve this, users need to specify the instance of the
- // GATT service that contains this characteristic during construction.
- //
- // Note: We use virtual inheritance on the GATT characteristic since it will be
- // inherited by platform specific versions of the GATT characteristic classes
- // also. The platform specific remote GATT characteristic classes will inherit
- // both this class and their GATT characteristic class, hence causing an
- // inheritance diamond.
- class DEVICE_BLUETOOTH_EXPORT BluetoothLocalGattCharacteristic
- : public virtual BluetoothGattCharacteristic {
- public:
- enum NotificationStatus {
- NOTIFICATION_SUCCESS = 0,
- NOTIFY_PROPERTY_NOT_SET,
- INDICATE_PROPERTY_NOT_SET,
- SERVICE_NOT_REGISTERED,
- };
- // Constructs a BluetoothLocalGattCharacteristic associated with a local GATT
- // service when the adapter is in the peripheral role.
- //
- // This method constructs a characteristic with UUID |uuid|, initial cached
- // value |value|, properties |properties|, and permissions |permissions|.
- // |value| will be cached and returned for read requests and automatically set
- // for write requests by default, unless an instance of
- // BluetoothRemoteGattService::Delegate has been provided to the associated
- // BluetoothRemoteGattService instance, in which case the delegate will handle
- // read and write requests. The service instance will contain this
- // characteristic.
- // TODO(rkc): Investigate how to handle |PROPERTY_EXTENDED_PROPERTIES|
- // correctly.
- static base::WeakPtr<BluetoothLocalGattCharacteristic> Create(
- const BluetoothUUID& uuid,
- Properties properties,
- Permissions permissions,
- BluetoothLocalGattService* service);
- BluetoothLocalGattCharacteristic(const BluetoothLocalGattCharacteristic&) =
- delete;
- BluetoothLocalGattCharacteristic& operator=(
- const BluetoothLocalGattCharacteristic&) = delete;
- // Notify the remote device |device| that the value of characteristic
- // |characteristic| has changed and the new value is |new_value|. |indicate|
- // should be set to true if we want to use an indication instead of a
- // notification. An indication waits for a response from the remote, making
- // it more reliable but notifications may be faster.
- virtual NotificationStatus NotifyValueChanged(
- const BluetoothDevice* device,
- const std::vector<uint8_t>& new_value,
- bool indicate) = 0;
- virtual BluetoothLocalGattService* GetService() const = 0;
- protected:
- BluetoothLocalGattCharacteristic();
- ~BluetoothLocalGattCharacteristic() override;
- };
- } // namespace device
- #endif // DEVICE_BLUETOOTH_BLUETOOTH_LOCAL_GATT_CHARACTERISTIC_H_
|