| // Copyright 2016 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "device/bluetooth/bluetooth_remote_gatt_service.h" |
| |
| #include <utility> |
| |
| #include "device/bluetooth/bluetooth_remote_gatt_characteristic.h" |
| #include "device/bluetooth/bluetooth_uuid.h" |
| |
| namespace device { |
| |
| BluetoothRemoteGattService::BluetoothRemoteGattService() = default; |
| |
| BluetoothRemoteGattService::~BluetoothRemoteGattService() = default; |
| |
| std::vector<BluetoothRemoteGattCharacteristic*> |
| BluetoothRemoteGattService::GetCharacteristics() const { |
| std::vector<BluetoothRemoteGattCharacteristic*> characteristics; |
| characteristics.reserve(characteristics_.size()); |
| for (const auto& characteristic : characteristics_) |
| characteristics.push_back(characteristic.second.get()); |
| return characteristics; |
| } |
| |
| BluetoothRemoteGattCharacteristic* |
| BluetoothRemoteGattService::GetCharacteristic( |
| const std::string& identifier) const { |
| auto iter = characteristics_.find(identifier); |
| return iter != characteristics_.end() ? iter->second.get() : nullptr; |
| } |
| |
| std::vector<BluetoothRemoteGattCharacteristic*> |
| BluetoothRemoteGattService::GetCharacteristicsByUUID( |
| const BluetoothUUID& characteristic_uuid) const { |
| std::vector<BluetoothRemoteGattCharacteristic*> result; |
| for (const auto& characteristic : characteristics_) { |
| if (characteristic.second->GetUUID() == characteristic_uuid) |
| result.push_back(characteristic.second.get()); |
| } |
| |
| return result; |
| } |
| |
| bool BluetoothRemoteGattService::IsDiscoveryComplete() const { |
| return discovery_complete_; |
| } |
| |
| void BluetoothRemoteGattService::SetDiscoveryComplete(bool complete) { |
| discovery_complete_ = complete; |
| } |
| |
| bool BluetoothRemoteGattService::AddCharacteristic( |
| std::unique_ptr<BluetoothRemoteGattCharacteristic> characteristic) { |
| if (!characteristic) |
| return false; |
| |
| const auto& characteristic_raw = *characteristic; |
| return characteristics_ |
| .try_emplace(characteristic_raw.GetIdentifier(), |
| std::move(characteristic)) |
| .second; |
| } |
| |
| } // namespace device |