Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1441)

Side by Side Diff: device/bluetooth/adapter.cc

Issue 2448713002: bluetooth: Add Device connection logic and accompanying user interface. (Closed)
Patch Set: Renaming mojom, ConnectErrorCode changes Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 "device/bluetooth/adapter.h" 9 #include "device/bluetooth/adapter.h"
10 #include "device/bluetooth/device.h" 10 #include "device/bluetooth/device.h"
(...skipping 16 matching lines...) Expand all
27 adapter_info->address = adapter_->GetAddress(); 27 adapter_info->address = adapter_->GetAddress();
28 adapter_info->name = adapter_->GetName(); 28 adapter_info->name = adapter_->GetName();
29 adapter_info->initialized = adapter_->IsInitialized(); 29 adapter_info->initialized = adapter_->IsInitialized();
30 adapter_info->present = adapter_->IsPresent(); 30 adapter_info->present = adapter_->IsPresent();
31 adapter_info->powered = adapter_->IsPowered(); 31 adapter_info->powered = adapter_->IsPowered();
32 adapter_info->discoverable = adapter_->IsDiscoverable(); 32 adapter_info->discoverable = adapter_->IsDiscoverable();
33 adapter_info->discovering = adapter_->IsDiscovering(); 33 adapter_info->discovering = adapter_->IsDiscovering();
34 callback.Run(std::move(adapter_info)); 34 callback.Run(std::move(adapter_info));
35 } 35 }
36 36
37 void Adapter::GetDevice(const std::string& address, 37 void Adapter::ConnectToDevice(const std::string& address,
38 const GetDeviceCallback& callback) { 38 const ConnectToDeviceCallback& callback) {
39 mojom::DevicePtr device_ptr; 39 device::BluetoothDevice* device = adapter_->GetDevice(address);
40 mojo::MakeStrongBinding(base::MakeUnique<Device>(address, adapter_), 40
41 mojo::GetProxy(&device_ptr)); 41 if (!device) {
42 callback.Run(std::move(device_ptr)); 42 callback.Run(mojom::ConnectErrorCode::DEVICE_NO_LONGER_IN_RANGE,
43 nullptr /* Device */);
ortuno 2016/10/26 02:52:21 nit: s/Device/device/
mbrunson 2016/10/28 21:06:47 Done.
44 return;
45 }
46
47 device->CreateGattConnection(
48 base::Bind(&Adapter::OnGattConnected, weak_ptr_factory_.GetWeakPtr(),
49 callback),
50 base::Bind(&Adapter::OnConnectError, weak_ptr_factory_.GetWeakPtr(),
51 callback));
43 } 52 }
44 53
45 void Adapter::GetDevices(const GetDevicesCallback& callback) { 54 void Adapter::GetDevices(const GetDevicesCallback& callback) {
46 std::vector<mojom::DeviceInfoPtr> devices; 55 std::vector<mojom::DeviceInfoPtr> devices;
47 56
48 for (const device::BluetoothDevice* device : adapter_->GetDevices()) { 57 for (const device::BluetoothDevice* device : adapter_->GetDevices()) {
49 mojom::DeviceInfoPtr device_info = 58 mojom::DeviceInfoPtr device_info =
50 Device::ConstructDeviceInfoStruct(device); 59 Device::ConstructDeviceInfoStruct(device);
51 devices.push_back(std::move(device_info)); 60 devices.push_back(std::move(device_info));
52 } 61 }
(...skipping 22 matching lines...) Expand all
75 } 84 }
76 85
77 void Adapter::DeviceChanged(device::BluetoothAdapter* adapter, 86 void Adapter::DeviceChanged(device::BluetoothAdapter* adapter,
78 device::BluetoothDevice* device) { 87 device::BluetoothDevice* device) {
79 if (client_) { 88 if (client_) {
80 auto device_info = Device::ConstructDeviceInfoStruct(device); 89 auto device_info = Device::ConstructDeviceInfoStruct(device);
81 client_->DeviceChanged(std::move(device_info)); 90 client_->DeviceChanged(std::move(device_info));
82 } 91 }
83 } 92 }
84 93
94 void Adapter::OnGattConnected(
95 const ConnectToDeviceCallback& callback,
96 std::unique_ptr<device::BluetoothGattConnection> connection) {
97 mojom::DevicePtr device_ptr;
98 mojo::MakeStrongBinding(
99 base::MakeUnique<Device>(adapter_, std::move(connection)),
100 mojo::GetProxy(&device_ptr));
101 callback.Run(mojom::ConnectErrorCode::SUCCESS, std::move(device_ptr));
102 }
103
104 void Adapter::OnConnectError(
105 const ConnectToDeviceCallback& callback,
106 device::BluetoothDevice::ConnectErrorCode error_code) {
107 mojom::ConnectErrorCode code = BluetoothErrorCodeToMojomErrorCode(error_code);
108 callback.Run(code, nullptr /* Device */);
109 }
110
111 mojom::ConnectErrorCode Adapter::BluetoothErrorCodeToMojomErrorCode(
112 device::BluetoothDevice::ConnectErrorCode error_code) {
113 switch (error_code) {
114 case device::BluetoothDevice::ConnectErrorCode::
115 ERROR_ATTRIBUTE_LENGTH_INVALID:
116 return mojom::ConnectErrorCode::ATTRIBUTE_LENGTH_INVALID;
117 case device::BluetoothDevice::ConnectErrorCode::ERROR_AUTH_CANCELED:
118 return mojom::ConnectErrorCode::AUTH_CANCELED;
119 case device::BluetoothDevice::ConnectErrorCode::ERROR_AUTH_FAILED:
120 return mojom::ConnectErrorCode::AUTH_FAILED;
121 case device::BluetoothDevice::ConnectErrorCode::ERROR_AUTH_REJECTED:
122 return mojom::ConnectErrorCode::AUTH_REJECTED;
123 case device::BluetoothDevice::ConnectErrorCode::ERROR_AUTH_TIMEOUT:
124 return mojom::ConnectErrorCode::AUTH_TIMEOUT;
125 case device::BluetoothDevice::ConnectErrorCode::ERROR_CONNECTION_CONGESTED:
126 return mojom::ConnectErrorCode::CONNECTION_CONGESTED;
127 case device::BluetoothDevice::ConnectErrorCode::ERROR_FAILED:
128 return mojom::ConnectErrorCode::FAILED;
129 case device::BluetoothDevice::ConnectErrorCode::ERROR_INPROGRESS:
130 return mojom::ConnectErrorCode::INPROGRESS;
131 case device::BluetoothDevice::ConnectErrorCode::
132 ERROR_INSUFFICIENT_ENCRYPTION:
133 return mojom::ConnectErrorCode::INSUFFICIENT_ENCRYPTION;
134 case device::BluetoothDevice::ConnectErrorCode::ERROR_OFFSET_INVALID:
135 return mojom::ConnectErrorCode::OFFSET_INVALID;
136 case device::BluetoothDevice::ConnectErrorCode::ERROR_READ_NOT_PERMITTED:
137 return mojom::ConnectErrorCode::READ_NOT_PERMITTED;
138 case device::BluetoothDevice::ConnectErrorCode::ERROR_REQUEST_NOT_SUPPORTED:
139 return mojom::ConnectErrorCode::REQUEST_NOT_SUPPORTED;
140 case device::BluetoothDevice::ConnectErrorCode::ERROR_UNKNOWN:
141 return mojom::ConnectErrorCode::UNKNOWN;
142 case device::BluetoothDevice::ConnectErrorCode::ERROR_UNSUPPORTED_DEVICE:
143 return mojom::ConnectErrorCode::UNSUPPORTED_DEVICE;
144 case device::BluetoothDevice::ConnectErrorCode::ERROR_WRITE_NOT_PERMITTED:
145 return mojom::ConnectErrorCode::WRITE_NOT_PERMITTED;
146 case device::BluetoothDevice::ConnectErrorCode::NUM_CONNECT_ERROR_CODES:
ortuno 2016/10/26 02:52:21 This is not an actual error :) add a NOTREACHED an
mbrunson 2016/10/28 21:06:47 Done.
147 return mojom::ConnectErrorCode::NUM_CONNECT_ERROR_CODES;
148 default:
ortuno 2016/10/26 02:52:21 When a new value is added to an enum the compiler
mbrunson 2016/10/28 21:06:47 Done.
149 return mojom::ConnectErrorCode::UNKNOWN;
150 }
151 }
85 } // namespace bluetooth 152 } // namespace bluetooth
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698