17d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 2c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// found in the LICENSE file. 4c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 57d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#ifndef CHROMEOS_DBUS_BLUETOOTH_DEVICE_CLIENT_H_ 67d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#define CHROMEOS_DBUS_BLUETOOTH_DEVICE_CLIENT_H_ 7c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 8c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include <string> 9c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include <vector> 10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/callback.h" 12c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/observer_list.h" 13c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/values.h" 14c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chromeos/chromeos_export.h" 15c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chromeos/dbus/dbus_client_implementation_type.h" 16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "dbus/object_path.h" 17c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "dbus/property.h" 18c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 19c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace dbus { 20c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class Bus; 21c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} // namespace dbus 22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace chromeos { 24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 257d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// BluetoothDeviceClient is used to communicate with objects representing 267d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// remote Bluetooth Devices. 277d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)class CHROMEOS_EXPORT BluetoothDeviceClient { 28c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public: 29c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Structure of properties associated with bluetooth devices. 30c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) struct Properties : public dbus::PropertySet { 31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // The Bluetooth device address of the device. Read-only. 32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) dbus::Property<std::string> address; 33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // The Bluetooth friendly name of the device. Read-only, to give a 35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // different local name, use the |alias| property. 36c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) dbus::Property<std::string> name; 37c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 38c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Proposed icon name for the device according to the freedesktop.org 39c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // icon naming specification. Read-only. 40c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) dbus::Property<std::string> icon; 41c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 42c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // The Bluetooth class of the device. Read-only. 43c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) dbus::Property<uint32> bluetooth_class; 44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // The GAP external appearance of the device. Read-only. 46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) dbus::Property<uint16> appearance; 47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Unique numeric identifier for the vendor of the device. Read-only. 49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) dbus::Property<uint16> vendor; 50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // List of 128-bit UUIDs that represent the available remote services. 52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Read-only. 53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) dbus::Property<std::vector<std::string> > uuids; 54c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 55c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Indicates that the device is currently paired. Read-only. 56c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) dbus::Property<bool> paired; 57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Indicates that the device is currently connected. Read-only. 59c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) dbus::Property<bool> connected; 60c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 61c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Whether the device is trusted, and connections should be always 62c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // accepted and attempted when the device is visible. 63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) dbus::Property<bool> trusted; 64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 65c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Whether the device is blocked, connections will be always rejected 66c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // and the device will not be visible. 67c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) dbus::Property<bool> blocked; 68c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 69c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Local alias for the device, if not set, is equal to |name|. 70c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) dbus::Property<std::string> alias; 71c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 72c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Object path of the adapter the device belongs to. Read-only. 73c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) dbus::Property<dbus::ObjectPath> adapter; 74c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 75c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Indicates whether the device is likely to only support pre-2.1 76c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // PIN Code pairing rather than 2.1 Secure Simple Pairing, this can 77c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // give false positives. Read-only. 78c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) dbus::Property<bool> legacy_pairing; 79c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 80c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Remote Device ID information in Linux kernel modalias format. Read-only. 81c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) dbus::Property<std::string> modalias; 82c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 83c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Received signal strength indicator. Read-only. 84c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) dbus::Property<int16> rssi; 85c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 86c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Properties(dbus::ObjectProxy* object_proxy, 87c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& interface_name, 88c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const PropertyChangedCallback& callback); 89c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual ~Properties(); 90c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) }; 91c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 92c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Interface for observing changes from a remote bluetooth device. 93c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) class Observer { 94c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public: 95c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual ~Observer() {} 96c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 97c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Called when the remote device with object path |object_path| is added 98c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // to the set of known devices. 99c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void DeviceAdded(const dbus::ObjectPath& object_path) {} 100c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 101c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Called when the remote device with object path |object_path| is removed 102c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // from the set of known devices. 103c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void DeviceRemoved(const dbus::ObjectPath& object_path) {} 104c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 105c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Called when the device with object path |object_path| has a 106c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // change in value of the property named |property_name|. 107c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void DevicePropertyChanged(const dbus::ObjectPath& object_path, 108c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& property_name) {} 109c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) }; 110c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1117d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) virtual ~BluetoothDeviceClient(); 112c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 113c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Adds and removes observers for events on all remote bluetooth 114c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // devices. Check the |object_path| parameter of observer methods to 115c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // determine which device is issuing the event. 116c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void AddObserver(Observer* observer) = 0; 117c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void RemoveObserver(Observer* observer) = 0; 118c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 119c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Returns the list of device object paths associated with the given adapter 120c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // identified by the D-Bus object path |adapter_path|. 121c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual std::vector<dbus::ObjectPath> GetDevicesForAdapter( 122c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const dbus::ObjectPath& adapter_path) = 0; 123c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 124c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Obtain the properties for the device with object path |object_path|, 125c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // any values should be copied if needed. 126c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual Properties* GetProperties(const dbus::ObjectPath& object_path) = 0; 127c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 128c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // The ErrorCallback is used by device methods to indicate failure. 129c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // It receives two arguments: the name of the error in |error_name| and 130c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // an optional message in |error_message|. 131c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) typedef base::Callback<void(const std::string& error_name, 132c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& error_message)> ErrorCallback; 133c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 134c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Connects to the device with object path |object_path|, connecting any 135c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // profiles that can be connected to and have been flagged as auto-connected; 136c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // may be used to connect additional profiles for an already connected device, 137c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // and succeeds if at least one profile is connected. 138c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void Connect(const dbus::ObjectPath& object_path, 139c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::Closure& callback, 140c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const ErrorCallback& error_callback) = 0; 141c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 142c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Disconnects the device with object path |object_path|, terminating 143c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // the low-level ACL connection and any profiles using it. 144c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void Disconnect(const dbus::ObjectPath& object_path, 145c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::Closure& callback, 146c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const ErrorCallback& error_callback) = 0; 147c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 148c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Connects to the profile |uuid| on the device with object path 149c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // |object_path|, provided that the profile has been registered with a 150c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // handler on the local device. 151c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void ConnectProfile(const dbus::ObjectPath& object_path, 152c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& uuid, 153c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::Closure& callback, 154c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const ErrorCallback& error_callback) = 0; 155c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 156c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Disconnects from the profile |uuid| on the device with object path 157c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // |object_path|. 158c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void DisconnectProfile(const dbus::ObjectPath& object_path, 159c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& uuid, 160c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::Closure& callback, 161c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const ErrorCallback& error_callback) = 0; 162c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 163c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Initiates pairing with the device with object path |object_path| and 164c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // retrieves all SDP records or GATT primary services. An agent must be 165c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // registered to handle the pairing request. 166c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void Pair(const dbus::ObjectPath& object_path, 167c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::Closure& callback, 168c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const ErrorCallback& error_callback) = 0; 169c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 170c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Cancels an in-progress pairing with the device with object path 171c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // |object_path| initiated by Pair(). 172c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void CancelPairing(const dbus::ObjectPath& object_path, 173c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::Closure& callback, 174c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const ErrorCallback& error_callback) = 0; 175c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 176c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Creates the instance. 1777d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) static BluetoothDeviceClient* Create(DBusClientImplementationType type, 1787d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) dbus::Bus* bus); 179c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 180c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Constants used to indicate exceptional error conditions. 181c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) static const char kNoResponseError[]; 182c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) static const char kUnknownDeviceError[]; 183c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 184c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) protected: 1857d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) BluetoothDeviceClient(); 186c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 187c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private: 1887d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(BluetoothDeviceClient); 189c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 190c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 191c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} // namespace chromeos 192c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1937d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#endif // CHROMEOS_DBUS_BLUETOOTH_DEVICE_CLIENT_H_ 194