Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(176)

Side by Side Diff: device/bluetooth/bluetooth_remote_gatt_characteristic.h

Issue 1898643002: Refactor device::BluetoothGattXXX classes to split into remote/local. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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_REMOTE_GATT_CHARACTERISTIC_H_
6 #define DEVICE_BLUETOOTH_BLUETOOTH_GATT_CHARACTERISTIC_H_ 6 #define DEVICE_BLUETOOTH_BLUETOOTH_REMOTE_GATT_CHARACTERISTIC_H_
7 7
8 #include <stdint.h> 8 #include <stdint.h>
9
10 #include <memory>
11 #include <string> 9 #include <string>
12 #include <vector> 10 #include <vector>
13 11
14 #include "base/callback.h" 12 #include "base/callback.h"
13 #include "base/callback_forward.h"
15 #include "base/macros.h" 14 #include "base/macros.h"
16 #include "device/bluetooth/bluetooth_export.h" 15 #include "device/bluetooth/bluetooth_export.h"
17 #include "device/bluetooth/bluetooth_gatt_service.h" 16 #include "device/bluetooth/bluetooth_gatt_characteristic.h"
18 #include "device/bluetooth/bluetooth_uuid.h" 17 #include "device/bluetooth/bluetooth_uuid.h"
19 18
20 namespace device { 19 namespace device {
21 20
22 class BluetoothGattDescriptor;
23 class BluetoothGattNotifySession; 21 class BluetoothGattNotifySession;
22 class BluetoothRemoteGattDescriptor;
23 class BluetoothRemoteGattService;
24 24
25 // BluetoothGattCharacteristic represents a local or remote GATT characteristic. 25 // BluetoothRemoteGattCharacteristic represents a remote GATT characteristic.
26 // A GATT characteristic is a basic data element used to construct a GATT 26 // This class is used to represent GATT characteristics that belong to a service
27 // service. Hence, instances of a BluetoothGattCharacteristic are associated 27 // hosted by a remote device. In this case the characteristic will be
28 // with a BluetoothGattService. There are two ways in which this class is used: 28 // constructed by the subsystem.
29 // 29 //
30 // 1. To represent GATT characteristics that belong to a service hosted by a 30 // Note: We use virtual inheritance on the GATT characteristic since it will be
31 // remote device. In this case the characteristic will be constructed by 31 // inherited by platform specific versions of the GATT characteristic classes
32 // the subsystem. 32 // also. The platform specific remote GATT characteristic classes will inherit
33 // 2. To represent GATT characteristics that belong to a locally hosted 33 // both this class and their GATT characteristic class, hence causing an
34 // service. To achieve this, users can construct instances of 34 // inheritance diamond.
35 // BluetoothGattCharacteristic directly and add it to the desired 35 class DEVICE_BLUETOOTH_EXPORT BluetoothRemoteGattCharacteristic
36 // BluetoothGattService instance that represents a local service. 36 : public virtual BluetoothGattCharacteristic {
37 class DEVICE_BLUETOOTH_EXPORT BluetoothGattCharacteristic {
38 public: 37 public:
39 // Values representing the possible properties of a characteristic, which
40 // define how the characteristic can be used. Each of these properties serve
41 // a role as defined in the Bluetooth Specification.
42 // |PROPERTY_EXTENDED_PROPERTIES| is a special property that, if present,
43 // indicates that there is a characteristic descriptor (namely the
44 // "Characteristic Extended Properties Descriptor" with UUID 0x2900) that
45 // contains additional properties pertaining to the characteristic.
46 // The properties "ReliableWrite| and |WriteAuxiliaries| are retrieved from
47 // that characteristic.
48 enum Property {
49 PROPERTY_NONE = 0,
50 PROPERTY_BROADCAST = 1 << 0,
51 PROPERTY_READ = 1 << 1,
52 PROPERTY_WRITE_WITHOUT_RESPONSE = 1 << 2,
53 PROPERTY_WRITE = 1 << 3,
54 PROPERTY_NOTIFY = 1 << 4,
55 PROPERTY_INDICATE = 1 << 5,
56 PROPERTY_AUTHENTICATED_SIGNED_WRITES = 1 << 6,
57 PROPERTY_EXTENDED_PROPERTIES = 1 << 7,
58 PROPERTY_RELIABLE_WRITE = 1 << 8,
59 PROPERTY_WRITABLE_AUXILIARIES = 1 << 9
60 };
61 typedef uint32_t Properties;
62
63 // Values representing read, write, and encryption permissions for a
64 // characteristic's value. While attribute permissions for all GATT
65 // definitions have been set by the Bluetooth specification, characteristic
66 // value permissions are left up to the higher-level profile.
67 //
68 // Attribute permissions are distinct from the characteristic properties. For
69 // example, a characteristic may have the property |PROPERTY_READ| to make
70 // clients know that it is possible to read the characteristic value and have
71 // the permission |PERMISSION_READ_ENCRYPTED| to require a secure connection.
72 // It is up to the application to properly specify the permissions and
73 // properties for a local characteristic.
74 enum Permission {
75 PERMISSION_NONE = 0,
76 PERMISSION_READ = 1 << 0,
77 PERMISSION_WRITE = 1 << 1,
78 PERMISSION_READ_ENCRYPTED = 1 << 2,
79 PERMISSION_WRITE_ENCRYPTED = 1 << 3
80 };
81 typedef uint32_t Permissions;
82
83 // The ErrorCallback is used by methods to asynchronously report errors.
84 typedef base::Callback<void(BluetoothGattService::GattErrorCode)>
85 ErrorCallback;
86
87 // The ValueCallback is used to return the value of a remote characteristic 38 // The ValueCallback is used to return the value of a remote characteristic
88 // upon a read request. 39 // upon a read request.
89 typedef base::Callback<void(const std::vector<uint8_t>&)> ValueCallback; 40 typedef base::Callback<void(const std::vector<uint8_t>&)> ValueCallback;
90 41
91 // The NotifySessionCallback is used to return sessions after they have 42 // The NotifySessionCallback is used to return sessions after they have
92 // been successfully started. 43 // been successfully started.
93 typedef base::Callback<void(std::unique_ptr<BluetoothGattNotifySession>)> 44 typedef base::Callback<void(std::unique_ptr<BluetoothGattNotifySession>)>
94 NotifySessionCallback; 45 NotifySessionCallback;
95 46
96 // Constructs a BluetoothGattCharacteristic that can be associated with a
97 // local GATT service when the adapter is in the peripheral role. To
98 // associate the returned characteristic with a service, add it to a local
99 // service by calling BluetoothGattService::AddCharacteristic.
100 //
101 // This method constructs a characteristic with UUID |uuid|, initial cached
102 // value |value|, properties |properties|, and permissions |permissions|.
103 // |value| will be cached and returned for read requests and automatically set
104 // for write requests by default, unless an instance of
105 // BluetoothGattService::Delegate has been provided to the associated
106 // BluetoothGattService instance, in which case the delegate will handle read
107 // and write requests.
108 //
109 // NOTE: Don't explicitly set |PROPERTY_EXTENDED_PROPERTIES| in |properties|.
110 // Instead, create and add a BluetoothGattDescriptor that represents the
111 // "Characteristic Extended Properties" descriptor and this will automatically
112 // set the correspoding bit in the characteristic's properties field. If
113 // |properties| has |PROPERTY_EXTENDED_PROPERTIES| set, it will be ignored.
114 static BluetoothGattCharacteristic* Create(const BluetoothUUID& uuid,
115 const std::vector<uint8_t>& value,
116 Properties properties,
117 Permissions permissions);
118
119 // Identifier used to uniquely identify a GATT characteristic object. This is
120 // different from the characteristic UUID: while multiple characteristics with
121 // the same UUID can exist on a Bluetooth device, the identifier returned from
122 // this method is unique among all characteristics on the adapter. The
123 // contents of the identifier are platform specific.
124 virtual std::string GetIdentifier() const = 0;
125
126 // The Bluetooth-specific UUID of the characteristic.
127 virtual BluetoothUUID GetUUID() const = 0;
128
129 // Returns true, if this characteristic is hosted locally. If false, then this
130 // instance represents a remote GATT characteristic.
131 virtual bool IsLocal() const = 0;
132
133 // Returns the value of the characteristic. For remote characteristics, this 47 // Returns the value of the characteristic. For remote characteristics, this
134 // is the most recently cached value. For local characteristics, this is the 48 // is the most recently cached value. For local characteristics, this is the
135 // most recently updated value or the value retrieved from the delegate. 49 // most recently updated value or the value retrieved from the delegate.
136 virtual const std::vector<uint8_t>& GetValue() const = 0; 50 virtual const std::vector<uint8_t>& GetValue() const = 0;
137 51
138 // Returns a pointer to the GATT service this characteristic belongs to. 52 // Returns a pointer to the GATT service this characteristic belongs to.
139 virtual BluetoothGattService* GetService() const = 0; 53 virtual BluetoothRemoteGattService* GetService() const = 0;
140
141 // Returns the bitmask of characteristic properties.
142 virtual Properties GetProperties() const = 0;
143
144 // Returns the bitmask of characteristic attribute permissions.
145 virtual Permissions GetPermissions() const = 0;
146 54
147 // Returns whether or not this characteristic is currently sending value 55 // Returns whether or not this characteristic is currently sending value
148 // updates in the form of a notification or indication. 56 // updates in the form of a notification or indication.
149 virtual bool IsNotifying() const = 0; 57 virtual bool IsNotifying() const = 0;
150 58
151 // Returns the list of GATT characteristic descriptors that provide more 59 // Returns the list of GATT characteristic descriptors that provide more
152 // information about this characteristic. 60 // information about this characteristic.
153 virtual std::vector<BluetoothGattDescriptor*> 61 virtual std::vector<BluetoothRemoteGattDescriptor*> GetDescriptors()
154 GetDescriptors() const = 0; 62 const = 0;
155 63
156 // Returns the GATT characteristic descriptor with identifier |identifier| if 64 // Returns the GATT characteristic descriptor with identifier |identifier| if
157 // it belongs to this GATT characteristic. 65 // it belongs to this GATT characteristic.
158 virtual BluetoothGattDescriptor* GetDescriptor( 66 virtual BluetoothRemoteGattDescriptor* GetDescriptor(
159 const std::string& identifier) const = 0; 67 const std::string& identifier) const = 0;
160 68
161 // Returns the GATT characteristic descriptors that match |uuid|. There may be 69 // Returns the GATT characteristic descriptors that match |uuid|. There may be
162 // multiple, as illustrated by Core Bluetooth Specification [V4.2 Vol 3 Part G 70 // multiple, as illustrated by Core Bluetooth Specification [V4.2 Vol 3 Part G
163 // 3.3.3.5 Characteristic Presentation Format]. 71 // 3.3.3.5 Characteristic Presentation Format].
164 std::vector<BluetoothGattDescriptor*> GetDescriptorsByUUID( 72 std::vector<BluetoothRemoteGattDescriptor*> GetDescriptorsByUUID(
165 const BluetoothUUID& uuid); 73 const BluetoothUUID& uuid);
166 74
167 // Adds a characteristic descriptor to the locally hosted characteristic
168 // represented by this instance. This method only makes sense for local
169 // characteristics and won't have an effect if this instance represents a
170 // remote GATT service and will return false. This method takes ownership
171 // of |descriptor|.
172 virtual bool AddDescriptor(BluetoothGattDescriptor* descriptor) = 0;
173
174 // For locally hosted characteristics, updates the characteristic's value.
175 // This will update the value that is visible to remote devices and send out
176 // any notifications and indications that have been configured. This method
177 // can be used in place of, and in conjunction with,
178 // BluetoothGattService::Delegate methods to send updates to remote devices,
179 // or simply to set update the cached value for read requests without having
180 // to implement the delegate methods.
181 //
182 // This method only makes sense for local characteristics and does nothing and
183 // returns false if this instance represents a remote characteristic.
184 virtual bool UpdateValue(const std::vector<uint8_t>& value) = 0;
185
186 // Starts a notify session for the remote characteristic, if it supports 75 // Starts a notify session for the remote characteristic, if it supports
187 // notifications/indications. On success, the characteristic starts sending 76 // notifications/indications. On success, the characteristic starts sending
188 // value notifications and |callback| is called with a session object whose 77 // value notifications and |callback| is called with a session object whose
189 // ownership belongs to the caller. |error_callback| is called on errors. 78 // ownership belongs to the caller. |error_callback| is called on errors.
190 // 79 //
191 // Writes to the Client Characteristic Configuration descriptor to enable 80 // Writes to the Client Characteristic Configuration descriptor to enable
192 // notifications/indications. Core Bluetooth Specification [V4.2 Vol 3 Part G 81 // notifications/indications. Core Bluetooth Specification [V4.2 Vol 3 Part G
193 // Section 3.3.1.1. Characteristic Properties] requires this descriptor to be 82 // Section 3.3.1.1. Characteristic Properties] requires this descriptor to be
194 // present when notifications/indications are supported. If the descriptor is 83 // present when notifications/indications are supported. If the descriptor is
195 // not present |error_callback| will be run. 84 // not present |error_callback| will be run.
(...skipping 11 matching lines...) Expand all
207 // characteristic's value with the new value |new_value|. |callback| is 96 // characteristic's value with the new value |new_value|. |callback| is
208 // called to signal success and |error_callback| for failures. This method 97 // called to signal success and |error_callback| for failures. This method
209 // only applies to remote characteristics and will fail for those that are 98 // only applies to remote characteristics and will fail for those that are
210 // locally hosted. 99 // locally hosted.
211 virtual void WriteRemoteCharacteristic( 100 virtual void WriteRemoteCharacteristic(
212 const std::vector<uint8_t>& new_value, 101 const std::vector<uint8_t>& new_value,
213 const base::Closure& callback, 102 const base::Closure& callback,
214 const ErrorCallback& error_callback) = 0; 103 const ErrorCallback& error_callback) = 0;
215 104
216 protected: 105 protected:
217 BluetoothGattCharacteristic(); 106 BluetoothRemoteGattCharacteristic();
218 virtual ~BluetoothGattCharacteristic(); 107 ~BluetoothRemoteGattCharacteristic() override;
219 108
220 private: 109 private:
221 DISALLOW_COPY_AND_ASSIGN(BluetoothGattCharacteristic); 110 DISALLOW_COPY_AND_ASSIGN(BluetoothRemoteGattCharacteristic);
222 }; 111 };
223 112
224 } // namespace device 113 } // namespace device
225 114
226 #endif // DEVICE_BLUETOOTH_BLUETOOTH_GATT_CHARACTERISTIC_H_ 115 #endif // DEVICE_BLUETOOTH_BLUETOOTH_REMOTE_GATT_CHARACTERISTIC_H_
OLDNEW
« no previous file with comments | « device/bluetooth/bluetooth_pairing_bluez.cc ('k') | device/bluetooth/bluetooth_remote_gatt_characteristic.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698