• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
16 namespace device {
17 
18 class BluetoothAdapterWin;
19 class BluetoothServiceRecordWin;
20 class BluetoothSocketThread;
21 
22 class 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