| 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 "base/memory/ptr_util.h" |
| 10 #include "device/bluetooth/adapter.h" | 10 #include "device/bluetooth/adapter.h" |
| 11 #include "device/bluetooth/device.h" | 11 #include "device/bluetooth/device.h" |
| 12 #include "device/bluetooth/discovery_session.h" |
| 12 #include "device/bluetooth/public/interfaces/connect_result_type_converter.h" | 13 #include "device/bluetooth/public/interfaces/connect_result_type_converter.h" |
| 14 #include "mojo/public/cpp/bindings/strong_binding.h" |
| 13 | 15 |
| 14 namespace bluetooth { | 16 namespace bluetooth { |
| 15 | 17 |
| 16 Adapter::Adapter(scoped_refptr<device::BluetoothAdapter> adapter) | 18 Adapter::Adapter(scoped_refptr<device::BluetoothAdapter> adapter) |
| 17 : adapter_(std::move(adapter)), client_(nullptr), weak_ptr_factory_(this) { | 19 : adapter_(std::move(adapter)), client_(nullptr), weak_ptr_factory_(this) { |
| 18 adapter_->AddObserver(this); | 20 adapter_->AddObserver(this); |
| 19 } | 21 } |
| 20 | 22 |
| 21 Adapter::~Adapter() { | 23 Adapter::~Adapter() { |
| 22 adapter_->RemoveObserver(this); | 24 adapter_->RemoveObserver(this); |
| 23 adapter_ = nullptr; | 25 adapter_ = nullptr; |
| 24 } | 26 } |
| 25 | 27 |
| 26 void Adapter::GetInfo(const GetInfoCallback& callback) { | |
| 27 mojom::AdapterInfoPtr adapter_info = mojom::AdapterInfo::New(); | |
| 28 adapter_info->address = adapter_->GetAddress(); | |
| 29 adapter_info->name = adapter_->GetName(); | |
| 30 adapter_info->initialized = adapter_->IsInitialized(); | |
| 31 adapter_info->present = adapter_->IsPresent(); | |
| 32 adapter_info->powered = adapter_->IsPowered(); | |
| 33 adapter_info->discoverable = adapter_->IsDiscoverable(); | |
| 34 adapter_info->discovering = adapter_->IsDiscovering(); | |
| 35 callback.Run(std::move(adapter_info)); | |
| 36 } | |
| 37 | |
| 38 void Adapter::ConnectToDevice(const std::string& address, | 28 void Adapter::ConnectToDevice(const std::string& address, |
| 39 const ConnectToDeviceCallback& callback) { | 29 const ConnectToDeviceCallback& callback) { |
| 40 device::BluetoothDevice* device = adapter_->GetDevice(address); | 30 device::BluetoothDevice* device = adapter_->GetDevice(address); |
| 41 | 31 |
| 42 if (!device) { | 32 if (!device) { |
| 43 callback.Run(mojom::ConnectResult::DEVICE_NO_LONGER_IN_RANGE, | 33 callback.Run(mojom::ConnectResult::DEVICE_NO_LONGER_IN_RANGE, |
| 44 nullptr /* device */); | 34 nullptr /* device */); |
| 45 return; | 35 return; |
| 46 } | 36 } |
| 47 | 37 |
| 48 device->CreateGattConnection( | 38 device->CreateGattConnection( |
| 49 base::Bind(&Adapter::OnGattConnected, weak_ptr_factory_.GetWeakPtr(), | 39 base::Bind(&Adapter::OnGattConnected, weak_ptr_factory_.GetWeakPtr(), |
| 50 callback), | 40 callback), |
| 51 base::Bind(&Adapter::OnConnectError, weak_ptr_factory_.GetWeakPtr(), | 41 base::Bind(&Adapter::OnConnectError, weak_ptr_factory_.GetWeakPtr(), |
| 52 callback)); | 42 callback)); |
| 53 } | 43 } |
| 54 | 44 |
| 55 void Adapter::GetDevices(const GetDevicesCallback& callback) { | 45 void Adapter::GetDevices(const GetDevicesCallback& callback) { |
| 56 std::vector<mojom::DeviceInfoPtr> devices; | 46 std::vector<mojom::DeviceInfoPtr> devices; |
| 57 | 47 |
| 58 for (const device::BluetoothDevice* device : adapter_->GetDevices()) { | 48 for (const device::BluetoothDevice* device : adapter_->GetDevices()) { |
| 59 mojom::DeviceInfoPtr device_info = | 49 mojom::DeviceInfoPtr device_info = |
| 60 Device::ConstructDeviceInfoStruct(device); | 50 Device::ConstructDeviceInfoStruct(device); |
| 61 devices.push_back(std::move(device_info)); | 51 devices.push_back(std::move(device_info)); |
| 62 } | 52 } |
| 63 | 53 |
| 64 callback.Run(std::move(devices)); | 54 callback.Run(std::move(devices)); |
| 65 } | 55 } |
| 66 | 56 |
| 57 void Adapter::GetInfo(const GetInfoCallback& callback) { |
| 58 mojom::AdapterInfoPtr adapter_info = mojom::AdapterInfo::New(); |
| 59 adapter_info->address = adapter_->GetAddress(); |
| 60 adapter_info->name = adapter_->GetName(); |
| 61 adapter_info->initialized = adapter_->IsInitialized(); |
| 62 adapter_info->present = adapter_->IsPresent(); |
| 63 adapter_info->powered = adapter_->IsPowered(); |
| 64 adapter_info->discoverable = adapter_->IsDiscoverable(); |
| 65 adapter_info->discovering = adapter_->IsDiscovering(); |
| 66 callback.Run(std::move(adapter_info)); |
| 67 } |
| 68 |
| 67 void Adapter::SetClient(mojom::AdapterClientPtr client) { | 69 void Adapter::SetClient(mojom::AdapterClientPtr client) { |
| 68 client_ = std::move(client); | 70 client_ = std::move(client); |
| 69 } | 71 } |
| 70 | 72 |
| 73 void Adapter::StartDiscoverySession( |
| 74 const StartDiscoverySessionCallback& callback) { |
| 75 adapter_->StartDiscoverySession( |
| 76 base::Bind(&Adapter::OnStartDiscoverySession, |
| 77 weak_ptr_factory_.GetWeakPtr(), callback), |
| 78 base::Bind(&Adapter::OnDiscoverySessionError, |
| 79 weak_ptr_factory_.GetWeakPtr(), callback)); |
| 80 } |
| 81 |
| 82 void Adapter::AdapterDiscoveringChanged(device::BluetoothAdapter* adapter, |
| 83 bool discovering) { |
| 84 if (client_) |
| 85 client_->DiscoveringChanged(discovering); |
| 86 } |
| 87 |
| 71 void Adapter::DeviceAdded(device::BluetoothAdapter* adapter, | 88 void Adapter::DeviceAdded(device::BluetoothAdapter* adapter, |
| 72 device::BluetoothDevice* device) { | 89 device::BluetoothDevice* device) { |
| 73 if (client_) { | 90 if (client_) { |
| 74 auto device_info = Device::ConstructDeviceInfoStruct(device); | 91 auto device_info = Device::ConstructDeviceInfoStruct(device); |
| 75 client_->DeviceAdded(std::move(device_info)); | 92 client_->DeviceAdded(std::move(device_info)); |
| 76 } | 93 } |
| 77 } | 94 } |
| 78 | 95 |
| 96 void Adapter::DeviceChanged(device::BluetoothAdapter* adapter, |
| 97 device::BluetoothDevice* device) { |
| 98 if (client_) { |
| 99 auto device_info = Device::ConstructDeviceInfoStruct(device); |
| 100 client_->DeviceChanged(std::move(device_info)); |
| 101 } |
| 102 } |
| 103 |
| 79 void Adapter::DeviceRemoved(device::BluetoothAdapter* adapter, | 104 void Adapter::DeviceRemoved(device::BluetoothAdapter* adapter, |
| 80 device::BluetoothDevice* device) { | 105 device::BluetoothDevice* device) { |
| 81 if (client_) { | 106 if (client_) { |
| 82 auto device_info = Device::ConstructDeviceInfoStruct(device); | 107 auto device_info = Device::ConstructDeviceInfoStruct(device); |
| 83 client_->DeviceRemoved(std::move(device_info)); | 108 client_->DeviceRemoved(std::move(device_info)); |
| 84 } | 109 } |
| 85 } | 110 } |
| 86 | 111 |
| 87 void Adapter::DeviceChanged(device::BluetoothAdapter* adapter, | |
| 88 device::BluetoothDevice* device) { | |
| 89 if (client_) { | |
| 90 auto device_info = Device::ConstructDeviceInfoStruct(device); | |
| 91 client_->DeviceChanged(std::move(device_info)); | |
| 92 } | |
| 93 } | |
| 94 | |
| 95 void Adapter::OnGattConnected( | 112 void Adapter::OnGattConnected( |
| 96 const ConnectToDeviceCallback& callback, | 113 const ConnectToDeviceCallback& callback, |
| 97 std::unique_ptr<device::BluetoothGattConnection> connection) { | 114 std::unique_ptr<device::BluetoothGattConnection> connection) { |
| 98 mojom::DevicePtr device_ptr; | 115 mojom::DevicePtr device_ptr; |
| 99 Device::Create(adapter_, std::move(connection), | 116 Device::Create(adapter_, std::move(connection), |
| 100 mojo::MakeRequest(&device_ptr)); | 117 mojo::MakeRequest(&device_ptr)); |
| 101 callback.Run(mojom::ConnectResult::SUCCESS, std::move(device_ptr)); | 118 callback.Run(mojom::ConnectResult::SUCCESS, std::move(device_ptr)); |
| 102 } | 119 } |
| 103 | 120 |
| 104 void Adapter::OnConnectError( | 121 void Adapter::OnConnectError( |
| 105 const ConnectToDeviceCallback& callback, | 122 const ConnectToDeviceCallback& callback, |
| 106 device::BluetoothDevice::ConnectErrorCode error_code) { | 123 device::BluetoothDevice::ConnectErrorCode error_code) { |
| 107 callback.Run(mojo::ConvertTo<mojom::ConnectResult>(error_code), | 124 callback.Run(mojo::ConvertTo<mojom::ConnectResult>(error_code), |
| 108 nullptr /* Device */); | 125 nullptr /* Device */); |
| 109 } | 126 } |
| 127 |
| 128 void Adapter::OnStartDiscoverySession( |
| 129 const StartDiscoverySessionCallback& callback, |
| 130 std::unique_ptr<device::BluetoothDiscoverySession> session) { |
| 131 mojom::DiscoverySessionPtr session_ptr; |
| 132 mojo::MakeStrongBinding( |
| 133 base::MakeUnique<DiscoverySession>(std::move(session)), |
| 134 mojo::MakeRequest(&session_ptr)); |
| 135 callback.Run(std::move(session_ptr)); |
| 136 } |
| 137 |
| 138 void Adapter::OnDiscoverySessionError( |
| 139 const StartDiscoverySessionCallback& callback) { |
| 140 callback.Run(nullptr /* session */); |
| 141 } |
| 142 |
| 110 } // namespace bluetooth | 143 } // namespace bluetooth |
| OLD | NEW |