OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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_ADAPTER_H_ | 5 #ifndef DEVICE_BLUETOOTH_BLUETOOTH_ADAPTER_H_ |
6 #define DEVICE_BLUETOOTH_BLUETOOTH_ADAPTER_H_ | 6 #define DEVICE_BLUETOOTH_BLUETOOTH_ADAPTER_H_ |
7 | 7 |
8 #include <list> | 8 #include <list> |
9 #include <map> | 9 #include <map> |
10 #include <set> | 10 #include <set> |
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
174 }; | 174 }; |
175 | 175 |
176 // The ErrorCallback is used for methods that can fail in which case it is | 176 // The ErrorCallback is used for methods that can fail in which case it is |
177 // called, in the success case the callback is simply not called. | 177 // called, in the success case the callback is simply not called. |
178 typedef base::Closure ErrorCallback; | 178 typedef base::Closure ErrorCallback; |
179 | 179 |
180 // The InitCallback is used to trigger a callback after asynchronous | 180 // The InitCallback is used to trigger a callback after asynchronous |
181 // initialization, if initialization is asynchronous on the platform. | 181 // initialization, if initialization is asynchronous on the platform. |
182 typedef base::Callback<void()> InitCallback; | 182 typedef base::Callback<void()> InitCallback; |
183 | 183 |
| 184 typedef base::Callback<void(scoped_ptr<BluetoothDiscoverySession>)> |
| 185 DiscoverySessionCallback; |
| 186 typedef std::vector<BluetoothDevice*> DeviceList; |
| 187 typedef std::vector<const BluetoothDevice*> ConstDeviceList; |
| 188 typedef base::Callback<void(scoped_refptr<BluetoothSocket>)> |
| 189 CreateServiceCallback; |
| 190 typedef base::Callback<void(const std::string& message)> |
| 191 CreateServiceErrorCallback; |
| 192 typedef base::Callback<void(scoped_refptr<BluetoothAudioSink>)> |
| 193 AcquiredCallback; |
| 194 |
184 // Returns a weak pointer to a new adapter. For platforms with asynchronous | 195 // Returns a weak pointer to a new adapter. For platforms with asynchronous |
185 // initialization, the returned adapter will run the |init_callback| once | 196 // initialization, the returned adapter will run the |init_callback| once |
186 // asynchronous initialization is complete. | 197 // asynchronous initialization is complete. |
187 // Caution: The returned pointer also transfers ownership of the adapter. The | 198 // Caution: The returned pointer also transfers ownership of the adapter. The |
188 // caller is expected to call |AddRef()| on the returned pointer, typically by | 199 // caller is expected to call |AddRef()| on the returned pointer, typically by |
189 // storing it into a |scoped_refptr|. | 200 // storing it into a |scoped_refptr|. |
190 static base::WeakPtr<BluetoothAdapter> CreateAdapter( | 201 static base::WeakPtr<BluetoothAdapter> CreateAdapter( |
191 const InitCallback& init_callback); | 202 const InitCallback& init_callback); |
192 | 203 |
193 // Returns a weak pointer to an existing adapter for testing purposes only. | 204 // Returns a weak pointer to an existing adapter for testing purposes only. |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
263 // If clients desire device discovery to run, they should always call this | 274 // If clients desire device discovery to run, they should always call this |
264 // method and never make it conditional on the value of IsDiscovering(), as | 275 // method and never make it conditional on the value of IsDiscovering(), as |
265 // another client might cause discovery to stop unexpectedly. Hence, clients | 276 // another client might cause discovery to stop unexpectedly. Hence, clients |
266 // should always obtain a BluetoothDiscoverySession and call | 277 // should always obtain a BluetoothDiscoverySession and call |
267 // BluetoothDiscoverySession::Stop when done. When this method gets called, | 278 // BluetoothDiscoverySession::Stop when done. When this method gets called, |
268 // device discovery may actually be in progress. Clients can call GetDevices() | 279 // device discovery may actually be in progress. Clients can call GetDevices() |
269 // and check for those with IsPaired() as false to obtain the list of devices | 280 // and check for those with IsPaired() as false to obtain the list of devices |
270 // that have been discovered so far. Otherwise, clients can be notified of all | 281 // that have been discovered so far. Otherwise, clients can be notified of all |
271 // new and lost devices by implementing the Observer methods "DeviceAdded" and | 282 // new and lost devices by implementing the Observer methods "DeviceAdded" and |
272 // "DeviceRemoved". | 283 // "DeviceRemoved". |
273 typedef base::Callback<void(scoped_ptr<BluetoothDiscoverySession>)> | |
274 DiscoverySessionCallback; | |
275 virtual void StartDiscoverySession(const DiscoverySessionCallback& callback, | 284 virtual void StartDiscoverySession(const DiscoverySessionCallback& callback, |
276 const ErrorCallback& error_callback); | 285 const ErrorCallback& error_callback); |
277 virtual void StartDiscoverySessionWithFilter( | 286 virtual void StartDiscoverySessionWithFilter( |
278 scoped_ptr<BluetoothDiscoveryFilter> discovery_filter, | 287 scoped_ptr<BluetoothDiscoveryFilter> discovery_filter, |
279 const DiscoverySessionCallback& callback, | 288 const DiscoverySessionCallback& callback, |
280 const ErrorCallback& error_callback); | 289 const ErrorCallback& error_callback); |
281 | 290 |
282 // Return all discovery filters assigned to this adapter merged together. | 291 // Return all discovery filters assigned to this adapter merged together. |
283 scoped_ptr<BluetoothDiscoveryFilter> GetMergedDiscoveryFilter() const; | 292 scoped_ptr<BluetoothDiscoveryFilter> GetMergedDiscoveryFilter() const; |
284 | 293 |
285 // Works like GetMergedDiscoveryFilter, but doesn't take |masked_filter| into | 294 // Works like GetMergedDiscoveryFilter, but doesn't take |masked_filter| into |
286 // account. |masked_filter| is compared by pointer, and must be a member of | 295 // account. |masked_filter| is compared by pointer, and must be a member of |
287 // active session. | 296 // active session. |
288 scoped_ptr<BluetoothDiscoveryFilter> GetMergedDiscoveryFilterMasked( | 297 scoped_ptr<BluetoothDiscoveryFilter> GetMergedDiscoveryFilterMasked( |
289 BluetoothDiscoveryFilter* masked_filter) const; | 298 BluetoothDiscoveryFilter* masked_filter) const; |
290 | 299 |
291 // Requests the list of devices from the adapter. All devices are returned, | 300 // Requests the list of devices from the adapter. All devices are returned, |
292 // including those currently connected and those paired. Use the returned | 301 // including those currently connected and those paired. Use the returned |
293 // device pointers to determine which they are. | 302 // device pointers to determine which they are. |
294 typedef std::vector<BluetoothDevice*> DeviceList; | |
295 virtual DeviceList GetDevices(); | 303 virtual DeviceList GetDevices(); |
296 typedef std::vector<const BluetoothDevice*> ConstDeviceList; | |
297 virtual ConstDeviceList GetDevices() const; | 304 virtual ConstDeviceList GetDevices() const; |
298 | 305 |
299 // Returns a pointer to the device with the given address |address| or NULL if | 306 // Returns a pointer to the device with the given address |address| or NULL if |
300 // no such device is known. | 307 // no such device is known. |
301 virtual BluetoothDevice* GetDevice(const std::string& address); | 308 virtual BluetoothDevice* GetDevice(const std::string& address); |
302 virtual const BluetoothDevice* GetDevice(const std::string& address) const; | 309 virtual const BluetoothDevice* GetDevice(const std::string& address) const; |
303 | 310 |
304 // Possible priorities for AddPairingDelegate(), low is intended for | 311 // Possible priorities for AddPairingDelegate(), low is intended for |
305 // permanent UI and high is intended for interactive UI or applications. | 312 // permanent UI and high is intended for interactive UI or applications. |
306 enum PairingDelegatePriority { | 313 enum PairingDelegatePriority { |
(...skipping 21 matching lines...) Expand all Loading... |
328 // incoming pairing requests. | 335 // incoming pairing requests. |
329 virtual BluetoothDevice::PairingDelegate* DefaultPairingDelegate(); | 336 virtual BluetoothDevice::PairingDelegate* DefaultPairingDelegate(); |
330 | 337 |
331 // Creates an RFCOMM service on this adapter advertised with UUID |uuid|, | 338 // Creates an RFCOMM service on this adapter advertised with UUID |uuid|, |
332 // listening on channel |options.channel|, which may be left null to | 339 // listening on channel |options.channel|, which may be left null to |
333 // automatically allocate one. The service will be advertised with | 340 // automatically allocate one. The service will be advertised with |
334 // |options.name| as the English name of the service. |callback| will be | 341 // |options.name| as the English name of the service. |callback| will be |
335 // called on success with a BluetoothSocket instance that is to be owned by | 342 // called on success with a BluetoothSocket instance that is to be owned by |
336 // the received. |error_callback| will be called on failure with a message | 343 // the received. |error_callback| will be called on failure with a message |
337 // indicating the cause. | 344 // indicating the cause. |
338 typedef base::Callback<void(scoped_refptr<BluetoothSocket>)> | |
339 CreateServiceCallback; | |
340 typedef base::Callback<void(const std::string& message)> | |
341 CreateServiceErrorCallback; | |
342 virtual void CreateRfcommService( | 345 virtual void CreateRfcommService( |
343 const BluetoothUUID& uuid, | 346 const BluetoothUUID& uuid, |
344 const ServiceOptions& options, | 347 const ServiceOptions& options, |
345 const CreateServiceCallback& callback, | 348 const CreateServiceCallback& callback, |
346 const CreateServiceErrorCallback& error_callback) = 0; | 349 const CreateServiceErrorCallback& error_callback) = 0; |
347 | 350 |
348 // Creates an L2CAP service on this adapter advertised with UUID |uuid|, | 351 // Creates an L2CAP service on this adapter advertised with UUID |uuid|, |
349 // listening on PSM |options.psm|, which may be left null to automatically | 352 // listening on PSM |options.psm|, which may be left null to automatically |
350 // allocate one. The service will be advertised with |options.name| as the | 353 // allocate one. The service will be advertised with |options.name| as the |
351 // English name of the service. |callback| will be called on success with a | 354 // English name of the service. |callback| will be called on success with a |
352 // BluetoothSocket instance that is to be owned by the received. | 355 // BluetoothSocket instance that is to be owned by the received. |
353 // |error_callback| will be called on failure with a message indicating the | 356 // |error_callback| will be called on failure with a message indicating the |
354 // cause. | 357 // cause. |
355 virtual void CreateL2capService( | 358 virtual void CreateL2capService( |
356 const BluetoothUUID& uuid, | 359 const BluetoothUUID& uuid, |
357 const ServiceOptions& options, | 360 const ServiceOptions& options, |
358 const CreateServiceCallback& callback, | 361 const CreateServiceCallback& callback, |
359 const CreateServiceErrorCallback& error_callback) = 0; | 362 const CreateServiceErrorCallback& error_callback) = 0; |
360 | 363 |
361 // Creates and registers a BluetoothAudioSink with |options|. If the fields in | 364 // Creates and registers a BluetoothAudioSink with |options|. If the fields in |
362 // |options| are not specified, the default values will be used. |callback| | 365 // |options| are not specified, the default values will be used. |callback| |
363 // will be called on success with a BluetoothAudioSink which is to be owned by | 366 // will be called on success with a BluetoothAudioSink which is to be owned by |
364 // the caller of this method. |error_callback| will be called on failure with | 367 // the caller of this method. |error_callback| will be called on failure with |
365 // a message indicating the cause. | 368 // a message indicating the cause. |
366 typedef base::Callback<void(scoped_refptr<BluetoothAudioSink>)> | |
367 AcquiredCallback; | |
368 virtual void RegisterAudioSink( | 369 virtual void RegisterAudioSink( |
369 const BluetoothAudioSink::Options& options, | 370 const BluetoothAudioSink::Options& options, |
370 const AcquiredCallback& callback, | 371 const AcquiredCallback& callback, |
371 const BluetoothAudioSink::ErrorCallback& error_callback) = 0; | 372 const BluetoothAudioSink::ErrorCallback& error_callback) = 0; |
372 | 373 |
373 protected: | 374 protected: |
374 friend class base::RefCountedThreadSafe<BluetoothAdapter, | 375 friend class base::RefCountedThreadSafe<BluetoothAdapter, |
375 BluetoothAdapterDeleter>; | 376 BluetoothAdapterDeleter>; |
376 friend struct BluetoothAdapterDeleter; | 377 friend struct BluetoothAdapterDeleter; |
377 friend class BluetoothDiscoverySession; | 378 friend class BluetoothDiscoverySession; |
| 379 |
| 380 typedef std::map<const std::string, BluetoothDevice*> DevicesMap; |
| 381 typedef std::pair<BluetoothDevice::PairingDelegate*, PairingDelegatePriority> |
| 382 PairingDelegatePair; |
| 383 |
378 BluetoothAdapter(); | 384 BluetoothAdapter(); |
379 virtual ~BluetoothAdapter(); | 385 virtual ~BluetoothAdapter(); |
380 | 386 |
381 // Called by RefCountedThreadSafeDeleteOnCorrectThread to destroy this. | 387 // Called by RefCountedThreadSafeDeleteOnCorrectThread to destroy this. |
382 virtual void DeleteOnCorrectThread() const = 0; | 388 virtual void DeleteOnCorrectThread() const = 0; |
383 | 389 |
384 // Internal methods for initiating and terminating device discovery sessions. | 390 // Internal methods for initiating and terminating device discovery sessions. |
385 // An implementation of BluetoothAdapter keeps an internal reference count to | 391 // An implementation of BluetoothAdapter keeps an internal reference count to |
386 // make sure that the underlying controller is constantly searching for nearby | 392 // make sure that the underlying controller is constantly searching for nearby |
387 // devices and retrieving information from them as long as there are clients | 393 // devices and retrieving information from them as long as there are clients |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
445 // Removes |discovery_session| from |discovery_sessions_|, if its in there. | 451 // Removes |discovery_session| from |discovery_sessions_|, if its in there. |
446 // Called by DiscoverySession when an instance is destroyed or becomes | 452 // Called by DiscoverySession when an instance is destroyed or becomes |
447 // inactive. | 453 // inactive. |
448 void DiscoverySessionBecameInactive( | 454 void DiscoverySessionBecameInactive( |
449 BluetoothDiscoverySession* discovery_session); | 455 BluetoothDiscoverySession* discovery_session); |
450 | 456 |
451 // Devices paired with, connected to, discovered by, or visible to the | 457 // Devices paired with, connected to, discovered by, or visible to the |
452 // adapter. The key is the Bluetooth address of the device and the value is | 458 // adapter. The key is the Bluetooth address of the device and the value is |
453 // the BluetoothDevice object whose lifetime is managed by the adapter | 459 // the BluetoothDevice object whose lifetime is managed by the adapter |
454 // instance. | 460 // instance. |
455 typedef std::map<const std::string, BluetoothDevice*> DevicesMap; | |
456 DevicesMap devices_; | 461 DevicesMap devices_; |
457 | 462 |
458 // Default pairing delegates registered with the adapter. | 463 // Default pairing delegates registered with the adapter. |
459 typedef std::pair<BluetoothDevice::PairingDelegate*, | |
460 PairingDelegatePriority> PairingDelegatePair; | |
461 std::list<PairingDelegatePair> pairing_delegates_; | 464 std::list<PairingDelegatePair> pairing_delegates_; |
462 | 465 |
463 private: | 466 private: |
464 // Return all discovery filters assigned to this adapter merged together. | 467 // Return all discovery filters assigned to this adapter merged together. |
465 // If |omit| is true, |discovery_filter| will not be processed. | 468 // If |omit| is true, |discovery_filter| will not be processed. |
466 scoped_ptr<BluetoothDiscoveryFilter> GetMergedDiscoveryFilterHelper( | 469 scoped_ptr<BluetoothDiscoveryFilter> GetMergedDiscoveryFilterHelper( |
467 const BluetoothDiscoveryFilter* discovery_filter, | 470 const BluetoothDiscoveryFilter* discovery_filter, |
468 bool omit) const; | 471 bool omit) const; |
469 | 472 |
470 // List of active DiscoverySession objects. This is used to notify sessions to | 473 // List of active DiscoverySession objects. This is used to notify sessions to |
(...skipping 12 matching lines...) Expand all Loading... |
483 // Trait for RefCountedThreadSafe that deletes BluetoothAdapter. | 486 // Trait for RefCountedThreadSafe that deletes BluetoothAdapter. |
484 struct BluetoothAdapterDeleter { | 487 struct BluetoothAdapterDeleter { |
485 static void Destruct(const BluetoothAdapter* adapter) { | 488 static void Destruct(const BluetoothAdapter* adapter) { |
486 adapter->DeleteOnCorrectThread(); | 489 adapter->DeleteOnCorrectThread(); |
487 } | 490 } |
488 }; | 491 }; |
489 | 492 |
490 } // namespace device | 493 } // namespace device |
491 | 494 |
492 #endif // DEVICE_BLUETOOTH_BLUETOOTH_ADAPTER_H_ | 495 #endif // DEVICE_BLUETOOTH_BLUETOOTH_ADAPTER_H_ |
OLD | NEW |