19b6ec9471cebdbd68639492825956b96f807e382Ben Gruver// Copyright 2013 The Chromium Authors. All rights reserved. 29b6ec9471cebdbd68639492825956b96f807e382Ben Gruver// Use of this source code is governed by a BSD-style license that can be 39b6ec9471cebdbd68639492825956b96f807e382Ben Gruver// found in the LICENSE file. 49b6ec9471cebdbd68639492825956b96f807e382Ben Gruver 59b6ec9471cebdbd68639492825956b96f807e382Ben Gruver#ifndef DEVICE_BLUETOOTH_BLUETOOTH_ADAPTER_MAC_H_ 69b6ec9471cebdbd68639492825956b96f807e382Ben Gruver#define DEVICE_BLUETOOTH_BLUETOOTH_ADAPTER_MAC_H_ 79b6ec9471cebdbd68639492825956b96f807e382Ben Gruver 89b6ec9471cebdbd68639492825956b96f807e382Ben Gruver#include <IOKit/IOReturn.h> 99b6ec9471cebdbd68639492825956b96f807e382Ben Gruver 109b6ec9471cebdbd68639492825956b96f807e382Ben Gruver#include <string> 119b6ec9471cebdbd68639492825956b96f807e382Ben Gruver#include <vector> 129b6ec9471cebdbd68639492825956b96f807e382Ben Gruver 139b6ec9471cebdbd68639492825956b96f807e382Ben Gruver#include "base/containers/hash_tables.h" 149b6ec9471cebdbd68639492825956b96f807e382Ben Gruver#include "base/mac/scoped_nsobject.h" 159b6ec9471cebdbd68639492825956b96f807e382Ben Gruver#include "base/memory/ref_counted.h" 169b6ec9471cebdbd68639492825956b96f807e382Ben Gruver#include "base/memory/weak_ptr.h" 179b6ec9471cebdbd68639492825956b96f807e382Ben Gruver#include "base/observer_list.h" 189b6ec9471cebdbd68639492825956b96f807e382Ben Gruver#include "device/bluetooth/bluetooth_adapter.h" 199b6ec9471cebdbd68639492825956b96f807e382Ben Gruver#include "device/bluetooth/bluetooth_discovery_manager_mac.h" 209b6ec9471cebdbd68639492825956b96f807e382Ben Gruver 219b6ec9471cebdbd68639492825956b96f807e382Ben Gruver@class IOBluetoothDevice; 22f3d921d1f8eb52f20440a0e43f604a7aae972e94Ben Gruver@class NSArray; 239b6ec9471cebdbd68639492825956b96f807e382Ben Gruver@class NSDate; 249b6ec9471cebdbd68639492825956b96f807e382Ben Gruver 259b6ec9471cebdbd68639492825956b96f807e382Ben Gruvernamespace base { 269b6ec9471cebdbd68639492825956b96f807e382Ben Gruver 279b6ec9471cebdbd68639492825956b96f807e382Ben Gruverclass SequencedTaskRunner; 289b6ec9471cebdbd68639492825956b96f807e382Ben Gruver 299b6ec9471cebdbd68639492825956b96f807e382Ben Gruver} // namespace base 309b6ec9471cebdbd68639492825956b96f807e382Ben Gruver 319b6ec9471cebdbd68639492825956b96f807e382Ben Gruvernamespace device { 329b6ec9471cebdbd68639492825956b96f807e382Ben Gruver 339b6ec9471cebdbd68639492825956b96f807e382Ben Gruverclass BluetoothAdapterMacTest; 349b6ec9471cebdbd68639492825956b96f807e382Ben Gruver 359b6ec9471cebdbd68639492825956b96f807e382Ben Gruverclass BluetoothAdapterMac : public BluetoothAdapter, 369b6ec9471cebdbd68639492825956b96f807e382Ben Gruver public BluetoothDiscoveryManagerMac::Observer { 379b6ec9471cebdbd68639492825956b96f807e382Ben Gruver public: 389b6ec9471cebdbd68639492825956b96f807e382Ben Gruver static base::WeakPtr<BluetoothAdapter> CreateAdapter(); 399b6ec9471cebdbd68639492825956b96f807e382Ben Gruver 409b6ec9471cebdbd68639492825956b96f807e382Ben Gruver // BluetoothAdapter: 419b6ec9471cebdbd68639492825956b96f807e382Ben Gruver virtual void AddObserver(BluetoothAdapter::Observer* observer) OVERRIDE; 429b6ec9471cebdbd68639492825956b96f807e382Ben Gruver virtual void RemoveObserver(BluetoothAdapter::Observer* observer) OVERRIDE; 439b6ec9471cebdbd68639492825956b96f807e382Ben Gruver virtual std::string GetAddress() const OVERRIDE; 449b6ec9471cebdbd68639492825956b96f807e382Ben Gruver virtual std::string GetName() const OVERRIDE; 455fd395796e215a80c722815bf180728948868f18Ben Gruver virtual void SetName(const std::string& name, 469b6ec9471cebdbd68639492825956b96f807e382Ben Gruver const base::Closure& callback, 47f3d921d1f8eb52f20440a0e43f604a7aae972e94Ben Gruver const ErrorCallback& error_callback) OVERRIDE; 481d4637b3d94732a4eaa83b129054ee9245bed24eBen Gruver virtual bool IsInitialized() const OVERRIDE; 491d4637b3d94732a4eaa83b129054ee9245bed24eBen Gruver virtual bool IsPresent() const OVERRIDE; 501d4637b3d94732a4eaa83b129054ee9245bed24eBen Gruver virtual bool IsPowered() const OVERRIDE; 511d4637b3d94732a4eaa83b129054ee9245bed24eBen Gruver virtual void SetPowered( 529b6ec9471cebdbd68639492825956b96f807e382Ben Gruver bool powered, 539b6ec9471cebdbd68639492825956b96f807e382Ben Gruver const base::Closure& callback, 549b6ec9471cebdbd68639492825956b96f807e382Ben Gruver const ErrorCallback& error_callback) OVERRIDE; 559b6ec9471cebdbd68639492825956b96f807e382Ben Gruver virtual bool IsDiscoverable() const OVERRIDE; 569b6ec9471cebdbd68639492825956b96f807e382Ben Gruver virtual void SetDiscoverable( 579b6ec9471cebdbd68639492825956b96f807e382Ben Gruver bool discoverable, 589b6ec9471cebdbd68639492825956b96f807e382Ben Gruver const base::Closure& callback, 599b6ec9471cebdbd68639492825956b96f807e382Ben Gruver const ErrorCallback& error_callback) OVERRIDE; 609b6ec9471cebdbd68639492825956b96f807e382Ben Gruver virtual bool IsDiscovering() const OVERRIDE; 619b6ec9471cebdbd68639492825956b96f807e382Ben Gruver virtual void CreateRfcommService( 629b6ec9471cebdbd68639492825956b96f807e382Ben Gruver const BluetoothUUID& uuid, 639b6ec9471cebdbd68639492825956b96f807e382Ben Gruver const ServiceOptions& options, 649b6ec9471cebdbd68639492825956b96f807e382Ben Gruver const CreateServiceCallback& callback, 659b6ec9471cebdbd68639492825956b96f807e382Ben Gruver const CreateServiceErrorCallback& error_callback) OVERRIDE; 669b6ec9471cebdbd68639492825956b96f807e382Ben Gruver virtual void CreateL2capService( 679b6ec9471cebdbd68639492825956b96f807e382Ben Gruver const BluetoothUUID& uuid, 689b6ec9471cebdbd68639492825956b96f807e382Ben Gruver const ServiceOptions& options, 699b6ec9471cebdbd68639492825956b96f807e382Ben Gruver const CreateServiceCallback& callback, 709b6ec9471cebdbd68639492825956b96f807e382Ben Gruver const CreateServiceErrorCallback& error_callback) OVERRIDE; 719b6ec9471cebdbd68639492825956b96f807e382Ben Gruver 729b6ec9471cebdbd68639492825956b96f807e382Ben Gruver // BluetoothDiscoveryManagerMac::Observer overrides 739b6ec9471cebdbd68639492825956b96f807e382Ben Gruver virtual void DeviceFound(IOBluetoothDevice* device) OVERRIDE; 749b6ec9471cebdbd68639492825956b96f807e382Ben Gruver virtual void DiscoveryStopped(bool unexpected) OVERRIDE; 75f3d921d1f8eb52f20440a0e43f604a7aae972e94Ben Gruver 769b6ec9471cebdbd68639492825956b96f807e382Ben Gruver // Registers that a new |device| has connected to the local host. 779b6ec9471cebdbd68639492825956b96f807e382Ben Gruver void DeviceConnected(IOBluetoothDevice* device); 789b6ec9471cebdbd68639492825956b96f807e382Ben Gruver 799b6ec9471cebdbd68639492825956b96f807e382Ben Gruver protected: 80 // BluetoothAdapter: 81 virtual void RemovePairingDelegateInternal( 82 device::BluetoothDevice::PairingDelegate* pairing_delegate) OVERRIDE; 83 84 private: 85 friend class BluetoothAdapterMacTest; 86 87 BluetoothAdapterMac(); 88 virtual ~BluetoothAdapterMac(); 89 90 // BluetoothAdapter: 91 virtual void AddDiscoverySession( 92 const base::Closure& callback, 93 const ErrorCallback& error_callback) OVERRIDE; 94 virtual void RemoveDiscoverySession( 95 const base::Closure& callback, 96 const ErrorCallback& error_callback) OVERRIDE; 97 98 void Init(); 99 void InitForTest(scoped_refptr<base::SequencedTaskRunner> ui_task_runner); 100 void PollAdapter(); 101 102 // Registers that a new |device| has replied to an Inquiry, is paired, or has 103 // connected to the local host. 104 void DeviceAdded(IOBluetoothDevice* device); 105 106 // Updates |devices_| to include the currently paired devices, as well as any 107 // connected, but unpaired, devices. Notifies observers if any previously 108 // paired or connected devices are no longer present. 109 void UpdateDevices(); 110 111 std::string address_; 112 std::string name_; 113 bool powered_; 114 115 int num_discovery_sessions_; 116 117 // Discovery manager for Bluetooth Classic. 118 scoped_ptr<BluetoothDiscoveryManagerMac> classic_discovery_manager_; 119 120 scoped_refptr<base::SequencedTaskRunner> ui_task_runner_; 121 122 // List of observers interested in event notifications from us. 123 ObserverList<BluetoothAdapter::Observer> observers_; 124 125 base::WeakPtrFactory<BluetoothAdapterMac> weak_ptr_factory_; 126 127 DISALLOW_COPY_AND_ASSIGN(BluetoothAdapterMac); 128}; 129 130} // namespace device 131 132#endif // DEVICE_BLUETOOTH_BLUETOOTH_ADAPTER_MAC_H_ 133