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

Side by Side Diff: components/arc/bluetooth/arc_bluetooth_bridge.cc

Issue 2078263002: Example Bluetooth ARC++ test changes. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@arc_tests
Patch Set: Created 4 years, 6 months 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 "components/arc/bluetooth/arc_bluetooth_bridge.h" 5 #include "components/arc/bluetooth/arc_bluetooth_bridge.h"
6 6
7 #include <fcntl.h> 7 #include <fcntl.h>
8 #include <stddef.h> 8 #include <stddef.h>
9 9
10 #include <iomanip> 10 #include <iomanip>
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
65 VLOG(1) << "registering bluetooth adapter"; 65 VLOG(1) << "registering bluetooth adapter";
66 BluetoothAdapterFactory::GetAdapter(base::Bind( 66 BluetoothAdapterFactory::GetAdapter(base::Bind(
67 &ArcBluetoothBridge::OnAdapterInitialized, weak_factory_.GetWeakPtr())); 67 &ArcBluetoothBridge::OnAdapterInitialized, weak_factory_.GetWeakPtr()));
68 } else { 68 } else {
69 VLOG(1) << "no bluetooth adapter available"; 69 VLOG(1) << "no bluetooth adapter available";
70 } 70 }
71 71
72 arc_bridge_service()->AddObserver(this); 72 arc_bridge_service()->AddObserver(this);
73 } 73 }
74 74
75 ArcBluetoothBridge::ArcBluetoothBridge(ArcBridgeService* bridge_service,
76 bool test_flag)
77 : ArcService(bridge_service), binding_(this), weak_factory_(this) {
78 if (!test_flag) {
79 LOG(ERROR) << "Test Constructor got called with test = false";
80 }
81 arc_bridge_service()->AddObserver(this);
82 }
83
84 ArcBluetoothBridge::~ArcBluetoothBridge() { 75 ArcBluetoothBridge::~ArcBluetoothBridge() {
85 arc_bridge_service()->RemoveObserver(this); 76 arc_bridge_service()->RemoveObserver(this);
86 77
87 if (bluetooth_adapter_) 78 if (bluetooth_adapter_)
88 bluetooth_adapter_->RemoveObserver(this); 79 bluetooth_adapter_->RemoveObserver(this);
89 } 80 }
90 81
91 void ArcBluetoothBridge::OnAdapterInitialized( 82 void ArcBluetoothBridge::OnAdapterInitialized(
92 scoped_refptr<BluetoothAdapter> adapter) { 83 scoped_refptr<BluetoothAdapter> adapter) {
93 bluetooth_adapter_ = adapter; 84 bluetooth_adapter_ = adapter;
94 bluetooth_adapter_->AddObserver(this); 85 bluetooth_adapter_->AddObserver(this);
95 } 86 }
96 87
97 void ArcBluetoothBridge::OnBluetoothInstanceReady() { 88 void ArcBluetoothBridge::OnBluetoothInstanceReady() {
98 mojom::BluetoothInstance* bluetooth_instance = 89 mojom::BluetoothInstance* bluetooth_instance =
99 arc_bridge_service()->bluetooth_instance(); 90 arc_bridge_service()->bluetooth_instance();
100 if (!bluetooth_instance) { 91 if (!bluetooth_instance) {
101 LOG(ERROR) << "OnBluetoothInstanceReady called, " 92 LOG(ERROR) << "OnBluetoothInstanceReady called, "
102 << "but no bluetooth instance found"; 93 << "but no bluetooth instance found";
103 return; 94 return;
104 } 95 }
105 96
106 bluetooth_instance_ = base::WrapUnique(bluetooth_instance); 97 arc_bridge_service()->bluetooth_instance()->Init(
107 bluetooth_version_ = arc_bridge_service()->bluetooth_version(); 98 binding_.CreateInterfacePtrAndBind());
108 bluetooth_instance_->Init(binding_.CreateInterfacePtrAndBind());
109 } 99 }
110 100
111 void ArcBluetoothBridge::AdapterPresentChanged(BluetoothAdapter* adapter, 101 void ArcBluetoothBridge::AdapterPresentChanged(BluetoothAdapter* adapter,
112 bool present) { 102 bool present) {
113 // If the adapter goes away, remove ourselves as an observer. 103 // If the adapter goes away, remove ourselves as an observer.
114 if (!present && adapter == bluetooth_adapter_) { 104 if (!present && adapter == bluetooth_adapter_) {
115 adapter->RemoveObserver(this); 105 adapter->RemoveObserver(this);
116 bluetooth_adapter_ = nullptr; 106 bluetooth_adapter_ = nullptr;
117 } 107 }
118 } 108 }
(...skipping 11 matching lines...) Expand all
130 BluetoothDevice* device) { 120 BluetoothDevice* device) {
131 if (!HasBluetoothInstance()) 121 if (!HasBluetoothInstance())
132 return; 122 return;
133 123
134 if (device->IsConnected()) 124 if (device->IsConnected())
135 return; 125 return;
136 126
137 mojo::Array<mojom::BluetoothPropertyPtr> properties = 127 mojo::Array<mojom::BluetoothPropertyPtr> properties =
138 GetDeviceProperties(mojom::BluetoothPropertyType::ALL, device); 128 GetDeviceProperties(mojom::BluetoothPropertyType::ALL, device);
139 129
140 bluetooth_instance_->OnDeviceFound(std::move(properties)); 130 arc_bridge_service()->bluetooth_instance()->OnDeviceFound(
131 std::move(properties));
141 132
142 if (bluetooth_version_ < kMinBtleVersion) { 133 if (arc_bridge_service()->bluetooth_version() < kMinBtleVersion) {
143 LOG(WARNING) << "Bluetooth instance is too old and does not support BTLE"; 134 LOG(WARNING) << "Bluetooth instance is too old and does not support BTLE";
144 return; 135 return;
145 } 136 }
146 137
147 mojom::BluetoothAddressPtr addr = 138 mojom::BluetoothAddressPtr addr =
148 mojom::BluetoothAddress::From(device->GetAddress()); 139 mojom::BluetoothAddress::From(device->GetAddress());
149 int rssi = device->GetInquiryRSSI(); 140 int rssi = device->GetInquiryRSSI();
150 mojo::Array<mojom::BluetoothAdvertisingDataPtr> adv_data = 141 mojo::Array<mojom::BluetoothAdvertisingDataPtr> adv_data =
151 GetAdvertisingData(device); 142 GetAdvertisingData(device);
152 bluetooth_instance_->OnLEDeviceFound(std::move(addr), rssi, 143 arc_bridge_service()->bluetooth_instance()->OnLEDeviceFound(
153 std::move(adv_data)); 144 std::move(addr), rssi, std::move(adv_data));
154 } 145 }
155 146
156 void ArcBluetoothBridge::DeviceChanged(BluetoothAdapter* adapter, 147 void ArcBluetoothBridge::DeviceChanged(BluetoothAdapter* adapter,
157 BluetoothDevice* device) { 148 BluetoothDevice* device) {
158 // TODO(smbarber): device properties changed; inform the container. 149 // TODO(smbarber): device properties changed; inform the container.
159 } 150 }
160 151
161 void ArcBluetoothBridge::DeviceAddressChanged(BluetoothAdapter* adapter, 152 void ArcBluetoothBridge::DeviceAddressChanged(BluetoothAdapter* adapter,
162 BluetoothDevice* device, 153 BluetoothDevice* device,
163 const std::string& old_address) { 154 const std::string& old_address) {
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
206 BluetoothDevice* device, 197 BluetoothDevice* device,
207 BluetoothRemoteGattService* service) { 198 BluetoothRemoteGattService* service) {
208 // Placeholder for GATT client functionality 199 // Placeholder for GATT client functionality
209 } 200 }
210 201
211 void ArcBluetoothBridge::GattServicesDiscovered(BluetoothAdapter* adapter, 202 void ArcBluetoothBridge::GattServicesDiscovered(BluetoothAdapter* adapter,
212 BluetoothDevice* device) { 203 BluetoothDevice* device) {
213 if (!HasBluetoothInstance()) 204 if (!HasBluetoothInstance())
214 return; 205 return;
215 206
216 if (bluetooth_version_ < kMinBtleVersion) { 207 if (arc_bridge_service()->bluetooth_version() < kMinBtleVersion) {
217 LOG(WARNING) << "Bluetooth instance is too old and does not support BTLE"; 208 LOG(WARNING) << "Bluetooth instance is too old and does not support BTLE";
218 return; 209 return;
219 } 210 }
220 211
221 mojom::BluetoothAddressPtr addr = 212 mojom::BluetoothAddressPtr addr =
222 mojom::BluetoothAddress::From(device->GetAddress()); 213 mojom::BluetoothAddress::From(device->GetAddress());
223 214
224 bluetooth_instance_->OnSearchComplete( 215 arc_bridge_service()->bluetooth_instance()->OnSearchComplete(
225 std::move(addr), mojom::BluetoothGattStatus::GATT_SUCCESS); 216 std::move(addr), mojom::BluetoothGattStatus::GATT_SUCCESS);
226 } 217 }
227 218
228 void ArcBluetoothBridge::GattDiscoveryCompleteForService( 219 void ArcBluetoothBridge::GattDiscoveryCompleteForService(
229 BluetoothAdapter* adapter, 220 BluetoothAdapter* adapter,
230 BluetoothRemoteGattService* service) { 221 BluetoothRemoteGattService* service) {
231 // Placeholder for GATT client functionality 222 // Placeholder for GATT client functionality
232 } 223 }
233 224
234 void ArcBluetoothBridge::GattServiceChanged( 225 void ArcBluetoothBridge::GattServiceChanged(
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
300 } 291 }
301 292
302 void ArcBluetoothBridge::GetAdapterProperty(mojom::BluetoothPropertyType type) { 293 void ArcBluetoothBridge::GetAdapterProperty(mojom::BluetoothPropertyType type) {
303 DCHECK(bluetooth_adapter_); 294 DCHECK(bluetooth_adapter_);
304 if (!HasBluetoothInstance()) 295 if (!HasBluetoothInstance())
305 return; 296 return;
306 297
307 mojo::Array<mojom::BluetoothPropertyPtr> properties = 298 mojo::Array<mojom::BluetoothPropertyPtr> properties =
308 GetAdapterProperties(type); 299 GetAdapterProperties(type);
309 300
310 bluetooth_instance_->OnAdapterProperties(mojom::BluetoothStatus::SUCCESS, 301 arc_bridge_service()->bluetooth_instance()->OnAdapterProperties(
311 std::move(properties)); 302 mojom::BluetoothStatus::SUCCESS, std::move(properties));
312 } 303 }
313 304
314 void ArcBluetoothBridge::SetAdapterProperty( 305 void ArcBluetoothBridge::SetAdapterProperty(
315 mojom::BluetoothPropertyPtr property) { 306 mojom::BluetoothPropertyPtr property) {
316 DCHECK(bluetooth_adapter_); 307 DCHECK(bluetooth_adapter_);
317 if (!HasBluetoothInstance()) 308 if (!HasBluetoothInstance())
318 return; 309 return;
319 310
320 // TODO(smbarber): Implement SetAdapterProperty 311 // TODO(smbarber): Implement SetAdapterProperty
321 bluetooth_instance_->OnAdapterProperties( 312 arc_bridge_service()->bluetooth_instance()->OnAdapterProperties(
322 mojom::BluetoothStatus::FAIL, 313 mojom::BluetoothStatus::FAIL,
323 mojo::Array<mojom::BluetoothPropertyPtr>::New(0)); 314 mojo::Array<mojom::BluetoothPropertyPtr>::New(0));
324 } 315 }
325 316
326 void ArcBluetoothBridge::GetRemoteDeviceProperty( 317 void ArcBluetoothBridge::GetRemoteDeviceProperty(
327 mojom::BluetoothAddressPtr remote_addr, 318 mojom::BluetoothAddressPtr remote_addr,
328 mojom::BluetoothPropertyType type) { 319 mojom::BluetoothPropertyType type) {
329 DCHECK(bluetooth_adapter_); 320 DCHECK(bluetooth_adapter_);
330 if (!HasBluetoothInstance()) 321 if (!HasBluetoothInstance())
331 return; 322 return;
332 323
333 std::string addr_str = remote_addr->To<std::string>(); 324 std::string addr_str = remote_addr->To<std::string>();
334 BluetoothDevice* device = bluetooth_adapter_->GetDevice(addr_str); 325 BluetoothDevice* device = bluetooth_adapter_->GetDevice(addr_str);
335 326
336 mojo::Array<mojom::BluetoothPropertyPtr> properties = 327 mojo::Array<mojom::BluetoothPropertyPtr> properties =
337 GetDeviceProperties(type, device); 328 GetDeviceProperties(type, device);
338 mojom::BluetoothStatus status = mojom::BluetoothStatus::SUCCESS; 329 mojom::BluetoothStatus status = mojom::BluetoothStatus::SUCCESS;
339 330
340 if (!device) { 331 if (!device) {
341 VLOG(1) << __func__ << ": device " << addr_str << " not available"; 332 VLOG(1) << __func__ << ": device " << addr_str << " not available";
342 status = mojom::BluetoothStatus::FAIL; 333 status = mojom::BluetoothStatus::FAIL;
343 } 334 }
344 335
345 bluetooth_instance_->OnRemoteDeviceProperties(status, std::move(remote_addr), 336 arc_bridge_service()->bluetooth_instance()->OnRemoteDeviceProperties(
346 std::move(properties)); 337 status, std::move(remote_addr), std::move(properties));
347 } 338 }
348 339
349 void ArcBluetoothBridge::SetRemoteDeviceProperty( 340 void ArcBluetoothBridge::SetRemoteDeviceProperty(
350 mojom::BluetoothAddressPtr remote_addr, 341 mojom::BluetoothAddressPtr remote_addr,
351 mojom::BluetoothPropertyPtr property) { 342 mojom::BluetoothPropertyPtr property) {
352 DCHECK(bluetooth_adapter_); 343 DCHECK(bluetooth_adapter_);
353 if (!HasBluetoothInstance()) 344 if (!HasBluetoothInstance())
354 return; 345 return;
355 346
356 // TODO(smbarber): Implement SetRemoteDeviceProperty 347 // TODO(smbarber): Implement SetRemoteDeviceProperty
357 bluetooth_instance_->OnRemoteDeviceProperties( 348 arc_bridge_service()->bluetooth_instance()->OnRemoteDeviceProperties(
358 mojom::BluetoothStatus::FAIL, std::move(remote_addr), 349 mojom::BluetoothStatus::FAIL, std::move(remote_addr),
359 mojo::Array<mojom::BluetoothPropertyPtr>::New(0)); 350 mojo::Array<mojom::BluetoothPropertyPtr>::New(0));
360 } 351 }
361 352
362 void ArcBluetoothBridge::GetRemoteServiceRecord( 353 void ArcBluetoothBridge::GetRemoteServiceRecord(
363 mojom::BluetoothAddressPtr remote_addr, 354 mojom::BluetoothAddressPtr remote_addr,
364 mojom::BluetoothUUIDPtr uuid) { 355 mojom::BluetoothUUIDPtr uuid) {
365 // TODO(smbarber): Implement GetRemoteServiceRecord 356 // TODO(smbarber): Implement GetRemoteServiceRecord
366 } 357 }
367 358
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
417 : mojom::BluetoothAdapterState::OFF); 408 : mojom::BluetoothAdapterState::OFF);
418 } 409 }
419 410
420 void ArcBluetoothBridge::OnDiscoveryStarted( 411 void ArcBluetoothBridge::OnDiscoveryStarted(
421 std::unique_ptr<BluetoothDiscoverySession> session) { 412 std::unique_ptr<BluetoothDiscoverySession> session) {
422 if (!HasBluetoothInstance()) 413 if (!HasBluetoothInstance())
423 return; 414 return;
424 415
425 discovery_session_ = std::move(session); 416 discovery_session_ = std::move(session);
426 417
427 bluetooth_instance_->OnDiscoveryStateChanged( 418 arc_bridge_service()->bluetooth_instance()->OnDiscoveryStateChanged(
428 mojom::BluetoothDiscoveryState::STARTED); 419 mojom::BluetoothDiscoveryState::STARTED);
429 420
430 SendCachedDevicesFound(); 421 SendCachedDevicesFound();
431 } 422 }
432 423
433 void ArcBluetoothBridge::OnDiscoveryStopped() { 424 void ArcBluetoothBridge::OnDiscoveryStopped() {
434 if (!HasBluetoothInstance()) 425 if (!HasBluetoothInstance())
435 return; 426 return;
436 427
437 discovery_session_.reset(); 428 discovery_session_.reset();
438 429
439 bluetooth_instance_->OnDiscoveryStateChanged( 430 arc_bridge_service()->bluetooth_instance()->OnDiscoveryStateChanged(
440 mojom::BluetoothDiscoveryState::STOPPED); 431 mojom::BluetoothDiscoveryState::STOPPED);
441 } 432 }
442 433
443 void ArcBluetoothBridge::CreateBond(mojom::BluetoothAddressPtr addr, 434 void ArcBluetoothBridge::CreateBond(mojom::BluetoothAddressPtr addr,
444 int32_t transport) { 435 int32_t transport) {
445 std::string addr_str = addr->To<std::string>(); 436 std::string addr_str = addr->To<std::string>();
446 BluetoothDevice* device = bluetooth_adapter_->GetDevice(addr_str); 437 BluetoothDevice* device = bluetooth_adapter_->GetDevice(addr_str);
447 if (!device || !device->IsPairable()) { 438 if (!device || !device->IsPairable()) {
448 VLOG(1) << __func__ << ": device " << addr_str 439 VLOG(1) << __func__ << ": device " << addr_str
449 << " is no longer valid or pairable"; 440 << " is no longer valid or pairable";
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
538 void ArcBluetoothBridge::StopLEScan() { 529 void ArcBluetoothBridge::StopLEScan() {
539 CancelDiscovery(); 530 CancelDiscovery();
540 } 531 }
541 532
542 void ArcBluetoothBridge::OnGattConnectStateChanged( 533 void ArcBluetoothBridge::OnGattConnectStateChanged(
543 mojom::BluetoothAddressPtr addr, 534 mojom::BluetoothAddressPtr addr,
544 bool connected) const { 535 bool connected) const {
545 if (!HasBluetoothInstance()) 536 if (!HasBluetoothInstance())
546 return; 537 return;
547 538
548 if (bluetooth_version_ < kMinBtleVersion) { 539 if (arc_bridge_service()->bluetooth_version() < kMinBtleVersion) {
549 LOG(WARNING) << "Bluetooth instance is too old and does not support BTLE"; 540 LOG(WARNING) << "Bluetooth instance is too old and does not support BTLE";
550 return; 541 return;
551 } 542 }
552 543
553 DCHECK(addr); 544 DCHECK(addr);
554 545
555 bluetooth_instance_->OnLEConnectionStateChange( 546 arc_bridge_service()->bluetooth_instance()->OnLEConnectionStateChange(
556 std::move(addr), connected); 547 std::move(addr), connected);
557 } 548 }
558 549
559 void ArcBluetoothBridge::OnGattConnected( 550 void ArcBluetoothBridge::OnGattConnected(
560 mojom::BluetoothAddressPtr addr, 551 mojom::BluetoothAddressPtr addr,
561 std::unique_ptr<BluetoothGattConnection> connection) const { 552 std::unique_ptr<BluetoothGattConnection> connection) const {
562 OnGattConnectStateChanged(std::move(addr), true); 553 OnGattConnectStateChanged(std::move(addr), true);
563 } 554 }
564 555
565 void ArcBluetoothBridge::OnGattConnectError( 556 void ArcBluetoothBridge::OnGattConnectError(
(...skipping 10 matching lines...) Expand all
576 void ArcBluetoothBridge::ConnectLEDevice( 567 void ArcBluetoothBridge::ConnectLEDevice(
577 mojom::BluetoothAddressPtr remote_addr) { 568 mojom::BluetoothAddressPtr remote_addr) {
578 if (!HasBluetoothInstance()) 569 if (!HasBluetoothInstance())
579 return; 570 return;
580 571
581 BluetoothDevice* device = 572 BluetoothDevice* device =
582 bluetooth_adapter_->GetDevice(remote_addr->To<std::string>()); 573 bluetooth_adapter_->GetDevice(remote_addr->To<std::string>());
583 DCHECK(device); 574 DCHECK(device);
584 575
585 if (device->IsConnected()) { 576 if (device->IsConnected()) {
586 bluetooth_instance_->OnLEConnectionStateChange(std::move(remote_addr), 577 arc_bridge_service()->bluetooth_instance()->OnLEConnectionStateChange(
587 true); 578 std::move(remote_addr), true);
588 return; 579 return;
589 } 580 }
590 581
591 // Also pass disconnect callback in error case 582 // Also pass disconnect callback in error case
592 // since it would be disconnected anyway. 583 // since it would be disconnected anyway.
593 mojom::BluetoothAddressPtr remote_addr_clone = remote_addr.Clone(); 584 mojom::BluetoothAddressPtr remote_addr_clone = remote_addr.Clone();
594 device->CreateGattConnection( 585 device->CreateGattConnection(
595 base::Bind(&ArcBluetoothBridge::OnGattConnected, 586 base::Bind(&ArcBluetoothBridge::OnGattConnected,
596 weak_factory_.GetWeakPtr(), base::Passed(&remote_addr)), 587 weak_factory_.GetWeakPtr(), base::Passed(&remote_addr)),
597 base::Bind(&ArcBluetoothBridge::OnGattConnectError, 588 base::Bind(&ArcBluetoothBridge::OnGattConnectError,
598 weak_factory_.GetWeakPtr(), base::Passed(&remote_addr_clone))); 589 weak_factory_.GetWeakPtr(), base::Passed(&remote_addr_clone)));
599 } 590 }
600 591
601 void ArcBluetoothBridge::DisconnectLEDevice( 592 void ArcBluetoothBridge::DisconnectLEDevice(
602 mojom::BluetoothAddressPtr remote_addr) { 593 mojom::BluetoothAddressPtr remote_addr) {
603 if (!HasBluetoothInstance()) 594 if (!HasBluetoothInstance())
604 return; 595 return;
605 596
606 BluetoothDevice* device = 597 BluetoothDevice* device =
607 bluetooth_adapter_->GetDevice(remote_addr->To<std::string>()); 598 bluetooth_adapter_->GetDevice(remote_addr->To<std::string>());
608 DCHECK(device); 599 DCHECK(device);
609 600
610 if (!device->IsConnected()) { 601 if (!device->IsConnected()) {
611 bluetooth_instance_->OnLEConnectionStateChange(std::move(remote_addr), 602 arc_bridge_service()->bluetooth_instance()->OnLEConnectionStateChange(
612 false); 603 std::move(remote_addr), false);
613 return; 604 return;
614 } 605 }
615 606
616 mojom::BluetoothAddressPtr remote_addr_clone = remote_addr.Clone(); 607 mojom::BluetoothAddressPtr remote_addr_clone = remote_addr.Clone();
617 device->Disconnect( 608 device->Disconnect(
618 base::Bind(&ArcBluetoothBridge::OnGattDisconnected, 609 base::Bind(&ArcBluetoothBridge::OnGattDisconnected,
619 weak_factory_.GetWeakPtr(), base::Passed(&remote_addr)), 610 weak_factory_.GetWeakPtr(), base::Passed(&remote_addr)),
620 base::Bind(&ArcBluetoothBridge::OnGattDisconnected, 611 base::Bind(&ArcBluetoothBridge::OnGattDisconnected,
621 weak_factory_.GetWeakPtr(), base::Passed(&remote_addr_clone))); 612 weak_factory_.GetWeakPtr(), base::Passed(&remote_addr_clone)));
622 } 613 }
623 614
624 void ArcBluetoothBridge::SearchService(mojom::BluetoothAddressPtr remote_addr) { 615 void ArcBluetoothBridge::SearchService(mojom::BluetoothAddressPtr remote_addr) {
625 if (!HasBluetoothInstance()) 616 if (!HasBluetoothInstance())
626 return; 617 return;
627 618
628 BluetoothDevice* device = 619 BluetoothDevice* device =
629 bluetooth_adapter_->GetDevice(remote_addr->To<std::string>()); 620 bluetooth_adapter_->GetDevice(remote_addr->To<std::string>());
630 DCHECK(device); 621 DCHECK(device);
631 622
632 // Call the callback if discovery is completed 623 // Call the callback if discovery is completed
633 if (device->IsGattServicesDiscoveryComplete()) { 624 if (device->IsGattServicesDiscoveryComplete()) {
634 bluetooth_instance_->OnSearchComplete( 625 arc_bridge_service()->bluetooth_instance()->OnSearchComplete(
635 std::move(remote_addr), mojom::BluetoothGattStatus::GATT_SUCCESS); 626 std::move(remote_addr), mojom::BluetoothGattStatus::GATT_SUCCESS);
636 return; 627 return;
637 } 628 }
638 629
639 // Discard result. Will call the callback when discovery is completed. 630 // Discard result. Will call the callback when discovery is completed.
640 device->GetGattServices(); 631 device->GetGattServices();
641 } 632 }
642 633
643 void ArcBluetoothBridge::OnStartLEListenDone( 634 void ArcBluetoothBridge::OnStartLEListenDone(
644 const StartLEListenCallback& callback, 635 const StartLEListenCallback& callback,
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
750 db.push_back(std::move(characteristic_element)); 741 db.push_back(std::move(characteristic_element));
751 742
752 for (auto descriptor : characteristic->GetDescriptors()) { 743 for (auto descriptor : characteristic->GetDescriptors()) {
753 db.push_back(CreateGattDBElement<device::BluetoothRemoteGattDescriptor>( 744 db.push_back(CreateGattDBElement<device::BluetoothRemoteGattDescriptor>(
754 mojom::BluetoothGattDBAttributeType::BTGATT_DB_DESCRIPTOR, 745 mojom::BluetoothGattDBAttributeType::BTGATT_DB_DESCRIPTOR,
755 descriptor)); 746 descriptor));
756 } 747 }
757 } 748 }
758 } 749 }
759 750
760 bluetooth_instance_->OnGetGattDB(std::move(remote_addr), std::move(db)); 751 arc_bridge_service()->bluetooth_instance()->OnGetGattDB(
752 std::move(remote_addr), std::move(db));
761 } 753 }
762 754
763 // Find Gatt Service/Characteristic/Descriptor from std::vector from UUID. 755 // Find Gatt Service/Characteristic/Descriptor from std::vector from UUID.
764 template <class T> 756 template <class T>
765 T* ArcBluetoothBridge::FindGattObjectFromUuid( 757 T* ArcBluetoothBridge::FindGattObjectFromUuid(
766 const std::vector<T*> gatt_objs, 758 const std::vector<T*> gatt_objs,
767 const device::BluetoothUUID uuid) const { 759 const device::BluetoothUUID uuid) const {
768 auto it = std::find_if(gatt_objs.begin(), gatt_objs.end(), 760 auto it = std::find_if(gatt_objs.begin(), gatt_objs.end(),
769 [&](T* obj) { return obj->GetUUID() == uuid; }); 761 [&](T* obj) { return obj->GetUUID() == uuid; });
770 if (it == gatt_objs.end()) 762 if (it == gatt_objs.end())
(...skipping 227 matching lines...) Expand 10 before | Expand all | Expand 10 after
998 } 990 }
999 991
1000 void ArcBluetoothBridge::OnDiscoveryError() { 992 void ArcBluetoothBridge::OnDiscoveryError() {
1001 LOG(WARNING) << "failed to change discovery state"; 993 LOG(WARNING) << "failed to change discovery state";
1002 } 994 }
1003 995
1004 void ArcBluetoothBridge::OnPairing(mojom::BluetoothAddressPtr addr) const { 996 void ArcBluetoothBridge::OnPairing(mojom::BluetoothAddressPtr addr) const {
1005 if (!HasBluetoothInstance()) 997 if (!HasBluetoothInstance())
1006 return; 998 return;
1007 999
1008 bluetooth_instance_->OnBondStateChanged(mojom::BluetoothStatus::SUCCESS, 1000 arc_bridge_service()->bluetooth_instance()->OnBondStateChanged(
1009 std::move(addr), 1001 mojom::BluetoothStatus::SUCCESS, std::move(addr),
1010 mojom::BluetoothBondState::BONDING); 1002 mojom::BluetoothBondState::BONDING);
1011 } 1003 }
1012 1004
1013 void ArcBluetoothBridge::OnPairedDone(mojom::BluetoothAddressPtr addr) const { 1005 void ArcBluetoothBridge::OnPairedDone(mojom::BluetoothAddressPtr addr) const {
1014 if (!HasBluetoothInstance()) 1006 if (!HasBluetoothInstance())
1015 return; 1007 return;
1016 1008
1017 bluetooth_instance_->OnBondStateChanged(mojom::BluetoothStatus::SUCCESS, 1009 arc_bridge_service()->bluetooth_instance()->OnBondStateChanged(
1018 std::move(addr), 1010 mojom::BluetoothStatus::SUCCESS, std::move(addr),
1019 mojom::BluetoothBondState::BONDED); 1011 mojom::BluetoothBondState::BONDED);
1020 } 1012 }
1021 1013
1022 void ArcBluetoothBridge::OnPairedError( 1014 void ArcBluetoothBridge::OnPairedError(
1023 mojom::BluetoothAddressPtr addr, 1015 mojom::BluetoothAddressPtr addr,
1024 BluetoothDevice::ConnectErrorCode error_code) const { 1016 BluetoothDevice::ConnectErrorCode error_code) const {
1025 if (!HasBluetoothInstance()) 1017 if (!HasBluetoothInstance())
1026 return; 1018 return;
1027 1019
1028 bluetooth_instance_->OnBondStateChanged(mojom::BluetoothStatus::FAIL, 1020 arc_bridge_service()->bluetooth_instance()->OnBondStateChanged(
1029 std::move(addr), 1021 mojom::BluetoothStatus::FAIL, std::move(addr),
1030 mojom::BluetoothBondState::NONE); 1022 mojom::BluetoothBondState::NONE);
1031 } 1023 }
1032 1024
1033 void ArcBluetoothBridge::OnForgetDone(mojom::BluetoothAddressPtr addr) const { 1025 void ArcBluetoothBridge::OnForgetDone(mojom::BluetoothAddressPtr addr) const {
1034 if (!HasBluetoothInstance()) 1026 if (!HasBluetoothInstance())
1035 return; 1027 return;
1036 1028
1037 bluetooth_instance_->OnBondStateChanged(mojom::BluetoothStatus::SUCCESS, 1029 arc_bridge_service()->bluetooth_instance()->OnBondStateChanged(
1038 std::move(addr), 1030 mojom::BluetoothStatus::SUCCESS, std::move(addr),
1039 mojom::BluetoothBondState::NONE); 1031 mojom::BluetoothBondState::NONE);
1040 } 1032 }
1041 1033
1042 void ArcBluetoothBridge::OnForgetError(mojom::BluetoothAddressPtr addr) const { 1034 void ArcBluetoothBridge::OnForgetError(mojom::BluetoothAddressPtr addr) const {
1043 if (!HasBluetoothInstance()) 1035 if (!HasBluetoothInstance())
1044 return; 1036 return;
1045 1037
1046 BluetoothDevice* device = 1038 BluetoothDevice* device =
1047 bluetooth_adapter_->GetDevice(addr->To<std::string>()); 1039 bluetooth_adapter_->GetDevice(addr->To<std::string>());
1048 mojom::BluetoothBondState bond_state = mojom::BluetoothBondState::NONE; 1040 mojom::BluetoothBondState bond_state = mojom::BluetoothBondState::NONE;
1049 if (device && device->IsPaired()) { 1041 if (device && device->IsPaired()) {
1050 bond_state = mojom::BluetoothBondState::BONDED; 1042 bond_state = mojom::BluetoothBondState::BONDED;
1051 } 1043 }
1052 bluetooth_instance_->OnBondStateChanged(mojom::BluetoothStatus::FAIL, 1044 arc_bridge_service()->bluetooth_instance()->OnBondStateChanged(
1053 std::move(addr), bond_state); 1045 mojom::BluetoothStatus::FAIL, std::move(addr), bond_state);
1054 } 1046 }
1055 1047
1056 mojo::Array<mojom::BluetoothPropertyPtr> 1048 mojo::Array<mojom::BluetoothPropertyPtr>
1057 ArcBluetoothBridge::GetDeviceProperties(mojom::BluetoothPropertyType type, 1049 ArcBluetoothBridge::GetDeviceProperties(mojom::BluetoothPropertyType type,
1058 BluetoothDevice* device) const { 1050 BluetoothDevice* device) const {
1059 mojo::Array<mojom::BluetoothPropertyPtr> properties; 1051 mojo::Array<mojom::BluetoothPropertyPtr> properties;
1060 1052
1061 if (!device) { 1053 if (!device) {
1062 return properties; 1054 return properties;
1063 } 1055 }
(...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after
1257 return; 1249 return;
1258 1250
1259 BluetoothAdapter::DeviceList devices = bluetooth_adapter_->GetDevices(); 1251 BluetoothAdapter::DeviceList devices = bluetooth_adapter_->GetDevices();
1260 for (auto device : devices) { 1252 for (auto device : devices) {
1261 if (device->IsPaired()) 1253 if (device->IsPaired())
1262 continue; 1254 continue;
1263 1255
1264 mojo::Array<mojom::BluetoothPropertyPtr> properties = 1256 mojo::Array<mojom::BluetoothPropertyPtr> properties =
1265 GetDeviceProperties(mojom::BluetoothPropertyType::ALL, device); 1257 GetDeviceProperties(mojom::BluetoothPropertyType::ALL, device);
1266 1258
1267 bluetooth_instance_->OnDeviceFound(std::move(properties)); 1259 arc_bridge_service()->bluetooth_instance()->OnDeviceFound(
1260 std::move(properties));
1268 1261
1269 if (bluetooth_version_ >= kMinBtleVersion) { 1262 if (arc_bridge_service()->bluetooth_version() >= kMinBtleVersion) {
1270 mojom::BluetoothAddressPtr addr = 1263 mojom::BluetoothAddressPtr addr =
1271 mojom::BluetoothAddress::From(device->GetAddress()); 1264 mojom::BluetoothAddress::From(device->GetAddress());
1272 int rssi = device->GetInquiryRSSI(); 1265 int rssi = device->GetInquiryRSSI();
1273 mojo::Array<mojom::BluetoothAdvertisingDataPtr> adv_data = 1266 mojo::Array<mojom::BluetoothAdvertisingDataPtr> adv_data =
1274 GetAdvertisingData(device); 1267 GetAdvertisingData(device);
1275 bluetooth_instance_->OnLEDeviceFound(std::move(addr), rssi, 1268 arc_bridge_service()->bluetooth_instance()->OnLEDeviceFound(
1276 std::move(adv_data)); 1269 std::move(addr), rssi, std::move(adv_data));
1277 } 1270 }
1278 } 1271 }
1279 } 1272 }
1280 1273
1281 bool ArcBluetoothBridge::HasBluetoothInstance() const { 1274 bool ArcBluetoothBridge::HasBluetoothInstance() const {
1282 if (!bluetooth_instance_) { 1275 if (!arc_bridge_service()->bluetooth_instance()) {
1283 LOG(WARNING) << "no Bluetooth instance available"; 1276 LOG(WARNING) << "no Bluetooth instance available";
1284 return false; 1277 return false;
1285 } 1278 }
1286 1279
1287 return true; 1280 return true;
1288 } 1281 }
1289 1282
1290 void ArcBluetoothBridge::SendCachedPairedDevices() const { 1283 void ArcBluetoothBridge::SendCachedPairedDevices() const {
1291 DCHECK(bluetooth_adapter_); 1284 DCHECK(bluetooth_adapter_);
1292 if (!HasBluetoothInstance()) 1285 if (!HasBluetoothInstance())
1293 return; 1286 return;
1294 1287
1295 BluetoothAdapter::DeviceList devices = bluetooth_adapter_->GetDevices(); 1288 BluetoothAdapter::DeviceList devices = bluetooth_adapter_->GetDevices();
1296 for (auto device : devices) { 1289 for (auto device : devices) {
1297 if (!device->IsPaired()) 1290 if (!device->IsPaired())
1298 continue; 1291 continue;
1299 1292
1300 mojo::Array<mojom::BluetoothPropertyPtr> properties = 1293 mojo::Array<mojom::BluetoothPropertyPtr> properties =
1301 GetDeviceProperties(mojom::BluetoothPropertyType::ALL, device); 1294 GetDeviceProperties(mojom::BluetoothPropertyType::ALL, device);
1302 1295
1303 bluetooth_instance_->OnDeviceFound(std::move(properties)); 1296 arc_bridge_service()->bluetooth_instance()->OnDeviceFound(
1297 std::move(properties));
1304 1298
1305 mojom::BluetoothAddressPtr addr = 1299 mojom::BluetoothAddressPtr addr =
1306 mojom::BluetoothAddress::From(device->GetAddress()); 1300 mojom::BluetoothAddress::From(device->GetAddress());
1307 1301
1308 if (bluetooth_version_ >= kMinBtleVersion) { 1302 if (arc_bridge_service()->bluetooth_version() >= kMinBtleVersion) {
1309 int rssi = device->GetInquiryRSSI(); 1303 int rssi = device->GetInquiryRSSI();
1310 mojo::Array<mojom::BluetoothAdvertisingDataPtr> adv_data = 1304 mojo::Array<mojom::BluetoothAdvertisingDataPtr> adv_data =
1311 GetAdvertisingData(device); 1305 GetAdvertisingData(device);
1312 bluetooth_instance_->OnLEDeviceFound(addr->Clone(), rssi, 1306 arc_bridge_service()->bluetooth_instance()->OnLEDeviceFound(
1313 std::move(adv_data)); 1307 addr->Clone(), rssi, std::move(adv_data));
1314 } 1308 }
1315 1309
1316 // OnBondStateChanged must be called with mojom::BluetoothBondState::BONDING 1310 // OnBondStateChanged must be called with mojom::BluetoothBondState::BONDING
1317 // to 1311 // to
1318 // make sure the bond state machine on Android is ready to take the 1312 // make sure the bond state machine on Android is ready to take the
1319 // pair-done event. Otherwise the pair-done event will be dropped as an 1313 // pair-done event. Otherwise the pair-done event will be dropped as an
1320 // invalid change of paired status. 1314 // invalid change of paired status.
1321 OnPairing(addr->Clone()); 1315 OnPairing(addr->Clone());
1322 OnPairedDone(std::move(addr)); 1316 OnPairedDone(std::move(addr));
1323 } 1317 }
1324 } 1318 }
1325 1319
1326 } // namespace arc 1320 } // namespace arc
OLDNEW
« no previous file with comments | « components/arc/bluetooth/arc_bluetooth_bridge.h ('k') | components/arc/bluetooth/arc_bluetooth_bridge_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698