1/*
2 * BluezQt - Asynchronous Bluez wrapper library
3 *
4 * SPDX-FileCopyrightText: 2019 Manuel Weichselbaumer <mincequi@web.de>
5 *
6 * SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
7 */
8
9#include "gattapplication.h"
10
11#include "gattapplication_p.h"
12#include "gattcharacteristic.h"
13#include "gattcharacteristicadaptor.h"
14#include "gattdescriptor.h"
15#include "gattdescriptoradaptor.h"
16#include "gattservice.h"
17#include "gattserviceadaptor.h"
18
19#include <QDBusObjectPath>
20#include <QMetaProperty>
21
22namespace BluezQt
23{
24GattApplication::GattApplication(QObject *parent)
25 : GattApplication(QStringLiteral("/org/kde/bluezqt"), parent)
26{
27}
28
29GattApplication::GattApplication(const QString &objectPathPrefix, QObject *parent)
30 : QObject(parent)
31 , d(new GattApplicationPrivate(objectPathPrefix, this))
32{
33}
34
35GattApplication::~GattApplication() = default;
36
37DBusManagerStruct GattApplicationPrivate::getManagedObjects() const
38{
39 DBusManagerStruct objects;
40
41 const auto serviceAdaptors = q->findChildren<GattServiceAdaptor *>();
42 const auto charcAdaptors = q->findChildren<GattCharacteristicAdaptor *>();
43 const auto descriptorAdaptors = q->findChildren<GattDescriptorAdaptor *>();
44
45 for (const GattServiceAdaptor *serviceAdaptor : serviceAdaptors) {
46 QVariantMap properties;
47 for (int i = serviceAdaptor->metaObject()->propertyOffset(); i < serviceAdaptor->metaObject()->propertyCount(); ++i) {
48 auto propertyName = serviceAdaptor->metaObject()->property(index: i).name();
49 properties.insert(key: QString::fromLatin1(ba: propertyName), value: serviceAdaptor->property(name: propertyName));
50 }
51
52 GattService *service = qobject_cast<GattService *>(object: serviceAdaptor->parent());
53 if (service) {
54 objects[service->objectPath()].insert(QStringLiteral("org.bluez.GattService1"), value: properties);
55 }
56 }
57
58 for (const GattCharacteristicAdaptor *charcAdaptor : charcAdaptors) {
59 QVariantMap properties;
60 for (int i = charcAdaptor->metaObject()->propertyOffset(); i < charcAdaptor->metaObject()->propertyCount(); ++i) {
61 auto propertyName = charcAdaptor->metaObject()->property(index: i).name();
62 properties.insert(key: QString::fromLatin1(ba: propertyName), value: charcAdaptor->property(name: propertyName));
63 }
64
65 GattCharacteristic *charc = qobject_cast<GattCharacteristic *>(object: charcAdaptor->parent());
66 if (charc) {
67 objects[charc->objectPath()].insert(QStringLiteral("org.bluez.GattCharacteristic1"), value: properties);
68 }
69 }
70
71 for (const GattDescriptorAdaptor *descAdaptor : descriptorAdaptors) {
72 QVariantMap properties;
73 for (int i = descAdaptor->metaObject()->propertyOffset(); i < descAdaptor->metaObject()->propertyCount(); ++i) {
74 auto propertyName = descAdaptor->metaObject()->property(index: i).name();
75 properties.insert(key: QString::fromLatin1(ba: propertyName), value: descAdaptor->property(name: propertyName));
76 }
77
78 GattDescriptor *desc = qobject_cast<GattDescriptor *>(object: descAdaptor->parent());
79 if (desc) {
80 objects[desc->objectPath()].insert(QStringLiteral("org.bluez.GattDescriptor1"), value: properties);
81 }
82 }
83
84 return objects;
85}
86
87QDBusObjectPath GattApplication::objectPath() const
88{
89 return d->m_objectPath;
90}
91
92} // namespace BluezQt
93
94#include "moc_gattapplication.cpp"
95

source code of bluez-qt/src/gattapplication.cpp