| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef DEVICE_BLUETOOTH_BLUETOOTH_GATT_CHARACTERISTIC_H_ | 5 #ifndef DEVICE_BLUETOOTH_BLUETOOTH_GATT_CHARACTERISTIC_H_ |
| 6 #define DEVICE_BLUETOOTH_BLUETOOTH_GATT_CHARACTERISTIC_H_ | 6 #define DEVICE_BLUETOOTH_BLUETOOTH_GATT_CHARACTERISTIC_H_ |
| 7 | 7 |
| 8 #include <stdint.h> |
| 9 |
| 8 #include <string> | 10 #include <string> |
| 9 #include <vector> | 11 #include <vector> |
| 10 | 12 |
| 11 #include "base/basictypes.h" | |
| 12 #include "base/callback.h" | 13 #include "base/callback.h" |
| 14 #include "base/macros.h" |
| 13 #include "base/memory/scoped_ptr.h" | 15 #include "base/memory/scoped_ptr.h" |
| 14 #include "device/bluetooth/bluetooth_export.h" | 16 #include "device/bluetooth/bluetooth_export.h" |
| 15 #include "device/bluetooth/bluetooth_gatt_service.h" | 17 #include "device/bluetooth/bluetooth_gatt_service.h" |
| 16 #include "device/bluetooth/bluetooth_uuid.h" | 18 #include "device/bluetooth/bluetooth_uuid.h" |
| 17 | 19 |
| 18 namespace device { | 20 namespace device { |
| 19 | 21 |
| 20 class BluetoothGattDescriptor; | 22 class BluetoothGattDescriptor; |
| 21 class BluetoothGattNotifySession; | 23 class BluetoothGattNotifySession; |
| 22 | 24 |
| (...skipping 26 matching lines...) Expand all Loading... |
| 49 PROPERTY_READ = 1 << 1, | 51 PROPERTY_READ = 1 << 1, |
| 50 PROPERTY_WRITE_WITHOUT_RESPONSE = 1 << 2, | 52 PROPERTY_WRITE_WITHOUT_RESPONSE = 1 << 2, |
| 51 PROPERTY_WRITE = 1 << 3, | 53 PROPERTY_WRITE = 1 << 3, |
| 52 PROPERTY_NOTIFY = 1 << 4, | 54 PROPERTY_NOTIFY = 1 << 4, |
| 53 PROPERTY_INDICATE = 1 << 5, | 55 PROPERTY_INDICATE = 1 << 5, |
| 54 PROPERTY_AUTHENTICATED_SIGNED_WRITES = 1 << 6, | 56 PROPERTY_AUTHENTICATED_SIGNED_WRITES = 1 << 6, |
| 55 PROPERTY_EXTENDED_PROPERTIES = 1 << 7, | 57 PROPERTY_EXTENDED_PROPERTIES = 1 << 7, |
| 56 PROPERTY_RELIABLE_WRITE = 1 << 8, | 58 PROPERTY_RELIABLE_WRITE = 1 << 8, |
| 57 PROPERTY_WRITABLE_AUXILIARIES = 1 << 9 | 59 PROPERTY_WRITABLE_AUXILIARIES = 1 << 9 |
| 58 }; | 60 }; |
| 59 typedef uint32 Properties; | 61 typedef uint32_t Properties; |
| 60 | 62 |
| 61 // Values representing read, write, and encryption permissions for a | 63 // Values representing read, write, and encryption permissions for a |
| 62 // characteristic's value. While attribute permissions for all GATT | 64 // characteristic's value. While attribute permissions for all GATT |
| 63 // definitions have been set by the Bluetooth specification, characteristic | 65 // definitions have been set by the Bluetooth specification, characteristic |
| 64 // value permissions are left up to the higher-level profile. | 66 // value permissions are left up to the higher-level profile. |
| 65 // | 67 // |
| 66 // Attribute permissions are distinct from the characteristic properties. For | 68 // Attribute permissions are distinct from the characteristic properties. For |
| 67 // example, a characteristic may have the property |PROPERTY_READ| to make | 69 // example, a characteristic may have the property |PROPERTY_READ| to make |
| 68 // clients know that it is possible to read the characteristic value and have | 70 // clients know that it is possible to read the characteristic value and have |
| 69 // the permission |PERMISSION_READ_ENCRYPTED| to require a secure connection. | 71 // the permission |PERMISSION_READ_ENCRYPTED| to require a secure connection. |
| 70 // It is up to the application to properly specify the permissions and | 72 // It is up to the application to properly specify the permissions and |
| 71 // properties for a local characteristic. | 73 // properties for a local characteristic. |
| 72 enum Permission { | 74 enum Permission { |
| 73 PERMISSION_NONE = 0, | 75 PERMISSION_NONE = 0, |
| 74 PERMISSION_READ = 1 << 0, | 76 PERMISSION_READ = 1 << 0, |
| 75 PERMISSION_WRITE = 1 << 1, | 77 PERMISSION_WRITE = 1 << 1, |
| 76 PERMISSION_READ_ENCRYPTED = 1 << 2, | 78 PERMISSION_READ_ENCRYPTED = 1 << 2, |
| 77 PERMISSION_WRITE_ENCRYPTED = 1 << 3 | 79 PERMISSION_WRITE_ENCRYPTED = 1 << 3 |
| 78 }; | 80 }; |
| 79 typedef uint32 Permissions; | 81 typedef uint32_t Permissions; |
| 80 | 82 |
| 81 // The ErrorCallback is used by methods to asynchronously report errors. | 83 // The ErrorCallback is used by methods to asynchronously report errors. |
| 82 typedef base::Callback<void(BluetoothGattService::GattErrorCode)> | 84 typedef base::Callback<void(BluetoothGattService::GattErrorCode)> |
| 83 ErrorCallback; | 85 ErrorCallback; |
| 84 | 86 |
| 85 // The ValueCallback is used to return the value of a remote characteristic | 87 // The ValueCallback is used to return the value of a remote characteristic |
| 86 // upon a read request. | 88 // upon a read request. |
| 87 typedef base::Callback<void(const std::vector<uint8>&)> ValueCallback; | 89 typedef base::Callback<void(const std::vector<uint8_t>&)> ValueCallback; |
| 88 | 90 |
| 89 // The NotifySessionCallback is used to return sessions after they have | 91 // The NotifySessionCallback is used to return sessions after they have |
| 90 // been successfully started. | 92 // been successfully started. |
| 91 typedef base::Callback<void(scoped_ptr<BluetoothGattNotifySession>)> | 93 typedef base::Callback<void(scoped_ptr<BluetoothGattNotifySession>)> |
| 92 NotifySessionCallback; | 94 NotifySessionCallback; |
| 93 | 95 |
| 94 // Constructs a BluetoothGattCharacteristic that can be associated with a | 96 // Constructs a BluetoothGattCharacteristic that can be associated with a |
| 95 // local GATT service when the adapter is in the peripheral role. To | 97 // local GATT service when the adapter is in the peripheral role. To |
| 96 // associate the returned characteristic with a service, add it to a local | 98 // associate the returned characteristic with a service, add it to a local |
| 97 // service by calling BluetoothGattService::AddCharacteristic. | 99 // service by calling BluetoothGattService::AddCharacteristic. |
| 98 // | 100 // |
| 99 // This method constructs a characteristic with UUID |uuid|, initial cached | 101 // This method constructs a characteristic with UUID |uuid|, initial cached |
| 100 // value |value|, properties |properties|, and permissions |permissions|. | 102 // value |value|, properties |properties|, and permissions |permissions|. |
| 101 // |value| will be cached and returned for read requests and automatically set | 103 // |value| will be cached and returned for read requests and automatically set |
| 102 // for write requests by default, unless an instance of | 104 // for write requests by default, unless an instance of |
| 103 // BluetoothGattService::Delegate has been provided to the associated | 105 // BluetoothGattService::Delegate has been provided to the associated |
| 104 // BluetoothGattService instance, in which case the delegate will handle read | 106 // BluetoothGattService instance, in which case the delegate will handle read |
| 105 // and write requests. | 107 // and write requests. |
| 106 // | 108 // |
| 107 // NOTE: Don't explicitly set |PROPERTY_EXTENDED_PROPERTIES| in |properties|. | 109 // NOTE: Don't explicitly set |PROPERTY_EXTENDED_PROPERTIES| in |properties|. |
| 108 // Instead, create and add a BluetoothGattDescriptor that represents the | 110 // Instead, create and add a BluetoothGattDescriptor that represents the |
| 109 // "Characteristic Extended Properties" descriptor and this will automatically | 111 // "Characteristic Extended Properties" descriptor and this will automatically |
| 110 // set the correspoding bit in the characteristic's properties field. If | 112 // set the correspoding bit in the characteristic's properties field. If |
| 111 // |properties| has |PROPERTY_EXTENDED_PROPERTIES| set, it will be ignored. | 113 // |properties| has |PROPERTY_EXTENDED_PROPERTIES| set, it will be ignored. |
| 112 static BluetoothGattCharacteristic* Create(const BluetoothUUID& uuid, | 114 static BluetoothGattCharacteristic* Create(const BluetoothUUID& uuid, |
| 113 const std::vector<uint8>& value, | 115 const std::vector<uint8_t>& value, |
| 114 Properties properties, | 116 Properties properties, |
| 115 Permissions permissions); | 117 Permissions permissions); |
| 116 | 118 |
| 117 // Identifier used to uniquely identify a GATT characteristic object. This is | 119 // Identifier used to uniquely identify a GATT characteristic object. This is |
| 118 // different from the characteristic UUID: while multiple characteristics with | 120 // different from the characteristic UUID: while multiple characteristics with |
| 119 // the same UUID can exist on a Bluetooth device, the identifier returned from | 121 // the same UUID can exist on a Bluetooth device, the identifier returned from |
| 120 // this method is unique among all characteristics on the adapter. The | 122 // this method is unique among all characteristics on the adapter. The |
| 121 // contents of the identifier are platform specific. | 123 // contents of the identifier are platform specific. |
| 122 virtual std::string GetIdentifier() const = 0; | 124 virtual std::string GetIdentifier() const = 0; |
| 123 | 125 |
| 124 // The Bluetooth-specific UUID of the characteristic. | 126 // The Bluetooth-specific UUID of the characteristic. |
| 125 virtual BluetoothUUID GetUUID() const = 0; | 127 virtual BluetoothUUID GetUUID() const = 0; |
| 126 | 128 |
| 127 // Returns true, if this characteristic is hosted locally. If false, then this | 129 // Returns true, if this characteristic is hosted locally. If false, then this |
| 128 // instance represents a remote GATT characteristic. | 130 // instance represents a remote GATT characteristic. |
| 129 virtual bool IsLocal() const = 0; | 131 virtual bool IsLocal() const = 0; |
| 130 | 132 |
| 131 // Returns the value of the characteristic. For remote characteristics, this | 133 // Returns the value of the characteristic. For remote characteristics, this |
| 132 // is the most recently cached value. For local characteristics, this is the | 134 // is the most recently cached value. For local characteristics, this is the |
| 133 // most recently updated value or the value retrieved from the delegate. | 135 // most recently updated value or the value retrieved from the delegate. |
| 134 virtual const std::vector<uint8>& GetValue() const = 0; | 136 virtual const std::vector<uint8_t>& GetValue() const = 0; |
| 135 | 137 |
| 136 // Returns a pointer to the GATT service this characteristic belongs to. | 138 // Returns a pointer to the GATT service this characteristic belongs to. |
| 137 virtual BluetoothGattService* GetService() const = 0; | 139 virtual BluetoothGattService* GetService() const = 0; |
| 138 | 140 |
| 139 // Returns the bitmask of characteristic properties. | 141 // Returns the bitmask of characteristic properties. |
| 140 virtual Properties GetProperties() const = 0; | 142 virtual Properties GetProperties() const = 0; |
| 141 | 143 |
| 142 // Returns the bitmask of characteristic attribute permissions. | 144 // Returns the bitmask of characteristic attribute permissions. |
| 143 virtual Permissions GetPermissions() const = 0; | 145 virtual Permissions GetPermissions() const = 0; |
| 144 | 146 |
| (...skipping 21 matching lines...) Expand all Loading... |
| 166 // For locally hosted characteristics, updates the characteristic's value. | 168 // For locally hosted characteristics, updates the characteristic's value. |
| 167 // This will update the value that is visible to remote devices and send out | 169 // This will update the value that is visible to remote devices and send out |
| 168 // any notifications and indications that have been configured. This method | 170 // any notifications and indications that have been configured. This method |
| 169 // can be used in place of, and in conjunction with, | 171 // can be used in place of, and in conjunction with, |
| 170 // BluetoothGattService::Delegate methods to send updates to remote devices, | 172 // BluetoothGattService::Delegate methods to send updates to remote devices, |
| 171 // or simply to set update the cached value for read requests without having | 173 // or simply to set update the cached value for read requests without having |
| 172 // to implement the delegate methods. | 174 // to implement the delegate methods. |
| 173 // | 175 // |
| 174 // This method only makes sense for local characteristics and does nothing and | 176 // This method only makes sense for local characteristics and does nothing and |
| 175 // returns false if this instance represents a remote characteristic. | 177 // returns false if this instance represents a remote characteristic. |
| 176 virtual bool UpdateValue(const std::vector<uint8>& value) = 0; | 178 virtual bool UpdateValue(const std::vector<uint8_t>& value) = 0; |
| 177 | 179 |
| 178 // Starts a notify session for the remote characteristic, if it supports | 180 // Starts a notify session for the remote characteristic, if it supports |
| 179 // notifications/indications. On success, the characteristic starts sending | 181 // notifications/indications. On success, the characteristic starts sending |
| 180 // value notifications and |callback| is called with a session object whose | 182 // value notifications and |callback| is called with a session object whose |
| 181 // ownership belongs to the caller. |error_callback| is called on errors. | 183 // ownership belongs to the caller. |error_callback| is called on errors. |
| 182 virtual void StartNotifySession(const NotifySessionCallback& callback, | 184 virtual void StartNotifySession(const NotifySessionCallback& callback, |
| 183 const ErrorCallback& error_callback) = 0; | 185 const ErrorCallback& error_callback) = 0; |
| 184 | 186 |
| 185 // Sends a read request to a remote characteristic to read its value. | 187 // Sends a read request to a remote characteristic to read its value. |
| 186 // |callback| is called to return the read value on success and | 188 // |callback| is called to return the read value on success and |
| 187 // |error_callback| is called for failures. | 189 // |error_callback| is called for failures. |
| 188 virtual void ReadRemoteCharacteristic( | 190 virtual void ReadRemoteCharacteristic( |
| 189 const ValueCallback& callback, | 191 const ValueCallback& callback, |
| 190 const ErrorCallback& error_callback) = 0; | 192 const ErrorCallback& error_callback) = 0; |
| 191 | 193 |
| 192 // Sends a write request to a remote characteristic, to modify the | 194 // Sends a write request to a remote characteristic, to modify the |
| 193 // characteristic's value with the new value |new_value|. |callback| is | 195 // characteristic's value with the new value |new_value|. |callback| is |
| 194 // called to signal success and |error_callback| for failures. This method | 196 // called to signal success and |error_callback| for failures. This method |
| 195 // only applies to remote characteristics and will fail for those that are | 197 // only applies to remote characteristics and will fail for those that are |
| 196 // locally hosted. | 198 // locally hosted. |
| 197 virtual void WriteRemoteCharacteristic( | 199 virtual void WriteRemoteCharacteristic( |
| 198 const std::vector<uint8>& new_value, | 200 const std::vector<uint8_t>& new_value, |
| 199 const base::Closure& callback, | 201 const base::Closure& callback, |
| 200 const ErrorCallback& error_callback) = 0; | 202 const ErrorCallback& error_callback) = 0; |
| 201 | 203 |
| 202 protected: | 204 protected: |
| 203 BluetoothGattCharacteristic(); | 205 BluetoothGattCharacteristic(); |
| 204 virtual ~BluetoothGattCharacteristic(); | 206 virtual ~BluetoothGattCharacteristic(); |
| 205 | 207 |
| 206 private: | 208 private: |
| 207 DISALLOW_COPY_AND_ASSIGN(BluetoothGattCharacteristic); | 209 DISALLOW_COPY_AND_ASSIGN(BluetoothGattCharacteristic); |
| 208 }; | 210 }; |
| 209 | 211 |
| 210 } // namespace device | 212 } // namespace device |
| 211 | 213 |
| 212 #endif // DEVICE_BLUETOOTH_BLUETOOTH_GATT_CHARACTERISTIC_H_ | 214 #endif // DEVICE_BLUETOOTH_BLUETOOTH_GATT_CHARACTERISTIC_H_ |
| OLD | NEW |