1/*
2 * BluezQt - Asynchronous Bluez wrapper library
3 *
4 * SPDX-FileCopyrightText: 2021 Ivan Podkurkov <podkiva2@gmail.com>
5 *
6 * SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
7 */
8
9#ifndef BLUEZQT_GATTSERVICEREMOTE_H
10#define BLUEZQT_GATTSERVICEREMOTE_H
11
12#include <QObject>
13#include <QMap>
14#include <QDBusObjectPath>
15
16#include "types.h"
17#include "bluezqt_export.h"
18
19namespace BluezQt
20{
21
22class Device;
23class PendingCall;
24
25/**
26 * @class BluezQt::GattService gattservice.h <BluezQt/GattService>
27 *
28 * Bluetooth LE GATT service.
29 *
30 * This class represents a Bluetooth LE GATT service.
31 */
32class BLUEZQT_EXPORT GattServiceRemote : public QObject
33{
34 Q_OBJECT
35
36 Q_PROPERTY(QString uuid READ uuid NOTIFY uuidChanged)
37 Q_PROPERTY(bool primary READ isPrimary NOTIFY primaryChanged)
38 Q_PROPERTY(DevicePtr device READ device CONSTANT)
39 Q_PROPERTY(QList<QDBusObjectPath> includes READ includes NOTIFY includesChanged)
40 Q_PROPERTY(quint16 handle READ handle WRITE setHandle NOTIFY handleChanged)
41 Q_PROPERTY(QList<GattCharacteristicRemotePtr> characteristics READ characteristics NOTIFY characteristicsChanged)
42
43public:
44 /**
45 * Destroys a GattService object.
46 */
47 ~GattServiceRemote() override;
48
49 /**
50 * Returns a shared pointer from this.
51 *
52 * @return GattServicePtr
53 */
54 GattServiceRemotePtr toSharedPtr() const;
55
56 /**
57 * Returns an UBI of the gatt service.
58 *
59 * Example UBI: "/org/bluez/hci0/dev_40_79_6A_0C_39_75/service01"
60 *
61 * @return UBI of gatt service
62 */
63 QString ubi() const;
64
65 /**
66 * Returns an uuid of the service.
67 *
68 * @return uuid of the service
69 */
70 QString uuid() const;
71
72 /**
73 * Returns whether the service is primary.
74 *
75 * @return true if service is primary
76 */
77 bool isPrimary() const;
78
79 /**
80 * Returns a device that has this service.
81 *
82 * @return device of service
83 */
84 DevicePtr device() const;
85
86 /**
87 * Returns object paths representing the included
88 * services of this service.
89 *
90 * @return Object paths of included services
91 */
92 QList<QDBusObjectPath> includes() const;
93
94 /**
95 * Returns service handle.
96 *
97 * @return qint16 service handle
98 */
99 quint16 handle() const;
100
101 /**
102 * Sets the service handle.
103 *
104 * @param handle service handle
105 * @return void pending call
106 */
107 PendingCall *setHandle(quint16 handle);
108
109 /**
110 * Returns object paths representing the included
111 * services of this service.
112 *
113 * @return Object paths of included services
114 */
115 QList<GattCharacteristicRemotePtr> characteristics() const;
116
117Q_SIGNALS:
118 /**
119 * Indicates that at least one of the service's properties have changed.
120 */
121 void serviceChanged(GattServiceRemotePtr service);
122
123 /**
124 * Indicates that a new characteristic was added (eg. found by connection).
125 */
126 void gattCharacteristicAdded(GattCharacteristicRemotePtr characteristic);
127
128 /**
129 * Indicates that service characteristics list has changed
130 */
131 void characteristicsChanged(QList<GattCharacteristicRemotePtr> characteristics);
132
133 /**
134 * Indicates that a characteristic was removed.
135 */
136 void gattCharacteristicRemoved(GattCharacteristicRemotePtr characteristic);
137
138 /**
139 * Indicates that at least one of the characteristic's properties have changed.
140 */
141 void gattCharacteristicChanged(GattCharacteristicRemotePtr characteristic);
142
143 /**
144 * Indicates that services's uuid have changed.
145 */
146 void uuidChanged(const QString &uuid);
147
148 /**
149 * Indicates that services's primary state have changed.
150 */
151 void primaryChanged(bool primary);
152
153 /**
154 * Indicates that services's handle have changed.
155 */
156 void handleChanged(quint16 handle);
157
158 /**
159 * Indicates that object paths representing the included
160 * services have changed.
161 */
162 void includesChanged(const QList<QDBusObjectPath> &includes);
163
164private:
165 BLUEZQT_NO_EXPORT explicit GattServiceRemote(const QString &path, const QVariantMap &properties, DevicePtr device);
166
167 const std::unique_ptr<class GattServiceRemotePrivate> d;
168
169 friend class GattServiceRemotePrivate;
170 friend class DevicePrivate;
171 friend class ManagerPrivate;
172 friend class Adapter;
173};
174
175} // namespace BluezQt
176
177#endif // BLUEZQT_GATTSERVICEREMOTE_H
178

source code of bluez-qt/src/gattserviceremote.h