Index: device/bluetooth/device.h |
diff --git a/device/bluetooth/device.h b/device/bluetooth/device.h |
index c82439e6c283ecb6e851e466061bedf060a18420..db2aeb2c85a82f9f2beefc07c47323ab91772b21 100644 |
--- a/device/bluetooth/device.h |
+++ b/device/bluetooth/device.h |
@@ -5,13 +5,18 @@ |
#ifndef DEVICE_BLUETOOTH_DEVICE_H_ |
#define DEVICE_BLUETOOTH_DEVICE_H_ |
+#include <memory> |
#include <string> |
+#include <vector> |
#include "base/macros.h" |
#include "base/memory/ref_counted.h" |
#include "device/bluetooth/bluetooth_adapter.h" |
#include "device/bluetooth/bluetooth_device.h" |
+#include "device/bluetooth/bluetooth_gatt_connection.h" |
+#include "device/bluetooth/bluetooth_remote_gatt_service.h" |
#include "device/bluetooth/public/interfaces/device.mojom.h" |
+#include "mojo/public/cpp/bindings/binding.h" |
namespace bluetooth { |
@@ -19,26 +24,60 @@ namespace bluetooth { |
// device/bluetooth/public/interfaces/device.mojom. |
// It handles requests to interact with Bluetooth Device. |
// Uses the platform abstraction of device/bluetooth. |
-class Device : public mojom::Device { |
+// Instances of this class are constructed by Adapter and are bound to their |
+// MessagePipe and BluetoothGattConnection lifetimes. In the case where either |
+// the MessagePipe or BluetoothGattConnection dies, the instance deletes itself. |
+class Device : public mojom::Device, public device::BluetoothAdapter::Observer { |
public: |
- Device(const std::string& address, |
- scoped_refptr<device::BluetoothAdapter> adapter); |
+ Device(scoped_refptr<device::BluetoothAdapter> adapter, |
+ std::unique_ptr<device::BluetoothGattConnection> connection, |
+ mojom::DeviceRequest request); |
~Device() override; |
// Creates a mojom::DeviceInfo using info from the given |device|. |
static mojom::DeviceInfoPtr ConstructDeviceInfoStruct( |
const device::BluetoothDevice* device); |
+ // Registers a handler to receive error notifications. |
+ // |
+ // The default connection error handler is the Disconnect function. Changing |
+ // the connection error handler prevents the Device from destroying itself |
+ // after Mojo binding connection errors, so callers of this function should |
+ // be prepared to cleanup Device unless the BluetoothGattConnection is |
+ // dropped. |
+ void set_connection_error_handler(const base::Closure& closure); |
ortuno
2016/11/01 06:27:39
Why do you need to expose this? Also since it's on
mbrunson
2016/11/02 01:25:46
I was getting segfaults when calling Device functi
|
+ |
+ // BluetoothAdapter::Observer overrides: |
+ void DeviceChanged(device::BluetoothAdapter* adapter, |
+ device::BluetoothDevice* device) override; |
+ void GattServicesDiscovered(device::BluetoothAdapter* adapter, |
+ device::BluetoothDevice* device) override; |
+ |
// mojom::Device overrides: |
+ void Disconnect() override; |
void GetInfo(const GetInfoCallback& callback) override; |
+ void GetServices(const GetServicesCallback& callback) override; |
private: |
- // The address of the Bluetooth device. |
- std::string address_; |
+ void GetServicesImpl(const GetServicesCallback& callback); |
+ |
+ mojom::ServiceInfoPtr ConstructServiceInfoStruct( |
+ const device::BluetoothRemoteGattService* service); |
+ |
+ std::string GetAddress(); |
ortuno
2016/11/01 06:27:39
hmm I might be missing something but it seems this
mbrunson
2016/11/02 01:25:46
Ah yes. It should be. Done.
|
// The current BluetoothAdapter. |
scoped_refptr<device::BluetoothAdapter> adapter_; |
+ // The GATT connection to this device. |
+ std::unique_ptr<device::BluetoothGattConnection> connection_; |
+ |
+ // The services request queue which holds callbacks that are waiting for |
+ // services to be discovered for this device. |
+ std::vector<base::Closure> pending_services_requests_; |
+ |
+ mojo::Binding<mojom::Device> binding_; |
+ |
DISALLOW_COPY_AND_ASSIGN(Device); |
}; |