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( 255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const BluetoothTaskManagerWin::DeviceState& device_state, 265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const scoped_refptr<base::SequencedTaskRunner>& ui_task_runner, 275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const 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 33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual uint32 GetBluetoothClass() const OVERRIDE; 34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual std::string GetAddress() const OVERRIDE; 35a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) virtual VendorIDSource GetVendorIDSource() const OVERRIDE; 36c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual uint16 GetVendorID() const OVERRIDE; 37c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual uint16 GetProductID() const OVERRIDE; 38c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual uint16 GetDeviceID() const OVERRIDE; 395c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu virtual int GetRSSI() const OVERRIDE; 405c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu virtual int GetCurrentHostTransmitPower() const OVERRIDE; 415c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu virtual int GetMaximumHostTransmitPower() const OVERRIDE; 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool IsPaired() const OVERRIDE; 43c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual bool IsConnected() const OVERRIDE; 44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual bool IsConnectable() const OVERRIDE; 45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual bool IsConnecting() const OVERRIDE; 4623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) virtual UUIDList GetUUIDs() const OVERRIDE; 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool ExpectingPinCode() const OVERRIDE; 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool ExpectingPasskey() const OVERRIDE; 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool ExpectingConfirmation() const OVERRIDE; 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void Connect( 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PairingDelegate* pairing_delegate, 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Closure& callback, 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const ConnectErrorCallback& error_callback) OVERRIDE; 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetPinCode(const std::string& pincode) OVERRIDE; 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetPasskey(uint32 passkey) OVERRIDE; 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void ConfirmPairing() OVERRIDE; 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void RejectPairing() OVERRIDE; 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void CancelPairing() OVERRIDE; 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void Disconnect( 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Closure& callback, 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ErrorCallback& error_callback) OVERRIDE; 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void Forget(const ErrorCallback& error_callback) OVERRIDE; 63010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) virtual void ConnectToService( 64010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) const BluetoothUUID& uuid, 65010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) const ConnectToServiceCallback& callback, 66010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) const ConnectToServiceErrorCallback& error_callback) OVERRIDE; 67f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual void CreateGattConnection( 68f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const GattConnectionCallback& callback, 69f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const ConnectErrorCallback& error_callback) OVERRIDE; 70cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual void StartConnectionMonitor( 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Closure& callback, 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ErrorCallback& error_callback) OVERRIDE; 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) // Used by BluetoothProfileWin to retrieve the service record for the given 7523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) // |uuid|. 7646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const BluetoothServiceRecordWin* GetServiceRecord( 77c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch const device::BluetoothUUID& uuid) const; 78c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Returns true if all fields and services of this instance are equal to the 805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // fields and services stored in |device_state|. 815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) bool IsEqual(const BluetoothTaskManagerWin::DeviceState& device_state); 825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Updates this instance with all fields and properties stored in 845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // |device_state|. 855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) void Update(const BluetoothTaskManagerWin::DeviceState& device_state); 865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 87c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) protected: 88c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // BluetoothDevice override 89c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual std::string GetDeviceName() const OVERRIDE; 90c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) friend class BluetoothAdapterWin; 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 94c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Used by BluetoothAdapterWin to update the visible state during 95c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // discovery. 96c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void SetVisible(bool visible); 97c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Updates the services with services stored in |device_state|. 995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) void UpdateServices(const BluetoothTaskManagerWin::DeviceState& device_state); 1005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 101c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch scoped_refptr<base::SequencedTaskRunner> ui_task_runner_; 102010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) scoped_refptr<BluetoothSocketThread> socket_thread_; 103c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch net::NetLog* net_log_; 104c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch net::NetLog::Source net_log_source_; 105c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 106c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // The Bluetooth class of the device, a bitmask that may be decoded using 107c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // https://www.bluetooth.org/Technical/AssignedNumbers/baseband.htm 108c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) uint32 bluetooth_class_; 109c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 110c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // The name of the device, as supplied by the remote device. 111c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string name_; 112c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 113c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // The Bluetooth address of the device. 114c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string address_; 115c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 116a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // Tracked device state, updated by the adapter managing the lifecycle of 117c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // the device. 118c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool paired_; 119c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool connected_; 1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 121c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Used to send change notifications when a device disappears during 122c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // discovery. 123c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool visible_; 1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 125c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // The services (identified by UUIDs) that this device provides. 12623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) UUIDList uuids_; 12723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 12823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) // The service records retrieved from SDP. 12946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) typedef ScopedVector<BluetoothServiceRecordWin> ServiceRecordList; 1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ServiceRecordList service_record_list_; 1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(BluetoothDeviceWin); 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace device 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // DEVICE_BLUETOOTH_BLUETOOTH_DEVICE_WIN_H_ 138