| // Copyright 2018 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 "chromecast/device/bluetooth/le/remote_service_impl.h" |
| |
| #include "chromecast/base/bind_to_task_runner.h" |
| #include "chromecast/device/bluetooth/le/remote_characteristic_impl.h" |
| |
| namespace chromecast { |
| namespace bluetooth { |
| |
| // static |
| std::map<bluetooth_v2_shlib::Uuid, scoped_refptr<RemoteCharacteristic>> |
| RemoteServiceImpl::CreateCharMap( |
| RemoteDeviceImpl* remote_device, |
| base::WeakPtr<GattClientManagerImpl> gatt_client_manager, |
| const bluetooth_v2_shlib::Gatt::Service& service, |
| scoped_refptr<base::SingleThreadTaskRunner> io_task_runner) { |
| std::map<bluetooth_v2_shlib::Uuid, scoped_refptr<RemoteCharacteristic>> ret; |
| for (const auto& characteristic : service.characteristics) { |
| ret[characteristic.uuid] = new RemoteCharacteristicImpl( |
| remote_device, gatt_client_manager, &characteristic, io_task_runner); |
| } |
| return ret; |
| } |
| |
| RemoteServiceImpl::RemoteServiceImpl( |
| RemoteDeviceImpl* remote_device, |
| base::WeakPtr<GattClientManagerImpl> gatt_client_manager, |
| const bluetooth_v2_shlib::Gatt::Service& service, |
| scoped_refptr<base::SingleThreadTaskRunner> io_task_runner) |
| : service_(service), |
| uuid_to_characteristic_(CreateCharMap(remote_device, |
| gatt_client_manager, |
| service_, |
| io_task_runner)) { |
| DCHECK(gatt_client_manager); |
| DCHECK(io_task_runner); |
| DCHECK(io_task_runner->BelongsToCurrentThread()); |
| } |
| |
| RemoteServiceImpl::~RemoteServiceImpl() = default; |
| |
| std::vector<scoped_refptr<RemoteCharacteristic>> |
| RemoteServiceImpl::GetCharacteristics() { |
| std::vector<scoped_refptr<RemoteCharacteristic>> ret; |
| ret.reserve(uuid_to_characteristic_.size()); |
| for (const auto& pair : uuid_to_characteristic_) { |
| ret.push_back(pair.second); |
| } |
| |
| return ret; |
| } |
| |
| scoped_refptr<RemoteCharacteristic> RemoteServiceImpl::GetCharacteristicByUuid( |
| const bluetooth_v2_shlib::Uuid& uuid) { |
| auto it = uuid_to_characteristic_.find(uuid); |
| if (it == uuid_to_characteristic_.end()) |
| return nullptr; |
| return it->second; |
| } |
| |
| const bluetooth_v2_shlib::Uuid& RemoteServiceImpl::uuid() const { |
| return service_.uuid; |
| } |
| uint16_t RemoteServiceImpl::handle() const { |
| return service_.handle; |
| } |
| bool RemoteServiceImpl::primary() const { |
| return service_.primary; |
| } |
| |
| } // namespace bluetooth |
| } // namespace chromecast |