Index: device/bluetooth/adapter.cc |
diff --git a/device/bluetooth/adapter.cc b/device/bluetooth/adapter.cc |
index 639e7a2fd501b984dcbe1fc63486200e7523ef1c..afb37b0d03407414fe9d4f3e9454141a32fb050c 100644 |
--- a/device/bluetooth/adapter.cc |
+++ b/device/bluetooth/adapter.cc |
@@ -34,12 +34,20 @@ 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) { |
ortuno
2016/10/25 10:42:09
nit: To avoid indenting lines:
if (!condition) {
mbrunson
2016/10/25 20:03:03
Done.
|
+ device->CreateGattConnection( |
+ base::Bind(&Adapter::OnGattConnected, weak_ptr_factory_.GetWeakPtr(), |
+ callback), |
+ base::Bind(&Adapter::OnConnectError, weak_ptr_factory_.GetWeakPtr(), |
+ callback)); |
+ } else { |
+ mojom::ConnectErrorPtr error = mojom::ConnectError::New(); |
+ error->code = mojom::ConnectError::Code::ERROR_FAILED; |
+ callback.Run(std::move(error), nullptr /* Device */); |
+ } |
} |
void Adapter::GetDevices(const GetDevicesCallback& callback) { |
@@ -82,4 +90,21 @@ void Adapter::DeviceChanged(device::BluetoothAdapter* adapter, |
} |
} |
+void Adapter::OnGattConnected( |
+ const ConnectToDeviceCallback& callback, |
+ std::unique_ptr<device::BluetoothGattConnection> connection) { |
+ mojom::DevicePtr device_ptr; |
+ mojo::MakeStrongBinding( |
+ base::MakeUnique<Device>(adapter_, std::move(connection)), |
+ mojo::GetProxy(&device_ptr)); |
+ callback.Run(nullptr /* ConnectError */, std::move(device_ptr)); |
+} |
+ |
+void Adapter::OnConnectError( |
+ const ConnectToDeviceCallback& callback, |
+ device::BluetoothDevice::ConnectErrorCode error_code) { |
+ mojom::ConnectErrorPtr error = mojom::ConnectError::New(); |
+ error->code = static_cast<mojom::ConnectError::Code>(error_code); |
ortuno
2016/10/25 10:42:09
Hmmm this is dangerous. Someone could add a new er
mbrunson
2016/10/25 20:03:03
Done.
|
+ callback.Run(std::move(error), nullptr /* Device */); |
+} |
} // namespace bluetooth |