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 |