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_DEVICE_WIN_H_
6#define DEVICE_BLUETOOTH_BLUETOOTH_DEVICE_WIN_H_
7
8#include <string>
9#include <vector>
10
11#include "base/basictypes.h"
12#include "base/observer_list.h"
13#include "device/bluetooth/bluetooth_device.h"
14#include "device/bluetooth/bluetooth_task_manager_win.h"
15
16namespace device {
17
18class BluetoothAdapterWin;
19class BluetoothServiceRecordWin;
20class BluetoothSocketThread;
21
22class BluetoothDeviceWin : public BluetoothDevice {
23 public:
24  explicit BluetoothDeviceWin(
25      const BluetoothTaskManagerWin::DeviceState& device_state,
26      const scoped_refptr<base::SequencedTaskRunner>& ui_task_runner,
27      const scoped_refptr<BluetoothSocketThread>& socket_thread,
28      net::NetLog* net_log,
29      const net::NetLog::Source& net_log_source);
30  virtual ~BluetoothDeviceWin();
31
32  // BluetoothDevice override
33  virtual uint32 GetBluetoothClass() const OVERRIDE;
34  virtual std::string GetAddress() const OVERRIDE;
35  virtual VendorIDSource GetVendorIDSource() const OVERRIDE;
36  virtual uint16 GetVendorID() const OVERRIDE;
37  virtual uint16 GetProductID() const OVERRIDE;
38  virtual uint16 GetDeviceID() const OVERRIDE;
39  virtual int GetRSSI() const OVERRIDE;
40  virtual int GetCurrentHostTransmitPower() const OVERRIDE;
41  virtual int GetMaximumHostTransmitPower() const OVERRIDE;
42  virtual bool IsPaired() const OVERRIDE;
43  virtual bool IsConnected() const OVERRIDE;
44  virtual bool IsConnectable() const OVERRIDE;
45  virtual bool IsConnecting() const OVERRIDE;
46  virtual UUIDList GetUUIDs() const OVERRIDE;
47  virtual bool ExpectingPinCode() const OVERRIDE;
48  virtual bool ExpectingPasskey() const OVERRIDE;
49  virtual bool ExpectingConfirmation() const OVERRIDE;
50  virtual void Connect(
51      PairingDelegate* pairing_delegate,
52      const base::Closure& callback,
53      const ConnectErrorCallback& error_callback) OVERRIDE;
54  virtual void SetPinCode(const std::string& pincode) OVERRIDE;
55  virtual void SetPasskey(uint32 passkey) OVERRIDE;
56  virtual void ConfirmPairing() OVERRIDE;
57  virtual void RejectPairing() OVERRIDE;
58  virtual void CancelPairing() OVERRIDE;
59  virtual void Disconnect(
60      const base::Closure& callback,
61      const ErrorCallback& error_callback) OVERRIDE;
62  virtual void Forget(const ErrorCallback& error_callback) OVERRIDE;
63  virtual void ConnectToService(
64      const BluetoothUUID& uuid,
65      const ConnectToServiceCallback& callback,
66      const ConnectToServiceErrorCallback& error_callback) OVERRIDE;
67  virtual void CreateGattConnection(
68      const GattConnectionCallback& callback,
69      const ConnectErrorCallback& error_callback) OVERRIDE;
70  virtual void StartConnectionMonitor(
71      const base::Closure& callback,
72      const ErrorCallback& error_callback) OVERRIDE;
73
74  // Used by BluetoothProfileWin to retrieve the service record for the given
75  // |uuid|.
76  const BluetoothServiceRecordWin* GetServiceRecord(
77      const device::BluetoothUUID& uuid) const;
78
79  // Returns true if all fields and services of this instance are equal to the
80  // fields and services stored in |device_state|.
81  bool IsEqual(const BluetoothTaskManagerWin::DeviceState& device_state);
82
83  // Updates this instance with all fields and properties stored in
84  // |device_state|.
85  void Update(const BluetoothTaskManagerWin::DeviceState& device_state);
86
87 protected:
88  // BluetoothDevice override
89  virtual std::string GetDeviceName() const OVERRIDE;
90
91 private:
92  friend class BluetoothAdapterWin;
93
94  // Used by BluetoothAdapterWin to update the visible state during
95  // discovery.
96  void SetVisible(bool visible);
97
98  // Updates the services with services stored in |device_state|.
99  void UpdateServices(const BluetoothTaskManagerWin::DeviceState& device_state);
100
101  scoped_refptr<base::SequencedTaskRunner> ui_task_runner_;
102  scoped_refptr<BluetoothSocketThread> socket_thread_;
103  net::NetLog* net_log_;
104  net::NetLog::Source net_log_source_;
105
106  // The Bluetooth class of the device, a bitmask that may be decoded using
107  // https://www.bluetooth.org/Technical/AssignedNumbers/baseband.htm
108  uint32 bluetooth_class_;
109
110  // The name of the device, as supplied by the remote device.
111  std::string name_;
112
113  // The Bluetooth address of the device.
114  std::string address_;
115
116  // Tracked device state, updated by the adapter managing the lifecycle of
117  // the device.
118  bool paired_;
119  bool connected_;
120
121  // Used to send change notifications when a device disappears during
122  // discovery.
123  bool visible_;
124
125  // The services (identified by UUIDs) that this device provides.
126  UUIDList uuids_;
127
128  // The service records retrieved from SDP.
129  typedef ScopedVector<BluetoothServiceRecordWin> ServiceRecordList;
130  ServiceRecordList service_record_list_;
131
132  DISALLOW_COPY_AND_ASSIGN(BluetoothDeviceWin);
133};
134
135}  // namespace device
136
137#endif  // DEVICE_BLUETOOTH_BLUETOOTH_DEVICE_WIN_H_
138