| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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_device.h" | 5 #include "device/bluetooth/bluetooth_device.h" |
| 6 | 6 |
| 7 #include <iterator> | 7 #include <iterator> |
| 8 #include <memory> | 8 #include <memory> |
| 9 #include <string> | 9 #include <string> |
| 10 | 10 |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 62 void BluetoothDevice::DeviceUUIDs::UpdateDeviceUUIDs() { | 62 void BluetoothDevice::DeviceUUIDs::UpdateDeviceUUIDs() { |
| 63 device_uuids_.clear(); | 63 device_uuids_.clear(); |
| 64 std::set_union(advertised_uuids_.begin(), advertised_uuids_.end(), | 64 std::set_union(advertised_uuids_.begin(), advertised_uuids_.end(), |
| 65 service_uuids_.begin(), service_uuids_.end(), | 65 service_uuids_.begin(), service_uuids_.end(), |
| 66 std::inserter(device_uuids_, device_uuids_.begin())); | 66 std::inserter(device_uuids_, device_uuids_.begin())); |
| 67 } | 67 } |
| 68 | 68 |
| 69 BluetoothDevice::BluetoothDevice(BluetoothAdapter* adapter) | 69 BluetoothDevice::BluetoothDevice(BluetoothAdapter* adapter) |
| 70 : adapter_(adapter), | 70 : adapter_(adapter), |
| 71 gatt_services_discovery_complete_(false), | 71 gatt_services_discovery_complete_(false), |
| 72 gatt_services_shutting_down_(false), |
| 72 last_update_time_(base::Time()) {} | 73 last_update_time_(base::Time()) {} |
| 73 | 74 |
| 74 BluetoothDevice::~BluetoothDevice() { | 75 BluetoothDevice::~BluetoothDevice() { |
| 75 for (BluetoothGattConnection* connection : gatt_connections_) { | 76 for (BluetoothGattConnection* connection : gatt_connections_) { |
| 76 connection->InvalidateConnectionReference(); | 77 connection->InvalidateConnectionReference(); |
| 77 } | 78 } |
| 79 gatt_services_shutting_down_ = true; |
| 80 gatt_services_.clear(); |
| 78 } | 81 } |
| 79 | 82 |
| 80 BluetoothDevice::ConnectionInfo::ConnectionInfo() | 83 BluetoothDevice::ConnectionInfo::ConnectionInfo() |
| 81 : rssi(kUnknownPower), | 84 : rssi(kUnknownPower), |
| 82 transmit_power(kUnknownPower), | 85 transmit_power(kUnknownPower), |
| 83 max_transmit_power(kUnknownPower) {} | 86 max_transmit_power(kUnknownPower) {} |
| 84 | 87 |
| 85 BluetoothDevice::ConnectionInfo::ConnectionInfo( | 88 BluetoothDevice::ConnectionInfo::ConnectionInfo( |
| 86 int rssi, int transmit_power, int max_transmit_power) | 89 int rssi, int transmit_power, int max_transmit_power) |
| 87 : rssi(rssi), | 90 : rssi(rssi), |
| (...skipping 275 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 363 gatt_services_discovery_complete_ = complete; | 366 gatt_services_discovery_complete_ = complete; |
| 364 } | 367 } |
| 365 | 368 |
| 366 bool BluetoothDevice::IsGattServicesDiscoveryComplete() const { | 369 bool BluetoothDevice::IsGattServicesDiscoveryComplete() const { |
| 367 return gatt_services_discovery_complete_; | 370 return gatt_services_discovery_complete_; |
| 368 } | 371 } |
| 369 | 372 |
| 370 std::vector<BluetoothRemoteGattService*> BluetoothDevice::GetGattServices() | 373 std::vector<BluetoothRemoteGattService*> BluetoothDevice::GetGattServices() |
| 371 const { | 374 const { |
| 372 std::vector<BluetoothRemoteGattService*> services; | 375 std::vector<BluetoothRemoteGattService*> services; |
| 376 if (gatt_services_shutting_down_) |
| 377 return services; |
| 373 for (const auto& iter : gatt_services_) | 378 for (const auto& iter : gatt_services_) |
| 374 services.push_back(iter.second); | 379 services.push_back(iter.second.get()); |
| 375 return services; | 380 return services; |
| 376 } | 381 } |
| 377 | 382 |
| 378 BluetoothRemoteGattService* BluetoothDevice::GetGattService( | 383 BluetoothRemoteGattService* BluetoothDevice::GetGattService( |
| 379 const std::string& identifier) const { | 384 const std::string& identifier) const { |
| 380 return gatt_services_.get(identifier); | 385 if (gatt_services_shutting_down_) |
| 386 return nullptr; |
| 387 auto it = gatt_services_.find(identifier); |
| 388 if (it == gatt_services_.end()) |
| 389 return nullptr; |
| 390 return it->second.get(); |
| 381 } | 391 } |
| 382 | 392 |
| 383 // static | 393 // static |
| 384 std::string BluetoothDevice::CanonicalizeAddress(const std::string& address) { | 394 std::string BluetoothDevice::CanonicalizeAddress(const std::string& address) { |
| 385 std::string canonicalized = address; | 395 std::string canonicalized = address; |
| 386 if (address.size() == 12) { | 396 if (address.size() == 12) { |
| 387 // Might be an address in the format "1A2B3C4D5E6F". Add separators. | 397 // Might be an address in the format "1A2B3C4D5E6F". Add separators. |
| 388 for (size_t i = 2; i < canonicalized.size(); i += 3) { | 398 for (size_t i = 2; i < canonicalized.size(); i += 3) { |
| 389 canonicalized.insert(i, ":"); | 399 canonicalized.insert(i, ":"); |
| 390 } | 400 } |
| (...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 515 if (power < INT8_MIN) { | 525 if (power < INT8_MIN) { |
| 516 return INT8_MIN; | 526 return INT8_MIN; |
| 517 } | 527 } |
| 518 if (power > INT8_MAX) { | 528 if (power > INT8_MAX) { |
| 519 return INT8_MAX; | 529 return INT8_MAX; |
| 520 } | 530 } |
| 521 return static_cast<int8_t>(power); | 531 return static_cast<int8_t>(power); |
| 522 } | 532 } |
| 523 | 533 |
| 524 } // namespace device | 534 } // namespace device |
| OLD | NEW |