Home | History | Annotate | Download | only in bluetooth
      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
      3 // found in the LICENSE file.
      4 
      5 #ifndef DEVICE_BLUETOOTH_BLUETOOTH_ADAPTER_WIN_H_
      6 #define DEVICE_BLUETOOTH_BLUETOOTH_ADAPTER_WIN_H_
      7 
      8 #include <string>
      9 #include <utility>
     10 #include <vector>
     11 
     12 #include "base/containers/hash_tables.h"
     13 #include "base/memory/ref_counted.h"
     14 #include "base/memory/scoped_vector.h"
     15 #include "base/memory/weak_ptr.h"
     16 #include "base/threading/thread_checker.h"
     17 #include "device/bluetooth/bluetooth_adapter.h"
     18 #include "device/bluetooth/bluetooth_task_manager_win.h"
     19 
     20 namespace base {
     21 
     22 class SequencedTaskRunner;
     23 
     24 }  // namespace base
     25 
     26 namespace device {
     27 
     28 class BluetoothAdapterFactory;
     29 class BluetoothAdapterWinTest;
     30 class BluetoothDevice;
     31 
     32 class BluetoothAdapterWin : public BluetoothAdapter,
     33                             public BluetoothTaskManagerWin::Observer {
     34  public:
     35   typedef base::Callback<void()> InitCallback;
     36 
     37   // BluetoothAdapter override
     38   virtual void AddObserver(BluetoothAdapter::Observer* observer) OVERRIDE;
     39   virtual void RemoveObserver(BluetoothAdapter::Observer* observer) OVERRIDE;
     40   virtual std::string GetAddress() const OVERRIDE;
     41   virtual std::string GetName() const OVERRIDE;
     42   virtual bool IsInitialized() const OVERRIDE;
     43   virtual bool IsPresent() const OVERRIDE;
     44   virtual bool IsPowered() const OVERRIDE;
     45   virtual void SetPowered(
     46       bool powered,
     47       const base::Closure& callback,
     48       const ErrorCallback& error_callback) OVERRIDE;
     49   virtual bool IsDiscovering() const OVERRIDE;
     50 
     51   virtual void StartDiscovering(
     52       const base::Closure& callback,
     53       const ErrorCallback& error_callback) OVERRIDE;
     54   virtual void StopDiscovering(
     55       const base::Closure& callback,
     56       const ErrorCallback& error_callback) OVERRIDE;
     57   virtual void ReadLocalOutOfBandPairingData(
     58       const BluetoothOutOfBandPairingDataCallback& callback,
     59       const ErrorCallback& error_callback) OVERRIDE;
     60 
     61   // BluetoothTaskManagerWin::Observer override
     62   virtual void AdapterStateChanged(
     63       const BluetoothTaskManagerWin::AdapterState& state) OVERRIDE;
     64   virtual void DiscoveryStarted(bool success) OVERRIDE;
     65   virtual void DiscoveryStopped() OVERRIDE;
     66   virtual void DevicesDiscovered(
     67       const ScopedVector<BluetoothTaskManagerWin::DeviceState>& devices)
     68           OVERRIDE;
     69 
     70   virtual void DevicesUpdated(
     71       const ScopedVector<BluetoothTaskManagerWin::DeviceState>& devices)
     72           OVERRIDE;
     73 
     74  private:
     75   friend class BluetoothAdapterFactory;
     76   friend class BluetoothAdapterWinTest;
     77 
     78   enum DiscoveryStatus {
     79     NOT_DISCOVERING,
     80     DISCOVERY_STARTING,
     81     DISCOVERING,
     82     DISCOVERY_STOPPING
     83   };
     84 
     85   explicit BluetoothAdapterWin(const InitCallback& init_callback);
     86   virtual ~BluetoothAdapterWin();
     87 
     88   void Init();
     89   void InitForTest(
     90       scoped_refptr<base::SequencedTaskRunner> ui_task_runner,
     91       scoped_refptr<base::SequencedTaskRunner> bluetooth_task_runner);
     92 
     93   void MaybePostStartDiscoveryTask();
     94   void MaybePostStopDiscoveryTask();
     95 
     96   InitCallback init_callback_;
     97   std::string address_;
     98   std::string name_;
     99   bool initialized_;
    100   bool powered_;
    101   DiscoveryStatus discovery_status_;
    102   base::hash_set<std::string> discovered_devices_;
    103 
    104   std::vector<std::pair<base::Closure, ErrorCallback> >
    105       on_start_discovery_callbacks_;
    106   std::vector<base::Closure> on_stop_discovery_callbacks_;
    107   size_t num_discovery_listeners_;
    108 
    109   scoped_refptr<base::SequencedTaskRunner> ui_task_runner_;
    110   scoped_refptr<BluetoothTaskManagerWin> task_manager_;
    111 
    112   base::ThreadChecker thread_checker_;
    113 
    114   // List of observers interested in event notifications from us.
    115   ObserverList<BluetoothAdapter::Observer> observers_;
    116 
    117   // NOTE: This should remain the last member so it'll be destroyed and
    118   // invalidate its weak pointers before any other members are destroyed.
    119   base::WeakPtrFactory<BluetoothAdapterWin> weak_ptr_factory_;
    120 
    121   DISALLOW_COPY_AND_ASSIGN(BluetoothAdapterWin);
    122 };
    123 
    124 }  // namespace device
    125 
    126 #endif  // DEVICE_BLUETOOTH_BLUETOOTH_ADAPTER_WIN_H_
    127