| Index: device/bluetooth/adapter.cc
|
| diff --git a/device/bluetooth/adapter.cc b/device/bluetooth/adapter.cc
|
| index 639e7a2fd501b984dcbe1fc63486200e7523ef1c..140999708b0b82de5461ebebe4549d5998e16546 100644
|
| --- a/device/bluetooth/adapter.cc
|
| +++ b/device/bluetooth/adapter.cc
|
| @@ -8,9 +8,52 @@
|
|
|
| #include "device/bluetooth/adapter.h"
|
| #include "device/bluetooth/device.h"
|
| -#include "mojo/public/cpp/bindings/strong_binding.h"
|
|
|
| namespace bluetooth {
|
| +namespace {
|
| +mojom::ConnectResult BluetoothErrorCodeToMojomResult(
|
| + device::BluetoothDevice::ConnectErrorCode error_code) {
|
| + switch (error_code) {
|
| + case device::BluetoothDevice::ConnectErrorCode::
|
| + ERROR_ATTRIBUTE_LENGTH_INVALID:
|
| + return mojom::ConnectResult::ATTRIBUTE_LENGTH_INVALID;
|
| + case device::BluetoothDevice::ConnectErrorCode::ERROR_AUTH_CANCELED:
|
| + return mojom::ConnectResult::AUTH_CANCELED;
|
| + case device::BluetoothDevice::ConnectErrorCode::ERROR_AUTH_FAILED:
|
| + return mojom::ConnectResult::AUTH_FAILED;
|
| + case device::BluetoothDevice::ConnectErrorCode::ERROR_AUTH_REJECTED:
|
| + return mojom::ConnectResult::AUTH_REJECTED;
|
| + case device::BluetoothDevice::ConnectErrorCode::ERROR_AUTH_TIMEOUT:
|
| + return mojom::ConnectResult::AUTH_TIMEOUT;
|
| + case device::BluetoothDevice::ConnectErrorCode::ERROR_CONNECTION_CONGESTED:
|
| + return mojom::ConnectResult::CONNECTION_CONGESTED;
|
| + case device::BluetoothDevice::ConnectErrorCode::ERROR_FAILED:
|
| + return mojom::ConnectResult::FAILED;
|
| + case device::BluetoothDevice::ConnectErrorCode::ERROR_INPROGRESS:
|
| + return mojom::ConnectResult::INPROGRESS;
|
| + case device::BluetoothDevice::ConnectErrorCode::
|
| + ERROR_INSUFFICIENT_ENCRYPTION:
|
| + return mojom::ConnectResult::INSUFFICIENT_ENCRYPTION;
|
| + case device::BluetoothDevice::ConnectErrorCode::ERROR_OFFSET_INVALID:
|
| + return mojom::ConnectResult::OFFSET_INVALID;
|
| + case device::BluetoothDevice::ConnectErrorCode::ERROR_READ_NOT_PERMITTED:
|
| + return mojom::ConnectResult::READ_NOT_PERMITTED;
|
| + case device::BluetoothDevice::ConnectErrorCode::ERROR_REQUEST_NOT_SUPPORTED:
|
| + return mojom::ConnectResult::REQUEST_NOT_SUPPORTED;
|
| + case device::BluetoothDevice::ConnectErrorCode::ERROR_UNKNOWN:
|
| + return mojom::ConnectResult::UNKNOWN;
|
| + case device::BluetoothDevice::ConnectErrorCode::ERROR_UNSUPPORTED_DEVICE:
|
| + return mojom::ConnectResult::UNSUPPORTED_DEVICE;
|
| + case device::BluetoothDevice::ConnectErrorCode::ERROR_WRITE_NOT_PERMITTED:
|
| + return mojom::ConnectResult::WRITE_NOT_PERMITTED;
|
| + case device::BluetoothDevice::ConnectErrorCode::NUM_CONNECT_ERROR_CODES:
|
| + NOTREACHED();
|
| + return mojom::ConnectResult::UNTRANSLATED_CONNECT_ERROR_CODE;
|
| + }
|
| + NOTREACHED();
|
| + return mojom::ConnectResult::UNTRANSLATED_CONNECT_ERROR_CODE;
|
| +}
|
| +} // namespace
|
|
|
| Adapter::Adapter(scoped_refptr<device::BluetoothAdapter> adapter)
|
| : adapter_(std::move(adapter)), client_(nullptr), weak_ptr_factory_(this) {
|
| @@ -34,12 +77,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 +134,21 @@ void Adapter::DeviceChanged(device::BluetoothAdapter* adapter,
|
| }
|
| }
|
|
|
| +void Adapter::OnGattConnected(
|
| + const ConnectToDeviceCallback& callback,
|
| + std::unique_ptr<device::BluetoothGattConnection> connection) {
|
| + mojom::DevicePtr device_ptr;
|
| +
|
| + // Owns itself.
|
| + new Device(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) {
|
| + mojom::ConnectResult code = BluetoothErrorCodeToMojomResult(error_code);
|
| + callback.Run(code, nullptr /* Device */);
|
| +}
|
| } // namespace bluetooth
|
|
|