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

Side by Side Diff: device/bluetooth/bluetooth_adapter_mac.mm

Issue 2745983003: Bluetooth: macOS: Adding logs (Closed)
Patch Set: Last fix about GetIdentifier() Created 3 years, 9 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 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 "device/bluetooth/bluetooth_adapter_mac.h" 5 #include "device/bluetooth/bluetooth_adapter_mac.h"
6 6
7 #import <IOBluetooth/objc/IOBluetoothDevice.h> 7 #import <IOBluetooth/objc/IOBluetoothDevice.h>
8 #import <IOBluetooth/objc/IOBluetoothHostController.h> 8 #import <IOBluetooth/objc/IOBluetoothHostController.h>
9 #include <stddef.h> 9 #include <stddef.h>
10 10
(...skipping 18 matching lines...) Expand all
29 #include "device/bluetooth/bluetooth_discovery_session.h" 29 #include "device/bluetooth/bluetooth_discovery_session.h"
30 #include "device/bluetooth/bluetooth_discovery_session_outcome.h" 30 #include "device/bluetooth/bluetooth_discovery_session_outcome.h"
31 #include "device/bluetooth/bluetooth_low_energy_central_manager_delegate.h" 31 #include "device/bluetooth/bluetooth_low_energy_central_manager_delegate.h"
32 #include "device/bluetooth/bluetooth_socket_mac.h" 32 #include "device/bluetooth/bluetooth_socket_mac.h"
33 33
34 namespace { 34 namespace {
35 35
36 // The frequency with which to poll the adapter for updates. 36 // The frequency with which to poll the adapter for updates.
37 const int kPollIntervalMs = 500; 37 const int kPollIntervalMs = 500;
38 38
39 std::string GetCentralManagerStateString(CBCentralManagerState state) {
ortuno 2017/03/14 00:34:33 I feel bad for adding these strings to the binary
jlebel 2017/03/15 01:08:40 This should not be a big source of problems, so we
40 switch (state) {
41 case CBCentralManagerStateUnknown:
42 return "CBCentralManagerStateUnknown";
43 case CBCentralManagerStateResetting:
44 return "CBCentralManagerStateResetting";
45 case CBCentralManagerStateUnsupported:
46 return "CBCentralManagerStateUnsupported";
47 case CBCentralManagerStateUnauthorized:
48 return "CBCentralManagerStateUnauthorized";
49 case CBCentralManagerStatePoweredOff:
50 return "CBCentralManagerStatePoweredOff";
51 case CBCentralManagerStatePoweredOn:
52 return "CBCentralManagerStatePoweredOn";
53 }
54 DCHECK(false);
55 return std::string("Unknown central manager state ") + std::to_string(state);
56 }
57
39 } // namespace 58 } // namespace
40 59
41 namespace device { 60 namespace device {
42 61
43 // static 62 // static
44 base::WeakPtr<BluetoothAdapter> BluetoothAdapter::CreateAdapter( 63 base::WeakPtr<BluetoothAdapter> BluetoothAdapter::CreateAdapter(
45 const InitCallback& init_callback) { 64 const InitCallback& init_callback) {
46 return BluetoothAdapterMac::CreateAdapter(); 65 return BluetoothAdapterMac::CreateAdapter();
47 } 66 }
48 67
(...skipping 463 matching lines...) Expand 10 before | Expand all | Expand 10 after
512 void BluetoothAdapterMac::LowEnergyDeviceUpdated( 531 void BluetoothAdapterMac::LowEnergyDeviceUpdated(
513 CBPeripheral* peripheral, 532 CBPeripheral* peripheral,
514 NSDictionary* advertisement_data, 533 NSDictionary* advertisement_data,
515 int rssi) { 534 int rssi) {
516 BluetoothLowEnergyDeviceMac* device_mac = 535 BluetoothLowEnergyDeviceMac* device_mac =
517 GetBluetoothLowEnergyDeviceMac(peripheral); 536 GetBluetoothLowEnergyDeviceMac(peripheral);
518 // If has no entry in the map, create new device and insert into |devices_|, 537 // If has no entry in the map, create new device and insert into |devices_|,
519 // otherwise update the existing device. 538 // otherwise update the existing device.
520 const bool is_new_device = device_mac == nullptr; 539 const bool is_new_device = device_mac == nullptr;
521 if (is_new_device) { 540 if (is_new_device) {
522 VLOG(1) << "LowEnergyDeviceUpdated new device";
523 // A new device has been found. 541 // A new device has been found.
524 device_mac = new BluetoothLowEnergyDeviceMac(this, peripheral); 542 device_mac = new BluetoothLowEnergyDeviceMac(this, peripheral);
543 VLOG(1) << device_mac->ToString() << ": New Device.";
525 } else if (DoesCollideWithKnownDevice(peripheral, device_mac)) { 544 } else if (DoesCollideWithKnownDevice(peripheral, device_mac)) {
526 return; 545 return;
527 } 546 }
528 547
529 DCHECK(device_mac); 548 DCHECK(device_mac);
549 VLOG(1) << device_mac->ToString() << ": Device updated with "
ortuno 2017/03/14 00:34:33 Make this a VLOG(3). We are going to get tens of t
jlebel 2017/03/15 01:08:40 Done.
550 << base::SysNSStringToUTF8([advertisement_data description]);
530 551
531 // Get Advertised UUIDs 552 // Get Advertised UUIDs
532 BluetoothDevice::UUIDList advertised_uuids; 553 BluetoothDevice::UUIDList advertised_uuids;
533 NSArray* service_uuids = 554 NSArray* service_uuids =
534 [advertisement_data objectForKey:CBAdvertisementDataServiceUUIDsKey]; 555 [advertisement_data objectForKey:CBAdvertisementDataServiceUUIDsKey];
535 for (CBUUID* uuid in service_uuids) { 556 for (CBUUID* uuid in service_uuids) {
536 advertised_uuids.push_back(BluetoothUUID([[uuid UUIDString] UTF8String])); 557 advertised_uuids.push_back(BluetoothUUID([[uuid UUIDString] UTF8String]));
537 } 558 }
538 NSArray* overflow_service_uuids = [advertisement_data 559 NSArray* overflow_service_uuids = [advertisement_data
539 objectForKey:CBAdvertisementDataOverflowServiceUUIDsKey]; 560 objectForKey:CBAdvertisementDataOverflowServiceUUIDsKey];
(...skipping 29 matching lines...) Expand all
569 devices_[device_address] = base::WrapUnique(device_mac); 590 devices_[device_address] = base::WrapUnique(device_mac);
570 for (auto& observer : observers_) 591 for (auto& observer : observers_)
571 observer.DeviceAdded(this, device_mac); 592 observer.DeviceAdded(this, device_mac);
572 } else { 593 } else {
573 for (auto& observer : observers_) 594 for (auto& observer : observers_)
574 observer.DeviceChanged(this, device_mac); 595 observer.DeviceChanged(this, device_mac);
575 } 596 }
576 } 597 }
577 598
578 // TODO(krstnmnlsn): Implement. crbug.com/511025 599 // TODO(krstnmnlsn): Implement. crbug.com/511025
579 void BluetoothAdapterMac::LowEnergyCentralManagerUpdatedState() {} 600 void BluetoothAdapterMac::LowEnergyCentralManagerUpdatedState() {
601 VLOG(1) << "Central manager state updated "
602 << GetCentralManagerStateString([low_energy_central_manager_ state]);
603 }
580 604
581 void BluetoothAdapterMac::AddPairedDevices() { 605 void BluetoothAdapterMac::AddPairedDevices() {
582 // Add any new paired devices. 606 // Add any new paired devices.
583 for (IOBluetoothDevice* device in [IOBluetoothDevice pairedDevices]) { 607 for (IOBluetoothDevice* device in [IOBluetoothDevice pairedDevices]) {
584 // pairedDevices sometimes includes unknown devices that are not paired. 608 // pairedDevices sometimes includes unknown devices that are not paired.
585 // Radar issue with id 2282763004 has been filed about it. 609 // Radar issue with id 2282763004 has been filed about it.
586 if ([device isPaired]) { 610 if ([device isPaired]) {
587 ClassicDeviceAdded(device); 611 ClassicDeviceAdded(device);
588 } 612 }
589 } 613 }
590 } 614 }
591 615
592 std::vector<BluetoothDevice*> 616 std::vector<BluetoothDevice*>
593 BluetoothAdapterMac::RetrieveGattConnectedDevicesWithService( 617 BluetoothAdapterMac::RetrieveGattConnectedDevicesWithService(
594 const BluetoothUUID* uuid) { 618 const BluetoothUUID* uuid) {
595 NSArray* cbUUIDs = nil; 619 NSArray* cbUUIDs = nil;
596 if (!uuid) { 620 if (!uuid) {
597 // It is not possible to ask for all connected peripherals with 621 // It is not possible to ask for all connected peripherals with
598 // -[CBCentralManager retrieveConnectedPeripheralsWithServices:] by passing 622 // -[CBCentralManager retrieveConnectedPeripheralsWithServices:] by passing
599 // nil. To try to get most of the peripherals, the search is done with 623 // nil. To try to get most of the peripherals, the search is done with
600 // Generic Access service. 624 // Generic Access service.
601 CBUUID* genericAccessServiceUUID = [CBUUID UUIDWithString:@"1800"]; 625 CBUUID* genericAccessServiceUUID = [CBUUID UUIDWithString:@"1800"];
602 cbUUIDs = @[ genericAccessServiceUUID ]; 626 cbUUIDs = @[ genericAccessServiceUUID ];
603 } else { 627 } else {
604 NSString* uuidString = 628 NSString* uuidString =
605 base::SysUTF8ToNSString(uuid->canonical_value().c_str()); 629 base::SysUTF8ToNSString(uuid->canonical_value().c_str());
606 cbUUIDs = @[ [CBUUID UUIDWithString:uuidString] ]; 630 cbUUIDs = @[ [CBUUID UUIDWithString:uuidString] ];
607 } 631 }
632 VLOG(1) << "RetrieveGattConnectedDevicesWithService " << uuid->value();
ortuno 2017/03/14 00:34:33 uuid could be null so let's do the logging inside
jlebel 2017/03/15 01:08:40 Done.
608 NSArray* peripherals = [low_energy_central_manager_ 633 NSArray* peripherals = [low_energy_central_manager_
609 retrieveConnectedPeripheralsWithServices:cbUUIDs]; 634 retrieveConnectedPeripheralsWithServices:cbUUIDs];
610 std::vector<BluetoothDevice*> connected_devices; 635 std::vector<BluetoothDevice*> connected_devices;
611 for (CBPeripheral* peripheral in peripherals) { 636 for (CBPeripheral* peripheral in peripherals) {
612 BluetoothLowEnergyDeviceMac* device_mac = 637 BluetoothLowEnergyDeviceMac* device_mac =
613 GetBluetoothLowEnergyDeviceMac(peripheral); 638 GetBluetoothLowEnergyDeviceMac(peripheral);
614 const bool is_new_device = device_mac == nullptr; 639 const bool is_new_device = device_mac == nullptr;
615 640
616 if (!is_new_device && DoesCollideWithKnownDevice(peripheral, device_mac)) { 641 if (!is_new_device && DoesCollideWithKnownDevice(peripheral, device_mac)) {
617 continue; 642 continue;
618 } 643 }
619 if (is_new_device) { 644 if (is_new_device) {
620 device_mac = new BluetoothLowEnergyDeviceMac(this, peripheral); 645 device_mac = new BluetoothLowEnergyDeviceMac(this, peripheral);
621 std::string device_address = 646 std::string device_address =
622 BluetoothLowEnergyDeviceMac::GetPeripheralHashAddress(peripheral); 647 BluetoothLowEnergyDeviceMac::GetPeripheralHashAddress(peripheral);
623 devices_[device_address] = base::WrapUnique(device_mac); 648 devices_[device_address] = base::WrapUnique(device_mac);
624 for (auto& observer : observers_) { 649 for (auto& observer : observers_) {
625 observer.DeviceAdded(this, device_mac); 650 observer.DeviceAdded(this, device_mac);
626 } 651 }
627 } 652 }
628 connected_devices.push_back(device_mac); 653 connected_devices.push_back(device_mac);
654 VLOG(1) << " " << device_mac->ToString();
ortuno 2017/03/14 00:34:33 Please follow the same pattern for all logs: VLOG
jlebel 2017/03/15 01:08:40 Done.
629 } 655 }
630 return connected_devices; 656 return connected_devices;
631 } 657 }
632 658
633 void BluetoothAdapterMac::CreateGattConnection( 659 void BluetoothAdapterMac::CreateGattConnection(
634 BluetoothLowEnergyDeviceMac* device_mac) { 660 BluetoothLowEnergyDeviceMac* device_mac) {
635 [low_energy_central_manager_ connectPeripheral:device_mac->peripheral_ 661 [low_energy_central_manager_ connectPeripheral:device_mac->peripheral_
636 options:nil]; 662 options:nil];
637 } 663 }
638 664
(...skipping 15 matching lines...) Expand all
654 } 680 }
655 681
656 void BluetoothAdapterMac::DidFailToConnectPeripheral(CBPeripheral* peripheral, 682 void BluetoothAdapterMac::DidFailToConnectPeripheral(CBPeripheral* peripheral,
657 NSError* error) { 683 NSError* error) {
658 BluetoothLowEnergyDeviceMac* device_mac = 684 BluetoothLowEnergyDeviceMac* device_mac =
659 GetBluetoothLowEnergyDeviceMac(peripheral); 685 GetBluetoothLowEnergyDeviceMac(peripheral);
660 if (!device_mac) { 686 if (!device_mac) {
661 [low_energy_central_manager_ cancelPeripheralConnection:peripheral]; 687 [low_energy_central_manager_ cancelPeripheralConnection:peripheral];
662 return; 688 return;
663 } 689 }
664 VLOG(1) << "Failed to connect to peripheral"; 690 VLOG(1) << device_mac->ToString() << ": Failed to connect to peripheral.";
665 BluetoothDevice::ConnectErrorCode error_code = 691 BluetoothDevice::ConnectErrorCode error_code =
666 BluetoothDevice::ConnectErrorCode::ERROR_UNKNOWN; 692 BluetoothDevice::ConnectErrorCode::ERROR_UNKNOWN;
667 if (error) { 693 if (error) {
668 error_code = BluetoothDeviceMac::GetConnectErrorCodeFromNSError(error); 694 error_code = BluetoothDeviceMac::GetConnectErrorCodeFromNSError(error);
669 VLOG(1) << "Bluetooth error, domain: " << error.domain.UTF8String 695 VLOG(1) << device_mac->ToString()
696 << ": Bluetooth error, domain: " << error.domain.UTF8String
670 << ", error code: " << error.code 697 << ", error code: " << error.code
671 << ", converted into: " << error_code; 698 << ", converted into: " << error_code;
672 } 699 }
673 device_mac->DidFailToConnectGatt(error_code); 700 device_mac->DidFailToConnectGatt(error_code);
674 } 701 }
675 702
676 void BluetoothAdapterMac::DidDisconnectPeripheral(CBPeripheral* peripheral, 703 void BluetoothAdapterMac::DidDisconnectPeripheral(CBPeripheral* peripheral,
677 NSError* error) { 704 NSError* error) {
678 BluetoothLowEnergyDeviceMac* device_mac = 705 BluetoothLowEnergyDeviceMac* device_mac =
679 GetBluetoothLowEnergyDeviceMac(peripheral); 706 GetBluetoothLowEnergyDeviceMac(peripheral);
680 if (!device_mac) { 707 if (!device_mac) {
681 [low_energy_central_manager_ cancelPeripheralConnection:peripheral]; 708 [low_energy_central_manager_ cancelPeripheralConnection:peripheral];
682 return; 709 return;
683 } 710 }
684 VLOG(1) << "Disconnected from peripheral."; 711 VLOG(1) << device_mac->ToString() << ": Disconnected from peripheral.";
685 if (error) { 712 if (error) {
686 VLOG(1) << "Bluetooth error, domain: " << error.domain.UTF8String 713 VLOG(1) << device_mac->ToString()
714 << ": Bluetooth error, domain: " << error.domain.UTF8String
687 << ", error code: " << error.code; 715 << ", error code: " << error.code;
688 } 716 }
689 device_mac->DidDisconnectPeripheral(error); 717 device_mac->DidDisconnectPeripheral(error);
690 } 718 }
691 719
692 BluetoothLowEnergyDeviceMac* 720 BluetoothLowEnergyDeviceMac*
693 BluetoothAdapterMac::GetBluetoothLowEnergyDeviceMac(CBPeripheral* peripheral) { 721 BluetoothAdapterMac::GetBluetoothLowEnergyDeviceMac(CBPeripheral* peripheral) {
694 std::string device_address = 722 std::string device_address =
695 BluetoothLowEnergyDeviceMac::GetPeripheralHashAddress(peripheral); 723 BluetoothLowEnergyDeviceMac::GetPeripheralHashAddress(peripheral);
696 auto iter = devices_.find(device_address); 724 auto iter = devices_.find(device_address);
(...skipping 19 matching lines...) Expand all
716 // hash the probability of this occuring with 10,000 devices 744 // hash the probability of this occuring with 10,000 devices
717 // simultaneously present is 1e-6 (see 745 // simultaneously present is 1e-6 (see
718 // https://en.wikipedia.org/wiki/Birthday_problem#Probability_table). We 746 // https://en.wikipedia.org/wiki/Birthday_problem#Probability_table). We
719 // ignore the second device by returning. 747 // ignore the second device by returning.
720 return true; 748 return true;
721 } 749 }
722 return false; 750 return false;
723 } 751 }
724 752
725 } // namespace device 753 } // namespace device
OLDNEW
« no previous file with comments | « no previous file | device/bluetooth/bluetooth_low_energy_device_mac.h » ('j') | device/bluetooth/bluetooth_low_energy_device_mac.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698