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