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_SERVICE_H_ | 5 #ifndef DEVICE_BLUETOOTH_BLUETOOTH_GATT_SERVICE_H_ |
6 #define DEVICE_BLUETOOTH_BLUETOOTH_GATT_SERVICE_H_ | 6 #define DEVICE_BLUETOOTH_BLUETOOTH_GATT_SERVICE_H_ |
7 | 7 |
8 #include <vector> | 8 #include <vector> |
9 | 9 |
10 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
125 }; | 125 }; |
126 | 126 |
127 // Interface for observing changes from a BluetoothGattService. Properties | 127 // Interface for observing changes from a BluetoothGattService. Properties |
128 // of remote services are received asynchronously. The Observer interface can | 128 // of remote services are received asynchronously. The Observer interface can |
129 // be used to be notified when the initial values of a service are received | 129 // be used to be notified when the initial values of a service are received |
130 // as well as when successive changes occur during its life cycle. | 130 // as well as when successive changes occur during its life cycle. |
131 class Observer { | 131 class Observer { |
132 public: | 132 public: |
133 // Called when properties of the remote GATT service |service| have changed. | 133 // Called when properties of the remote GATT service |service| have changed. |
134 // This will get called for properties such as UUID, as well as for changes | 134 // This will get called for properties such as UUID, as well as for changes |
135 // to the list of known characteristics. Observers should read all GATT | 135 // to the list of known characteristics and included services. Observers |
136 // characteristic and descriptors objects and do any necessary set up | 136 // should read all GATT characteristic and descriptors objects and do any |
137 // required for a changed service. | 137 // necessary set up required for a changed service. This method may be |
| 138 // called several times, especially when the service is discovered for the |
| 139 // first time. It will be called for each characteristic that is discovered |
| 140 // or removed. Hence this method should be used to check whether or not all |
| 141 // characteristics of a service have been discovered that correspond to the |
| 142 // profile implemented by the Observer. |
138 virtual void GattServiceChanged(BluetoothGattService* service) {} | 143 virtual void GattServiceChanged(BluetoothGattService* service) {} |
139 | 144 |
140 // Called when the value of a characteristic has been retrieved or updated | 145 // Called when the remote GATT characteristic |characteristic| belonging to |
141 // via a notification or inidication. | 146 // GATT service |service| has been discovered. Use this to issue any initial |
142 virtual void CharacteristicValueChanged( | 147 // read/write requests to the characteristic but don't cache the pointer as |
| 148 // it may become invalid. Instead, use the specially assigned identifier |
| 149 // to obtain a characteristic and cache that identifier as necessary, as it |
| 150 // can be used to retrieve the characteristic from its GATT service. The |
| 151 // number of characteristics with the same UUID belonging to a service |
| 152 // depends on the particular profile the remote device implements, hence the |
| 153 // client of a GATT based profile will usually operate on the whole set of |
| 154 // characteristics and not just one. |
| 155 // |
| 156 // This method will always be followed by a call to GattServiceChanged, |
| 157 // which can be used by observers to get all the characteristics of a |
| 158 // service and perform the necessary updates. GattCharacteristicAdded exists |
| 159 // mostly for convenience. |
| 160 virtual void GattCharacteristicAdded( |
| 161 BluetoothGattService* service, |
| 162 BluetoothGattCharacteristic* characteristic) {} |
| 163 |
| 164 // Called when a GATT characteristic |characteristic| belonging to GATT |
| 165 // service |service| has been removed. This method is for convenience |
| 166 // and will be followed by a call to GattServiceChanged (except when called |
| 167 // after the service gets removed) which should be used for bootstrapping a |
| 168 // GATT based profile. See the documentation of GattCharacteristicAdded and |
| 169 // GattServiceChanged for more information. Try to obtain the service from |
| 170 // its device to see whether or not the service has been removed. |
| 171 virtual void GattCharacteristicRemoved( |
| 172 BluetoothGattService* service, |
| 173 BluetoothGattCharacteristic* characteristic) {} |
| 174 |
| 175 // Called when the value of a characteristic has changed. This might be a |
| 176 // result of a read/write request to, or a notification/indication from, a |
| 177 // remote GATT characteristic. |
| 178 virtual void GattCharacteristicValueChanged( |
143 BluetoothGattService* service, | 179 BluetoothGattService* service, |
144 BluetoothGattCharacteristic* characteristic, | 180 BluetoothGattCharacteristic* characteristic, |
145 const std::vector<uint8>& value) {} | 181 const std::vector<uint8>& value) {} |
146 }; | 182 }; |
147 | 183 |
148 // The ErrorCallback is used by methods to asynchronously report errors. | 184 // The ErrorCallback is used by methods to asynchronously report errors. |
149 typedef base::Closure ErrorCallback; | 185 typedef base::Closure ErrorCallback; |
150 | 186 |
151 virtual ~BluetoothGattService(); | 187 virtual ~BluetoothGattService(); |
152 | 188 |
153 // Adds and removes observers for events on this GATT service. If monitoring | 189 // Adds and removes observers for events on this GATT service. If monitoring |
154 // multiple services, check the |service| parameter of observer methods to | 190 // multiple services, check the |service| parameter of observer methods to |
155 // determine which service is issuing the event. | 191 // determine which service is issuing the event. |
156 virtual void AddObserver(Observer* observer) = 0; | 192 virtual void AddObserver(Observer* observer) = 0; |
157 virtual void RemoveObserver(Observer* observer) = 0; | 193 virtual void RemoveObserver(Observer* observer) = 0; |
158 | 194 |
159 // Constructs a BluetoothGattService that can be locally hosted when the local | 195 // Constructs a BluetoothGattService that can be locally hosted when the local |
160 // adapter is in the peripheral role. The resulting object can then be made | 196 // adapter is in the peripheral role. The resulting object can then be made |
161 // available by calling the "Register" method. This method constructs a | 197 // available by calling the "Register" method. This method constructs a |
162 // service with UUID |uuid|. Whether the constructed service is primary or | 198 // service with UUID |uuid|. Whether the constructed service is primary or |
163 // secondary is determined by |is_primary|. |delegate| is used to send certain | 199 // secondary is determined by |is_primary|. |delegate| is used to send certain |
164 // peripheral role events. If |delegate| is NULL, then this service will | 200 // peripheral role events. If |delegate| is NULL, then this service will |
165 // employ a default behavior when responding to read and write requests based | 201 // employ a default behavior when responding to read and write requests based |
166 // on the cached value of its characteristics and descriptors at a given time. | 202 // on the cached value of its characteristics and descriptors at a given time. |
167 static BluetoothGattService* Create(const BluetoothUUID& uuid, | 203 static BluetoothGattService* Create(const BluetoothUUID& uuid, |
168 bool is_primary, | 204 bool is_primary, |
169 Delegate* delegate); | 205 Delegate* delegate); |
170 | 206 |
171 // Identifier used to uniquely identify a GATT service object. This different | 207 // Identifier used to uniquely identify a GATT service object. This is |
172 // from the service UUID: while multiple services with the same UUID can exist | 208 // different from the service UUID: while multiple services with the same UUID |
173 // on a Bluetooth device, the identifier returned from this method is unique | 209 // can exist on a Bluetooth device, the identifier returned from this method |
174 // among all services of a device. The contents of the identifier are platform | 210 // is unique among all services of a device. The contents of the identifier |
175 // specific. | 211 // are platform specific. |
176 virtual std::string GetIdentifier() const = 0; | 212 virtual std::string GetIdentifier() const = 0; |
177 | 213 |
178 // The Bluetooth-specific UUID of the service. | 214 // The Bluetooth-specific UUID of the service. |
179 virtual BluetoothUUID GetUUID() const = 0; | 215 virtual BluetoothUUID GetUUID() const = 0; |
180 | 216 |
181 // Returns true, if this service hosted locally. If false, then this service | 217 // Returns true, if this service hosted locally. If false, then this service |
182 // represents a remote GATT service. | 218 // represents a remote GATT service. |
183 virtual bool IsLocal() const = 0; | 219 virtual bool IsLocal() const = 0; |
184 | 220 |
185 // Indicates whether the type of this service is primary or secondary. A | 221 // Indicates whether the type of this service is primary or secondary. A |
186 // primary service describes the primary function of the peripheral that | 222 // primary service describes the primary function of the peripheral that |
187 // hosts it, while a secondary service only makes sense in the presence of a | 223 // hosts it, while a secondary service only makes sense in the presence of a |
188 // primary service. A primary service may include other primary or secondary | 224 // primary service. A primary service may include other primary or secondary |
189 // services. | 225 // services. |
190 virtual bool IsPrimary() const = 0; | 226 virtual bool IsPrimary() const = 0; |
191 | 227 |
192 // List of characteristics that belong to this service. | 228 // List of characteristics that belong to this service. |
193 virtual const std::vector<BluetoothGattCharacteristic*>& | 229 virtual std::vector<BluetoothGattCharacteristic*> |
194 GetCharacteristics() const = 0; | 230 GetCharacteristics() const = 0; |
195 | 231 |
196 // List of GATT services that are included by this service. | 232 // List of GATT services that are included by this service. |
197 virtual const std::vector<BluetoothGattService*>& | 233 virtual std::vector<BluetoothGattService*> |
198 GetIncludedServices() const = 0; | 234 GetIncludedServices() const = 0; |
199 | 235 |
| 236 // Returns the GATT characteristic with identifier |identifier| if it belongs |
| 237 // to this GATT service. |
| 238 virtual BluetoothGattCharacteristic* GetCharacteristic( |
| 239 const std::string& identifier) = 0; |
| 240 |
200 // Adds characteristics and included services to the local attribute hierarchy | 241 // Adds characteristics and included services to the local attribute hierarchy |
201 // represented by this service. These methods only make sense for local | 242 // represented by this service. These methods only make sense for local |
202 // services and won't have an effect if this instance represents a remote | 243 // services and won't have an effect if this instance represents a remote |
203 // GATT service and will return false. While ownership of added | 244 // GATT service and will return false. While ownership of added |
204 // characteristics are taken over by the service, ownership of an included | 245 // characteristics are taken over by the service, ownership of an included |
205 // service is not taken. | 246 // service is not taken. |
206 virtual bool AddCharacteristic( | 247 virtual bool AddCharacteristic( |
207 BluetoothGattCharacteristic* characteristic) = 0; | 248 BluetoothGattCharacteristic* characteristic) = 0; |
208 virtual bool AddIncludedService(BluetoothGattService* service) = 0; | 249 virtual bool AddIncludedService(BluetoothGattService* service) = 0; |
209 | 250 |
(...skipping 14 matching lines...) Expand all Loading... |
224 protected: | 265 protected: |
225 BluetoothGattService(); | 266 BluetoothGattService(); |
226 | 267 |
227 private: | 268 private: |
228 DISALLOW_COPY_AND_ASSIGN(BluetoothGattService); | 269 DISALLOW_COPY_AND_ASSIGN(BluetoothGattService); |
229 }; | 270 }; |
230 | 271 |
231 } // namespace device | 272 } // namespace device |
232 | 273 |
233 #endif // DEVICE_BLUETOOTH_BLUETOOTH_GATT_SERVICE_H_ | 274 #endif // DEVICE_BLUETOOTH_BLUETOOTH_GATT_SERVICE_H_ |
OLD | NEW |