Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 24 matching lines...) Expand all Loading... | |
| 35 // The frequency with which to poll the adapter for updates. | 35 // The frequency with which to poll the adapter for updates. |
| 36 const int kPollIntervalMs = 500; | 36 const int kPollIntervalMs = 500; |
| 37 | 37 |
| 38 } // namespace | 38 } // namespace |
| 39 | 39 |
| 40 namespace device { | 40 namespace device { |
| 41 | 41 |
| 42 // static | 42 // static |
| 43 const NSTimeInterval BluetoothAdapterMac::kDiscoveryTimeoutSec = | 43 const NSTimeInterval BluetoothAdapterMac::kDiscoveryTimeoutSec = |
| 44 180; // 3 minutes | 44 180; // 3 minutes |
| 45 static NSString* const kErrorDomain = @"ConnectErrorCode"; | |
| 45 | 46 |
| 46 // static | 47 // static |
| 47 base::WeakPtr<BluetoothAdapter> BluetoothAdapter::CreateAdapter( | 48 base::WeakPtr<BluetoothAdapter> BluetoothAdapter::CreateAdapter( |
| 48 const InitCallback& init_callback) { | 49 const InitCallback& init_callback) { |
| 49 return BluetoothAdapterMac::CreateAdapter(); | 50 return BluetoothAdapterMac::CreateAdapter(); |
| 50 } | 51 } |
| 51 | 52 |
| 52 // static | 53 // static |
| 53 base::WeakPtr<BluetoothAdapterMac> BluetoothAdapterMac::CreateAdapter() { | 54 base::WeakPtr<BluetoothAdapterMac> BluetoothAdapterMac::CreateAdapter() { |
| 54 BluetoothAdapterMac* adapter = new BluetoothAdapterMac(); | 55 BluetoothAdapterMac* adapter = new BluetoothAdapterMac(); |
| (...skipping 511 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 566 } | 567 } |
| 567 | 568 |
| 568 void BluetoothAdapterMac::DidFailToConnectPeripheral(CBPeripheral* peripheral, | 569 void BluetoothAdapterMac::DidFailToConnectPeripheral(CBPeripheral* peripheral, |
| 569 NSError* error) { | 570 NSError* error) { |
| 570 BluetoothLowEnergyDeviceMac* device_mac = | 571 BluetoothLowEnergyDeviceMac* device_mac = |
| 571 GetBluetoothLowEnergyDeviceMac(peripheral); | 572 GetBluetoothLowEnergyDeviceMac(peripheral); |
| 572 if (!device_mac) { | 573 if (!device_mac) { |
| 573 [low_energy_central_manager_ cancelPeripheralConnection:peripheral]; | 574 [low_energy_central_manager_ cancelPeripheralConnection:peripheral]; |
| 574 return; | 575 return; |
| 575 } | 576 } |
| 576 // TODO(http://crbug.com/585894): Need to convert the error. | 577 BluetoothDevice::ConnectErrorCode error_code = |
| 577 device_mac->DidFailToConnectGatt(BluetoothClassicDeviceMac::ERROR_UNKNOWN); | 578 BluetoothAdapterMac::GetConnectErrorCodeFromNSError(error); |
| 579 device_mac->DidFailToConnectGatt(error_code); | |
| 578 } | 580 } |
| 579 | 581 |
| 580 void BluetoothAdapterMac::DidDisconnectPeripheral(CBPeripheral* peripheral, | 582 void BluetoothAdapterMac::DidDisconnectPeripheral(CBPeripheral* peripheral, |
| 581 NSError* error) { | 583 NSError* error) { |
| 582 BluetoothLowEnergyDeviceMac* device_mac = | 584 BluetoothLowEnergyDeviceMac* device_mac = |
| 583 GetBluetoothLowEnergyDeviceMac(peripheral); | 585 GetBluetoothLowEnergyDeviceMac(peripheral); |
| 584 if (!device_mac) { | 586 if (!device_mac) { |
| 585 [low_energy_central_manager_ cancelPeripheralConnection:peripheral]; | 587 [low_energy_central_manager_ cancelPeripheralConnection:peripheral]; |
| 586 return; | 588 return; |
| 587 } | 589 } |
| 588 // TODO(http://crbug.com/585897): Need to pass the error. | 590 BluetoothDevice::ConnectErrorCode error_code = |
| 589 device_mac->DidDisconnectPeripheral(); | 591 BluetoothAdapterMac::GetConnectErrorCodeFromNSError(error); |
| 592 device_mac->DidDisconnectPeripheral(error_code); | |
| 590 } | 593 } |
| 591 | 594 |
| 592 BluetoothLowEnergyDeviceMac* | 595 BluetoothLowEnergyDeviceMac* |
| 593 BluetoothAdapterMac::GetBluetoothLowEnergyDeviceMac(CBPeripheral* peripheral) { | 596 BluetoothAdapterMac::GetBluetoothLowEnergyDeviceMac(CBPeripheral* peripheral) { |
| 594 std::string device_address = | 597 std::string device_address = |
| 595 BluetoothLowEnergyDeviceMac::GetPeripheralHashAddress(peripheral); | 598 BluetoothLowEnergyDeviceMac::GetPeripheralHashAddress(peripheral); |
| 596 // Try to find device from |devices_| with key |device_address|, | 599 // Try to find device from |devices_| with key |device_address|, |
| 597 // if has no entry in the map, disconnect the peripheral. | 600 // if has no entry in the map, disconnect the peripheral. |
| 598 DevicesMap::const_iterator iter = devices_.find(device_address); | 601 DevicesMap::const_iterator iter = devices_.find(device_address); |
| 599 if (iter == devices_.end()) { | 602 if (iter == devices_.end()) { |
| 600 return nil; | 603 return nil; |
| 601 } | 604 } |
| 602 return static_cast<BluetoothLowEnergyDeviceMac*>(iter->second); | 605 return static_cast<BluetoothLowEnergyDeviceMac*>(iter->second); |
| 603 } | 606 } |
| 604 | 607 |
| 608 NSError* BluetoothAdapterMac::GetNSErrorFromConnectErrorCode( | |
| 609 BluetoothDevice::ConnectErrorCode error_code) { | |
| 610 // TODO(http://crbug.com/585894): Need to convert the error. | |
| 611 return [NSError errorWithDomain:kErrorDomain code:error_code userInfo:nil]; | |
| 612 } | |
| 613 | |
| 614 BluetoothDevice::ConnectErrorCode | |
| 615 BluetoothAdapterMac::GetConnectErrorCodeFromNSError(NSError* error) { | |
| 616 if ([error.domain isEqualToString:kErrorDomain]) { | |
| 617 switch ((BluetoothDevice::ConnectErrorCode)error.code) { | |
|
scheib
2016/02/10 23:48:16
I don't think this static cast will work. The Blue
jlebel
2016/02/11 00:03:43
I'm not sure to understand. This switch is execute
scheib
2016/03/02 05:33:22
OK, I didn't see or properly understand the NSErro
jlebel
2016/03/02 15:34:32
Yes, of course!
| |
| 618 case BluetoothDevice::ERROR_ATTRIBUTE_LENGTH_INVALID: | |
| 619 return BluetoothDevice::ERROR_ATTRIBUTE_LENGTH_INVALID; | |
| 620 case BluetoothDevice::ERROR_AUTH_CANCELED: | |
| 621 return BluetoothDevice::ERROR_AUTH_CANCELED; | |
| 622 case BluetoothDevice::ERROR_AUTH_FAILED: | |
| 623 return BluetoothDevice::ERROR_AUTH_FAILED; | |
| 624 case BluetoothDevice::ERROR_AUTH_REJECTED: | |
| 625 return BluetoothDevice::ERROR_AUTH_REJECTED; | |
| 626 case BluetoothDevice::ERROR_AUTH_TIMEOUT: | |
| 627 return BluetoothDevice::ERROR_AUTH_TIMEOUT; | |
| 628 case BluetoothDevice::ERROR_CONNECTION_CONGESTED: | |
| 629 return BluetoothDevice::ERROR_CONNECTION_CONGESTED; | |
| 630 case BluetoothDevice::ERROR_FAILED: | |
| 631 return BluetoothDevice::ERROR_FAILED; | |
| 632 case BluetoothDevice::ERROR_INPROGRESS: | |
| 633 return BluetoothDevice::ERROR_INPROGRESS; | |
| 634 case BluetoothDevice::ERROR_INSUFFICIENT_ENCRYPTION: | |
| 635 return BluetoothDevice::ERROR_INSUFFICIENT_ENCRYPTION; | |
| 636 case BluetoothDevice::ERROR_OFFSET_INVALID: | |
| 637 return BluetoothDevice::ERROR_OFFSET_INVALID; | |
| 638 case BluetoothDevice::ERROR_READ_NOT_PERMITTED: | |
| 639 return BluetoothDevice::ERROR_READ_NOT_PERMITTED; | |
| 640 case BluetoothDevice::ERROR_REQUEST_NOT_SUPPORTED: | |
| 641 return BluetoothDevice::ERROR_REQUEST_NOT_SUPPORTED; | |
| 642 case BluetoothDevice::ERROR_UNKNOWN: | |
| 643 return BluetoothDevice::ERROR_UNKNOWN; | |
| 644 case BluetoothDevice::ERROR_UNSUPPORTED_DEVICE: | |
| 645 return BluetoothDevice::ERROR_UNSUPPORTED_DEVICE; | |
| 646 case BluetoothDevice::ERROR_WRITE_NOT_PERMITTED: | |
| 647 return BluetoothDevice::ERROR_WRITE_NOT_PERMITTED; | |
| 648 case BluetoothDevice::NUM_CONNECT_ERROR_CODES: | |
| 649 DCHECK(false); | |
| 650 return BluetoothDevice::ERROR_UNKNOWN; | |
| 651 } | |
| 652 } | |
| 653 // TODO(http://crbug.com/585894): Need to convert the error. | |
| 654 return BluetoothDevice::ERROR_UNKNOWN; | |
| 655 } | |
| 656 | |
| 605 } // namespace device | 657 } // namespace device |
| OLD | NEW |