1// Copyright (C) 2016 The Qt Company Ltd.
2// Copyright (C) 2016 Javier S. Pedro <maemo@javispedro.com>
3// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
4#ifndef QLOWENERGYSERVICE_H
5#define QLOWENERGYSERVICE_H
6
7#include <QtBluetooth/QBluetoothAddress>
8#include <QtBluetooth/QBluetoothUuid>
9#include <QtBluetooth/QLowEnergyCharacteristic>
10
11QT_BEGIN_NAMESPACE
12
13class QLowEnergyServicePrivate;
14class Q_BLUETOOTH_EXPORT QLowEnergyService : public QObject
15{
16 Q_OBJECT
17public:
18 enum ServiceType {
19 PrimaryService = 0x0001,
20 IncludedService = 0x0002
21 };
22 Q_ENUM(ServiceType)
23 Q_DECLARE_FLAGS(ServiceTypes, ServiceType)
24
25 enum ServiceError {
26 NoError = 0,
27 OperationError,
28 CharacteristicWriteError,
29 DescriptorWriteError,
30 UnknownError,
31 CharacteristicReadError,
32 DescriptorReadError
33 };
34 Q_ENUM(ServiceError)
35
36 enum ServiceState {
37 InvalidService = 0,
38 RemoteService,
39 RemoteServiceDiscovering, // discoverDetails() called and running
40 RemoteServiceDiscovered, // all details have been synchronized
41 LocalService,
42
43#if QT_DEPRECATED_SINCE(6, 2)
44// for source compatibility:
45 DiscoveryRequired
46 Q_DECL_ENUMERATOR_DEPRECATED_X(
47 "DiscoveryRequired was renamed to RemoteService.")
48 = RemoteService,
49 DiscoveringService
50 Q_DECL_ENUMERATOR_DEPRECATED_X(
51 "DiscoveringService was renamed to RemoteServiceDiscovering.")
52 = RemoteServiceDiscovering,
53 ServiceDiscovered
54 Q_DECL_ENUMERATOR_DEPRECATED_X(
55 "ServiceDiscovered was renamed to RemoteServiceDiscovered.")
56 = RemoteServiceDiscovered,
57#endif
58 };
59 Q_ENUM(ServiceState)
60
61 enum DiscoveryMode {
62 FullDiscovery, // standard, reads all attributes
63 SkipValueDiscovery // does not read characteristic values and descriptors
64 };
65 Q_ENUM(DiscoveryMode)
66
67 enum WriteMode {
68 WriteWithResponse = 0,
69 WriteWithoutResponse,
70 WriteSigned
71 };
72 Q_ENUM(WriteMode)
73
74 ~QLowEnergyService();
75
76 QList<QBluetoothUuid> includedServices() const;
77
78 QLowEnergyService::ServiceTypes type() const;
79 QLowEnergyService::ServiceState state() const;
80
81 QLowEnergyCharacteristic characteristic(const QBluetoothUuid &uuid) const;
82 QList<QLowEnergyCharacteristic> characteristics() const;
83 QBluetoothUuid serviceUuid() const;
84 QString serviceName() const;
85
86 void discoverDetails(DiscoveryMode mode = FullDiscovery);
87
88 ServiceError error() const;
89
90 bool contains(const QLowEnergyCharacteristic &characteristic) const;
91 void readCharacteristic(const QLowEnergyCharacteristic &characteristic);
92 void writeCharacteristic(const QLowEnergyCharacteristic &characteristic,
93 const QByteArray &newValue,
94 WriteMode mode = WriteWithResponse);
95
96 bool contains(const QLowEnergyDescriptor &descriptor) const;
97 void readDescriptor(const QLowEnergyDescriptor &descriptor);
98 void writeDescriptor(const QLowEnergyDescriptor &descriptor,
99 const QByteArray &newValue);
100
101Q_SIGNALS:
102 void stateChanged(QLowEnergyService::ServiceState newState);
103 void characteristicChanged(const QLowEnergyCharacteristic &info,
104 const QByteArray &value);
105 void characteristicRead(const QLowEnergyCharacteristic &info,
106 const QByteArray &value);
107 void characteristicWritten(const QLowEnergyCharacteristic &info,
108 const QByteArray &value);
109 void descriptorRead(const QLowEnergyDescriptor &info,
110 const QByteArray &value);
111 void descriptorWritten(const QLowEnergyDescriptor &info,
112 const QByteArray &value);
113 void errorOccurred(QLowEnergyService::ServiceError error);
114
115private:
116 Q_DECLARE_PRIVATE(QLowEnergyService)
117 QSharedPointer<QLowEnergyServicePrivate> d_ptr;
118
119 // QLowEnergyController is the factory for this class
120 friend class QLowEnergyController;
121 friend class QLowEnergyControllerPrivate;
122 friend class QLowEnergyControllerPrivateBluez;
123 friend class QLowEnergyControllerPrivateAndroid;
124 friend class QLowEnergyControllerPrivateDarwin;
125 QLowEnergyService(QSharedPointer<QLowEnergyServicePrivate> p,
126 QObject *parent = nullptr);
127};
128
129Q_DECLARE_OPERATORS_FOR_FLAGS(QLowEnergyService::ServiceTypes)
130
131QT_END_NAMESPACE
132
133QT_DECL_METATYPE_EXTERN_TAGGED(QLowEnergyService::ServiceError, QLowEnergyService__ServiceError,
134 Q_BLUETOOTH_EXPORT)
135QT_DECL_METATYPE_EXTERN_TAGGED(QLowEnergyService::ServiceState, QLowEnergyService__ServiceState,
136 Q_BLUETOOTH_EXPORT)
137QT_DECL_METATYPE_EXTERN_TAGGED(QLowEnergyService::ServiceType, QLowEnergyService__ServiceType,
138 Q_BLUETOOTH_EXPORT)
139QT_DECL_METATYPE_EXTERN_TAGGED(QLowEnergyService::WriteMode, QLowEnergyService__WriteMode,
140 Q_BLUETOOTH_EXPORT)
141
142#endif // QLOWENERGYSERVICE_H
143

source code of qtconnectivity/src/bluetooth/qlowenergyservice.h