| Index: device/bluetooth/adapter.cc
|
| diff --git a/device/bluetooth/adapter.cc b/device/bluetooth/adapter.cc
|
| index 639e7a2fd501b984dcbe1fc63486200e7523ef1c..62eb9a54b08f777951034e123ef7c9a7405921c5 100644
|
| --- a/device/bluetooth/adapter.cc
|
| +++ b/device/bluetooth/adapter.cc
|
| @@ -6,9 +6,10 @@
|
| #include <utility>
|
| #include <vector>
|
|
|
| +#include "base/memory/ptr_util.h"
|
| #include "device/bluetooth/adapter.h"
|
| #include "device/bluetooth/device.h"
|
| -#include "mojo/public/cpp/bindings/strong_binding.h"
|
| +#include "device/bluetooth/public/interfaces/connect_result_type_converter.h"
|
|
|
| namespace bluetooth {
|
|
|
| @@ -34,12 +35,21 @@ void Adapter::GetInfo(const GetInfoCallback& callback) {
|
| callback.Run(std::move(adapter_info));
|
| }
|
|
|
| -void Adapter::GetDevice(const std::string& address,
|
| - const GetDeviceCallback& callback) {
|
| - mojom::DevicePtr device_ptr;
|
| - mojo::MakeStrongBinding(base::MakeUnique<Device>(address, adapter_),
|
| - mojo::GetProxy(&device_ptr));
|
| - callback.Run(std::move(device_ptr));
|
| +void Adapter::ConnectToDevice(const std::string& address,
|
| + const ConnectToDeviceCallback& callback) {
|
| + device::BluetoothDevice* device = adapter_->GetDevice(address);
|
| +
|
| + if (!device) {
|
| + callback.Run(mojom::ConnectResult::DEVICE_NO_LONGER_IN_RANGE,
|
| + nullptr /* device */);
|
| + return;
|
| + }
|
| +
|
| + device->CreateGattConnection(
|
| + base::Bind(&Adapter::OnGattConnected, weak_ptr_factory_.GetWeakPtr(),
|
| + callback),
|
| + base::Bind(&Adapter::OnConnectError, weak_ptr_factory_.GetWeakPtr(),
|
| + callback));
|
| }
|
|
|
| void Adapter::GetDevices(const GetDevicesCallback& callback) {
|
| @@ -82,4 +92,18 @@ void Adapter::DeviceChanged(device::BluetoothAdapter* adapter,
|
| }
|
| }
|
|
|
| +void Adapter::OnGattConnected(
|
| + const ConnectToDeviceCallback& callback,
|
| + std::unique_ptr<device::BluetoothGattConnection> connection) {
|
| + mojom::DevicePtr device_ptr;
|
| + Device::Create(adapter_, std::move(connection), mojo::GetProxy(&device_ptr));
|
| + callback.Run(mojom::ConnectResult::SUCCESS, std::move(device_ptr));
|
| +}
|
| +
|
| +void Adapter::OnConnectError(
|
| + const ConnectToDeviceCallback& callback,
|
| + device::BluetoothDevice::ConnectErrorCode error_code) {
|
| + callback.Run(mojo::ConvertTo<mojom::ConnectResult>(error_code),
|
| + nullptr /* Device */);
|
| +}
|
| } // namespace bluetooth
|
|
|