| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include <string> | 5 #include <string> |
| 6 #include <utility> | 6 #include <utility> |
| 7 #include <vector> | 7 #include <vector> |
| 8 | 8 |
| 9 #include "base/memory/ptr_util.h" |
| 9 #include "device/bluetooth/adapter.h" | 10 #include "device/bluetooth/adapter.h" |
| 10 #include "device/bluetooth/device.h" | 11 #include "device/bluetooth/device.h" |
| 11 #include "mojo/public/cpp/bindings/strong_binding.h" | 12 #include "device/bluetooth/public/interfaces/connect_result_type_converter.h" |
| 12 | 13 |
| 13 namespace bluetooth { | 14 namespace bluetooth { |
| 14 | 15 |
| 15 Adapter::Adapter(scoped_refptr<device::BluetoothAdapter> adapter) | 16 Adapter::Adapter(scoped_refptr<device::BluetoothAdapter> adapter) |
| 16 : adapter_(std::move(adapter)), client_(nullptr), weak_ptr_factory_(this) { | 17 : adapter_(std::move(adapter)), client_(nullptr), weak_ptr_factory_(this) { |
| 17 adapter_->AddObserver(this); | 18 adapter_->AddObserver(this); |
| 18 } | 19 } |
| 19 | 20 |
| 20 Adapter::~Adapter() { | 21 Adapter::~Adapter() { |
| 21 adapter_->RemoveObserver(this); | 22 adapter_->RemoveObserver(this); |
| 22 adapter_ = nullptr; | 23 adapter_ = nullptr; |
| 23 } | 24 } |
| 24 | 25 |
| 25 void Adapter::GetInfo(const GetInfoCallback& callback) { | 26 void Adapter::GetInfo(const GetInfoCallback& callback) { |
| 26 mojom::AdapterInfoPtr adapter_info = mojom::AdapterInfo::New(); | 27 mojom::AdapterInfoPtr adapter_info = mojom::AdapterInfo::New(); |
| 27 adapter_info->address = adapter_->GetAddress(); | 28 adapter_info->address = adapter_->GetAddress(); |
| 28 adapter_info->name = adapter_->GetName(); | 29 adapter_info->name = adapter_->GetName(); |
| 29 adapter_info->initialized = adapter_->IsInitialized(); | 30 adapter_info->initialized = adapter_->IsInitialized(); |
| 30 adapter_info->present = adapter_->IsPresent(); | 31 adapter_info->present = adapter_->IsPresent(); |
| 31 adapter_info->powered = adapter_->IsPowered(); | 32 adapter_info->powered = adapter_->IsPowered(); |
| 32 adapter_info->discoverable = adapter_->IsDiscoverable(); | 33 adapter_info->discoverable = adapter_->IsDiscoverable(); |
| 33 adapter_info->discovering = adapter_->IsDiscovering(); | 34 adapter_info->discovering = adapter_->IsDiscovering(); |
| 34 callback.Run(std::move(adapter_info)); | 35 callback.Run(std::move(adapter_info)); |
| 35 } | 36 } |
| 36 | 37 |
| 37 void Adapter::GetDevice(const std::string& address, | 38 void Adapter::ConnectToDevice(const std::string& address, |
| 38 const GetDeviceCallback& callback) { | 39 const ConnectToDeviceCallback& callback) { |
| 39 mojom::DevicePtr device_ptr; | 40 device::BluetoothDevice* device = adapter_->GetDevice(address); |
| 40 mojo::MakeStrongBinding(base::MakeUnique<Device>(address, adapter_), | 41 |
| 41 mojo::GetProxy(&device_ptr)); | 42 if (!device) { |
| 42 callback.Run(std::move(device_ptr)); | 43 callback.Run(mojom::ConnectResult::DEVICE_NO_LONGER_IN_RANGE, |
| 44 nullptr /* device */); |
| 45 return; |
| 46 } |
| 47 |
| 48 device->CreateGattConnection( |
| 49 base::Bind(&Adapter::OnGattConnected, weak_ptr_factory_.GetWeakPtr(), |
| 50 callback), |
| 51 base::Bind(&Adapter::OnConnectError, weak_ptr_factory_.GetWeakPtr(), |
| 52 callback)); |
| 43 } | 53 } |
| 44 | 54 |
| 45 void Adapter::GetDevices(const GetDevicesCallback& callback) { | 55 void Adapter::GetDevices(const GetDevicesCallback& callback) { |
| 46 std::vector<mojom::DeviceInfoPtr> devices; | 56 std::vector<mojom::DeviceInfoPtr> devices; |
| 47 | 57 |
| 48 for (const device::BluetoothDevice* device : adapter_->GetDevices()) { | 58 for (const device::BluetoothDevice* device : adapter_->GetDevices()) { |
| 49 mojom::DeviceInfoPtr device_info = | 59 mojom::DeviceInfoPtr device_info = |
| 50 Device::ConstructDeviceInfoStruct(device); | 60 Device::ConstructDeviceInfoStruct(device); |
| 51 devices.push_back(std::move(device_info)); | 61 devices.push_back(std::move(device_info)); |
| 52 } | 62 } |
| (...skipping 22 matching lines...) Expand all Loading... |
| 75 } | 85 } |
| 76 | 86 |
| 77 void Adapter::DeviceChanged(device::BluetoothAdapter* adapter, | 87 void Adapter::DeviceChanged(device::BluetoothAdapter* adapter, |
| 78 device::BluetoothDevice* device) { | 88 device::BluetoothDevice* device) { |
| 79 if (client_) { | 89 if (client_) { |
| 80 auto device_info = Device::ConstructDeviceInfoStruct(device); | 90 auto device_info = Device::ConstructDeviceInfoStruct(device); |
| 81 client_->DeviceChanged(std::move(device_info)); | 91 client_->DeviceChanged(std::move(device_info)); |
| 82 } | 92 } |
| 83 } | 93 } |
| 84 | 94 |
| 95 void Adapter::OnGattConnected( |
| 96 const ConnectToDeviceCallback& callback, |
| 97 std::unique_ptr<device::BluetoothGattConnection> connection) { |
| 98 mojom::DevicePtr device_ptr; |
| 99 Device::Create(adapter_, std::move(connection), mojo::GetProxy(&device_ptr)); |
| 100 callback.Run(mojom::ConnectResult::SUCCESS, std::move(device_ptr)); |
| 101 } |
| 102 |
| 103 void Adapter::OnConnectError( |
| 104 const ConnectToDeviceCallback& callback, |
| 105 device::BluetoothDevice::ConnectErrorCode error_code) { |
| 106 callback.Run(mojo::ConvertTo<mojom::ConnectResult>(error_code), |
| 107 nullptr /* Device */); |
| 108 } |
| 85 } // namespace bluetooth | 109 } // namespace bluetooth |
| OLD | NEW |