summaryrefslogtreecommitdiffstats
path: root/chrome/browser/chromeos/bluetooth/bluetooth_adapter_chromeos.h
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/chromeos/bluetooth/bluetooth_adapter_chromeos.h')
-rw-r--r--chrome/browser/chromeos/bluetooth/bluetooth_adapter_chromeos.h232
1 files changed, 232 insertions, 0 deletions
diff --git a/chrome/browser/chromeos/bluetooth/bluetooth_adapter_chromeos.h b/chrome/browser/chromeos/bluetooth/bluetooth_adapter_chromeos.h
new file mode 100644
index 0000000..2a0db65
--- /dev/null
+++ b/chrome/browser/chromeos/bluetooth/bluetooth_adapter_chromeos.h
@@ -0,0 +1,232 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_CHROMEOS_BLUETOOTH_BLUETOOTH_ADAPTER_CHROMEOS_H_
+#define CHROME_BROWSER_CHROMEOS_BLUETOOTH_BLUETOOTH_ADAPTER_CHROMEOS_H_
+
+#include <map>
+#include <string>
+#include <vector>
+
+#include "base/basictypes.h"
+#include "base/callback.h"
+#include "base/observer_list.h"
+#include "chrome/browser/chromeos/bluetooth/bluetooth_adapter.h"
+#include "chromeos/dbus/bluetooth_adapter_client.h"
+#include "chromeos/dbus/bluetooth_device_client.h"
+#include "chromeos/dbus/bluetooth_manager_client.h"
+#include "dbus/object_path.h"
+
+namespace chromeos {
+
+class BluetoothDeviceChromeOs;
+
+struct BluetoothOutOfBandPairingData;
+
+// The BluetoothAdapterChromeOs class is an implementation of BluetoothAdapter
+// for Chrome OS platform.
+class BluetoothAdapterChromeOs : public BluetoothAdapter,
+ public BluetoothManagerClient::Observer,
+ public BluetoothAdapterClient::Observer,
+ public BluetoothDeviceClient::Observer {
+ public:
+ // BluetoothAdapter override
+ virtual void AddObserver(BluetoothAdapter::Observer* observer) OVERRIDE;
+ virtual void RemoveObserver(BluetoothAdapter::Observer* observer) OVERRIDE;
+ virtual bool IsPresent() const OVERRIDE;
+ virtual bool IsPowered() const OVERRIDE;
+ virtual void SetPowered(
+ bool powered,
+ const base::Closure& callback,
+ const ErrorCallback& error_callback) OVERRIDE;
+ virtual bool IsDiscovering() const OVERRIDE;
+ virtual void SetDiscovering(
+ bool discovering,
+ const base::Closure& callback,
+ const ErrorCallback& error_callback) OVERRIDE;
+ virtual ConstDeviceList GetDevices() const OVERRIDE;
+ virtual BluetoothDevice* GetDevice(const std::string& address) OVERRIDE;
+ virtual const BluetoothDevice* GetDevice(
+ const std::string& address) const OVERRIDE;
+ virtual void ReadLocalOutOfBandPairingData(
+ const BluetoothOutOfBandPairingDataCallback& callback,
+ const ErrorCallback& error_callback) OVERRIDE;
+
+ private:
+ friend class BluetoothAdapterFactory;
+ friend class BluetoothDeviceChromeOs;
+ friend class MockBluetoothAdapter;
+
+ BluetoothAdapterChromeOs();
+ virtual ~BluetoothAdapterChromeOs();
+
+ // Obtains the default adapter object path from the Bluetooth Daemon
+ // and tracks future changes to it.
+ void TrackDefaultAdapter();
+
+ // Obtains the object paht for the adapter named by |address| from the
+ // Bluetooth Daemon.
+ void FindAdapter(const std::string& address);
+
+ // Called by dbus:: in response to the method call sent by both
+ // DefaultAdapter() and FindAdapter(), |object_path| will contain the
+ // dbus object path of the requested adapter when |success| is true.
+ void AdapterCallback(const dbus::ObjectPath& adapter_path, bool success);
+
+ // BluetoothManagerClient::Observer override.
+ //
+ // Called when the default local bluetooth adapter changes.
+ // |object_path| is the dbus object path of the new default adapter.
+ // Not called if all adapters are removed.
+ virtual void DefaultAdapterChanged(const dbus::ObjectPath& adapter_path)
+ OVERRIDE;
+
+ // BluetoothManagerClient::Observer override.
+ //
+ // Called when a local bluetooth adapter is removed.
+ // |object_path| is the dbus object path of the adapter.
+ virtual void AdapterRemoved(const dbus::ObjectPath& adapter_path) OVERRIDE;
+
+ // Changes the tracked adapter to the dbus object path |adapter_path|,
+ // clearing information from the previously tracked adapter and updating
+ // to the new adapter.
+ void ChangeAdapter(const dbus::ObjectPath& adapter_path);
+
+ // Clears the tracked adapter information.
+ void RemoveAdapter();
+
+ // Called by dbus:: in response to the method call send by SetPowered().
+ // |callback| and |error_callback| are the callbacks passed to SetPowered().
+ void OnSetPowered(const base::Closure& callback,
+ const ErrorCallback& error_callback,
+ bool success);
+
+ // Updates the tracked state of the adapter's radio power to |powered|
+ // and notifies observers. Called on receipt of a property changed signal,
+ // and directly using values obtained from properties.
+ void PoweredChanged(bool powered);
+
+ // Called by dbus:: in response to the method calls send by SetDiscovering().
+ // |callback| and |error_callback| are the callbacks passed to
+ // SetDiscovering().
+ void OnStartDiscovery(const base::Closure& callback,
+ const ErrorCallback& error_callback,
+ const dbus::ObjectPath& adapter_path,
+ bool success);
+ void OnStopDiscovery(const base::Closure& callback,
+ const ErrorCallback& error_callback,
+ const dbus::ObjectPath& adapter_path,
+ bool success);
+
+ // Updates the tracked state of the adapter's discovering state to
+ // |discovering| and notifies observers. Called on receipt of a property
+ // changed signal, and directly using values obtained from properties.
+ void DiscoveringChanged(bool discovering);
+
+ // Called by dbus:: in response to the ReadLocalData method call.
+ void OnReadLocalData(const BluetoothOutOfBandPairingDataCallback& callback,
+ const ErrorCallback& error_callback,
+ const BluetoothOutOfBandPairingData& data,
+ bool success);
+
+ // BluetoothAdapterClient::Observer override.
+ //
+ // Called when the adapter with object path |adapter_path| has a
+ // change in value of the property named |property_name|.
+ virtual void AdapterPropertyChanged(const dbus::ObjectPath& adapter_path,
+ const std::string& property_name)
+ OVERRIDE;
+
+ // BluetoothDeviceClient::Observer override.
+ //
+ // Called when the device with object path |device_path| has a
+ // change in value of the property named |property_name|.
+ virtual void DevicePropertyChanged(const dbus::ObjectPath& device_path,
+ const std::string& property_name)
+ OVERRIDE;
+
+ // Updates information on the device with object path |device_path|,
+ // adding it to the |devices_| map if not already present.
+ void UpdateDevice(const dbus::ObjectPath& device_path);
+
+ // Clears the |devices_| list, notifying obsevers of the device removal.
+ void ClearDevices();
+
+ // BluetoothAdapterClient::Observer override.
+ //
+ // Called when the adapter with object path |object_path| has a
+ // new known device with object path |object_path|.
+ virtual void DeviceCreated(const dbus::ObjectPath& adapter_path,
+ const dbus::ObjectPath& device_path) OVERRIDE;
+
+ // BluetoothAdapterClient::Observer override.
+ //
+ // Called when the adapter with object path |object_path| removes
+ // the known device with object path |object_path|.
+ virtual void DeviceRemoved(const dbus::ObjectPath& adapter_path,
+ const dbus::ObjectPath& device_path) OVERRIDE;
+
+ // Updates the adapter |devices_| list, adding or updating devices using
+ // the object paths in the|devices| list. This doesn't remove devices,
+ // relying instead on the DeviceRemoved() signal for that. Called on
+ // receipt of a property changed signal, and directly using values obtained
+ // from properties.
+ void DevicesChanged(const std::vector<dbus::ObjectPath>& devices);
+
+ // Clears discovered devices from the |devices_| list, notifying
+ // observers, and leaving only those devices with a dbus object path.
+ void ClearDiscoveredDevices();
+
+ // BluetoothAdapterClient::Observer override.
+ //
+ // Called when the adapter with object path |object_path| discovers
+ // a new remote device with address |address| and properties
+ // |properties|, there is no device object path until connected.
+ //
+ // |properties| supports only value() calls, not Get() or Set(), and
+ // should be copied if needed.
+ virtual void DeviceFound(
+ const dbus::ObjectPath& adapter_path,
+ const std::string& address,
+ const BluetoothDeviceClient::Properties& properties) OVERRIDE;
+
+ // BluetoothAdapterClient::Observer override.
+ //
+ // Called when the adapter with object path |object_path| can no
+ // longer communicate with the discovered removed device with
+ // address |address|.
+ virtual void DeviceDisappeared(const dbus::ObjectPath& object_path,
+ const std::string& address) OVERRIDE;
+
+ // List of observers interested in event notifications from us.
+ ObserverList<BluetoothAdapter::Observer> observers_;
+
+ // Object path of adapter for this instance, this is fixed at creation time
+ // unless |track_default_| is true in which case we update it to always
+ // point at the default adapter.
+ bool track_default_;
+ dbus::ObjectPath object_path_;
+
+ // Tracked adapter state, cached locally so we only send change notifications
+ // to observers on a genuine change.
+ bool powered_;
+ bool discovering_;
+
+ // Devices paired with, connected to, discovered by, or visible to the
+ // adapter. The key is the Bluetooth address of the device and the value
+ // is the BluetoothDeviceChromeOs object whose lifetime is managed by the
+ // adapter instance.
+ typedef std::map<const std::string, BluetoothDeviceChromeOs*> DevicesMap;
+ DevicesMap devices_;
+
+ // Note: This should remain the last member so it'll be destroyed and
+ // invalidate its weak pointers before any other members are destroyed.
+ base::WeakPtrFactory<BluetoothAdapterChromeOs> weak_ptr_factory_;
+
+ DISALLOW_COPY_AND_ASSIGN(BluetoothAdapterChromeOs);
+};
+
+} // namespace chromeos
+
+#endif // CHROME_BROWSER_CHROMEOS_BLUETOOTH_BLUETOOTH_ADAPTER_CHROMEOS_H_