File: bluetooth_remote_gatt_service_floss.cc

package info (click to toggle)
chromium 139.0.7258.127-1
  • links: PTS, VCS
  • area: main
  • in suites:
  • size: 6,122,068 kB
  • sloc: cpp: 35,100,771; ansic: 7,163,530; javascript: 4,103,002; python: 1,436,920; asm: 946,517; xml: 746,709; pascal: 187,653; perl: 88,691; sh: 88,436; objc: 79,953; sql: 51,488; cs: 44,583; fortran: 24,137; makefile: 22,147; tcl: 15,277; php: 13,980; yacc: 8,984; ruby: 7,485; awk: 3,720; lisp: 3,096; lex: 1,327; ada: 727; jsp: 228; sed: 36
file content (77 lines) | stat: -rw-r--r-- 2,761 bytes parent folder | download | duplicates (11)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
// Copyright 2022 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "device/bluetooth/floss/bluetooth_remote_gatt_service_floss.h"

#include "base/memory/ptr_util.h"
#include "base/strings/stringprintf.h"
#include "device/bluetooth/floss/bluetooth_device_floss.h"
#include "device/bluetooth/floss/bluetooth_remote_gatt_characteristic_floss.h"

namespace floss {

// static
std::unique_ptr<BluetoothRemoteGattServiceFloss>
BluetoothRemoteGattServiceFloss::Create(BluetoothAdapterFloss* adapter,
                                        BluetoothDeviceFloss* device,
                                        GattService remote_service) {
  return base::WrapUnique(
      new BluetoothRemoteGattServiceFloss(adapter, device, remote_service));
}

BluetoothRemoteGattServiceFloss::BluetoothRemoteGattServiceFloss(
    BluetoothAdapterFloss* adapter,
    BluetoothDeviceFloss* device,
    GattService remote_service)
    : BluetoothGattServiceFloss(adapter),
      remote_service_(remote_service),
      device_(device) {
  for (GattCharacteristic& c : remote_service_.characteristics) {
    AddCharacteristic(BluetoothRemoteGattCharacteristicFloss::Create(this, &c));
  }

  for (GattService& s : remote_service_.included_services) {
    included_services_.push_back(Create(adapter, device, s));
  }
}

BluetoothRemoteGattServiceFloss::~BluetoothRemoteGattServiceFloss() {
  characteristics_.clear();
  included_services_.clear();
}

std::string BluetoothRemoteGattServiceFloss::GetIdentifier() const {
  return base::StringPrintf("%s-%s/%04x", device_->GetAddress().c_str(),
                            GetUUID().value().c_str(),
                            remote_service_.instance_id);
}

device::BluetoothUUID BluetoothRemoteGattServiceFloss::GetUUID() const {
  return remote_service_.uuid;
}

device::BluetoothDevice* BluetoothRemoteGattServiceFloss::GetDevice() const {
  return static_cast<device::BluetoothDevice*>(device_.get());
}

bool BluetoothRemoteGattServiceFloss::IsPrimary() const {
  return remote_service_.service_type == GattService::GATT_SERVICE_TYPE_PRIMARY;
}

std::vector<device::BluetoothRemoteGattService*>
BluetoothRemoteGattServiceFloss::GetIncludedServices() const {
  std::vector<device::BluetoothRemoteGattService*> services;

  // TODO(b/193686564) - It's likely that we need to surface this up to
  // BluetoothDevice in some other way and let it take ownership of these
  // services since |GetIncludedServices| doesn't seem to be correctly used
  // everywhere.
  for (const auto& s : included_services_) {
    services.push_back(
        static_cast<device::BluetoothRemoteGattService*>(s.get()));
  }

  return services;
}

}  // namespace floss