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 3// found in the LICENSE file. 4 5#ifndef DEVICE_BLUETOOTH_BLUETOOTH_DISCOVERY_MANAGER_MAC_H_ 6#define DEVICE_BLUETOOTH_BLUETOOTH_DISCOVERY_MANAGER_MAC_H_ 7 8#include "base/macros.h" 9 10@class IOBluetoothDevice; 11 12namespace device { 13 14// Class used by BluetoothAdapterMac to manage classic and LE device discovery. 15// For Bluetooth Classic, this class is responsible for keeping device inquiry 16// running if device discovery is initiated. 17class BluetoothDiscoveryManagerMac { 18 public: 19 // Interface for being notified of events during a device discovery session. 20 class Observer { 21 public: 22 // Called when |this| manager has found a device through classic device 23 // inquiry in the form of an IOBluetoothDevice. 24 virtual void DeviceFound(IOBluetoothDevice* device) = 0; 25 26 // Called when device discovery is no longer running, due to either a call 27 // to BluetoothDiscoveryManagerMac::StopDiscovery or an unexpected reason, 28 // such as when a user disables the controller, in which case the value of 29 // |unexpected| will be true. 30 virtual void DiscoveryStopped(bool unexpected) = 0; 31 }; 32 33 virtual ~BluetoothDiscoveryManagerMac(); 34 35 // Returns true, if discovery is currently being performed. 36 virtual bool IsDiscovering() const = 0; 37 38 // Initiates a discovery session. Returns true on success or if discovery 39 // is already running. Returns false on failure. 40 virtual bool StartDiscovery() = 0; 41 42 // Stops a discovery session. Returns true on success or if discovery is 43 // already not running. Returns false on failure. 44 virtual bool StopDiscovery() = 0; 45 46 // Creates a discovery manager for Bluetooth Classic device discovery with 47 // observer |observer|. Note that the life-time of |observer| should not 48 // end before that of the returned BluetoothDiscoveryManager, as that may 49 // lead to use after free errors. 50 static BluetoothDiscoveryManagerMac* CreateClassic(Observer* observer); 51 52 protected: 53 explicit BluetoothDiscoveryManagerMac(Observer* observer); 54 55 // Observer interested in notifications from us. 56 Observer* observer_; 57 58 private: 59 DISALLOW_COPY_AND_ASSIGN(BluetoothDiscoveryManagerMac); 60}; 61 62} // namespace device 63 64#endif // DEVICE_BLUETOOTH_BLUETOOTH_DISCOVERY_MANAGER_MAC_H_ 65