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