15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef DEVICE_BLUETOOTH_BLUETOOTH_DEVICE_WIN_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define DEVICE_BLUETOOTH_BLUETOOTH_DEVICE_WIN_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string>
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <vector>
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h"
12c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "base/observer_list.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "device/bluetooth/bluetooth_device.h"
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "device/bluetooth/bluetooth_task_manager_win.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace device {
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class BluetoothAdapterWin;
1946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)class BluetoothServiceRecordWin;
20010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)class BluetoothSocketThread;
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class BluetoothDeviceWin : public BluetoothDevice {
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  explicit BluetoothDeviceWin(
25c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      const BluetoothTaskManagerWin::DeviceState& state,
26c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      scoped_refptr<base::SequencedTaskRunner> ui_task_runner,
27010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      scoped_refptr<BluetoothSocketThread> socket_thread,
28c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      net::NetLog* net_log,
29c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      const net::NetLog::Source& net_log_source);
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~BluetoothDeviceWin();
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // BluetoothDevice override
33c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  virtual void AddObserver(
34c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      device::BluetoothDevice::Observer* observer) OVERRIDE;
35c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  virtual void RemoveObserver(
36c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      device::BluetoothDevice::Observer* observer) OVERRIDE;
37c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual uint32 GetBluetoothClass() const OVERRIDE;
38c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual std::string GetAddress() const OVERRIDE;
39a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  virtual VendorIDSource GetVendorIDSource() const OVERRIDE;
40c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual uint16 GetVendorID() const OVERRIDE;
41c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual uint16 GetProductID() const OVERRIDE;
42c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual uint16 GetDeviceID() const OVERRIDE;
435c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  virtual int GetRSSI() const OVERRIDE;
445c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  virtual int GetCurrentHostTransmitPower() const OVERRIDE;
455c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  virtual int GetMaximumHostTransmitPower() const OVERRIDE;
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool IsPaired() const OVERRIDE;
47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual bool IsConnected() const OVERRIDE;
48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual bool IsConnectable() const OVERRIDE;
49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual bool IsConnecting() const OVERRIDE;
5023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  virtual UUIDList GetUUIDs() const OVERRIDE;
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool ExpectingPinCode() const OVERRIDE;
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool ExpectingPasskey() const OVERRIDE;
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool ExpectingConfirmation() const OVERRIDE;
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void Connect(
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      PairingDelegate* pairing_delegate,
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const base::Closure& callback,
572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      const ConnectErrorCallback& error_callback) OVERRIDE;
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void SetPinCode(const std::string& pincode) OVERRIDE;
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void SetPasskey(uint32 passkey) OVERRIDE;
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void ConfirmPairing() OVERRIDE;
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void RejectPairing() OVERRIDE;
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void CancelPairing() OVERRIDE;
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void Disconnect(
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const base::Closure& callback,
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const ErrorCallback& error_callback) OVERRIDE;
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void Forget(const ErrorCallback& error_callback) OVERRIDE;
67010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual void ConnectToService(
68010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      const BluetoothUUID& uuid,
69010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      const ConnectToServiceCallback& callback,
70010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      const ConnectToServiceErrorCallback& error_callback) OVERRIDE;
71f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  virtual void CreateGattConnection(
72f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      const GattConnectionCallback& callback,
73f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      const ConnectErrorCallback& error_callback) OVERRIDE;
74cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  virtual void StartConnectionMonitor(
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const base::Closure& callback,
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const ErrorCallback& error_callback) OVERRIDE;
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  // Used by BluetoothProfileWin to retrieve the service record for the given
7923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  // |uuid|.
8046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  const BluetoothServiceRecordWin* GetServiceRecord(
81c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      const device::BluetoothUUID& uuid) const;
82c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
83c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) protected:
84c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // BluetoothDevice override
85c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual std::string GetDeviceName() const OVERRIDE;
86c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  friend class BluetoothAdapterWin;
892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
90c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // Used by BluetoothAdapterWin to update the visible state during
91c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // discovery.
92c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void SetVisible(bool visible);
93c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
94c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  scoped_refptr<base::SequencedTaskRunner> ui_task_runner_;
95010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  scoped_refptr<BluetoothSocketThread> socket_thread_;
96c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  net::NetLog* net_log_;
97c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  net::NetLog::Source net_log_source_;
98c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
99c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  // List of observers interested in event notifications from us.
100c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  ObserverList<Observer> observers_;
101c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
102c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // The Bluetooth class of the device, a bitmask that may be decoded using
103c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // https://www.bluetooth.org/Technical/AssignedNumbers/baseband.htm
104c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  uint32 bluetooth_class_;
105c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
106c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // The name of the device, as supplied by the remote device.
107c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  std::string name_;
108c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
109c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // The Bluetooth address of the device.
110c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  std::string address_;
111c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
112a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  // Tracked device state, updated by the adapter managing the lifecycle of
113c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // the device.
114c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  bool paired_;
115c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  bool connected_;
1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
117c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // Used to send change notifications when a device disappears during
118c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // discovery.
119c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  bool visible_;
1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
121c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // The services (identified by UUIDs) that this device provides.
12223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  UUIDList uuids_;
12323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
12423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  // The service records retrieved from SDP.
12546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  typedef ScopedVector<BluetoothServiceRecordWin> ServiceRecordList;
1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ServiceRecordList service_record_list_;
1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(BluetoothDeviceWin);
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace device
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // DEVICE_BLUETOOTH_BLUETOOTH_DEVICE_WIN_H_
134