4#ifndef QLOWENERGYCONTROLLERBLUEZ_P_H
5#define QLOWENERGYCONTROLLERBLUEZ_P_H
19#include <QtCore/QList>
20#include <QtCore/QQueue>
21#include <QtBluetooth/qbluetooth.h>
22#include <QtBluetooth/qlowenergycharacteristic.h>
27#include <QtBluetooth/QBluetoothSocket>
86 int mtu()
const override;
116 struct WriteRequest {
128 bool indicationInFlight =
false;
130 struct TempClientConfigurationData {
133 : descData(dd), charValueHandle(chHndl), configHandle(coHndl) {}
140 struct ClientConfigurationData {
143 : charValueHandle(chHndl), configHandle(coHndl), configValue(
val) {}
148 bool charValueWasUpdated =
false;
153 SigningData() =
default;
165 int securityLevelValue;
166 bool encryptionChangePending;
167 bool receivedMtuExchangeRequest =
false;
169 std::shared_ptr<HciManager> hciManager;
172 QTimer *requestTimer =
nullptr;
190 int gattRequestTimeout = 20000;
192 void handleConnectionRequest();
193 void closeServerSocket();
195 bool isBonded()
const;
197 void storeClientConfigurations();
198 void restoreClientConfigurations();
200 enum SigningKeyType { LocalSigningKey, RemoteSigningKey };
201 void loadSigningDataIfNecessary(SigningKeyType keyType);
202 void storeSignCounter(SigningKeyType keyType)
const;
203 QString signingKeySettingsGroup(SigningKeyType keyType)
const;
204 QString keySettingsFilePath()
const;
207 void sendNextPendingRequest();
214 void sendReadValueRequest(
QLowEnergyHandle attributeHandle,
bool isDescriptor);
216 bool readCharacteristics);
220 void discoverServiceDescriptors(
const QBluetoothUuid &serviceUuid);
224 void processUnsolicitedReply(
const QByteArray &msg);
226 bool setSecurityLevel(
int level);
227 int securityLevel()
const;
235 void resetController();
237 void handleAdvertisingError();
239 bool checkPacketSize(
const QByteArray &packet,
int minSize,
int maxSize = -1);
244 void handleExchangeMtuRequest(
const QByteArray &packet);
245 void handleFindInformationRequest(
const QByteArray &packet);
246 void handleFindByTypeValueRequest(
const QByteArray &packet);
247 void handleReadByTypeRequest(
const QByteArray &packet);
248 void handleReadRequest(
const QByteArray &packet);
249 void handleReadBlobRequest(
const QByteArray &packet);
250 void handleReadMultipleRequest(
const QByteArray &packet);
251 void handleReadByGroupTypeRequest(
const QByteArray &packet);
252 void handleWriteRequestOrCommand(
const QByteArray &packet);
253 void handlePrepareWriteRequest(
const QByteArray &packet);
254 void handleExecuteWriteRequest(
const QByteArray &packet);
259 using ElemWriter = std::function<
void(
const Attribute &,
char *&)>;
266 void sendNextIndication();
269 const std::function<
int(
const Attribute &)> &
getSize);
273 using AttributePredicate = std::function<bool(
const Attribute &)>;
276 const AttributePredicate &attributePredicate = [](
const Attribute &) {
return true; });
286 void updateLocalAttributeValue(
292 void writeCharacteristicForPeripheral(
301 void writeDescriptorForPeripheral(
306 void writeDescriptorForCentral(
311 void restartRequestTimer();
312 void establishL2cpClientSocket();
313 void createServicesForCentralIfRequired();
316 void l2cpConnected();
317 void l2cpDisconnected();
319 void l2cpReadyRead();
321 void handleGattRequestTimeout();
322 void activeConnectionTerminationDone();
SocketError
This enum describes Bluetooth socket error types.
The QLowEnergyAdvertisingData class represents the data to be broadcast during Bluetooth Low Energy a...
The QLowEnergyAdvertisingParameters class represents the parameters used for Bluetooth Low Energy adv...
PropertyType
This enum describes the properties of a characteristic.
The QLowEnergyConnectionParameters class is used when requesting or reporting an update of the parame...
void discoverServiceDetails(const QBluetoothUuid &service, QLowEnergyService::DiscoveryMode mode) override
QList< Attribute > localAttributes
void discoverServices() override
void readCharacteristic(const QSharedPointer< QLowEnergyServicePrivate > service, const QLowEnergyHandle charHandle) override
void writeCharacteristic(const QSharedPointer< QLowEnergyServicePrivate > service, const QLowEnergyHandle charHandle, const QByteArray &newValue, QLowEnergyService::WriteMode mode) override
Writes long (prepare write request), short (write request) and writeWithoutResponse characteristic va...
void writeDescriptor(const QSharedPointer< QLowEnergyServicePrivate > service, const QLowEnergyHandle charHandle, const QLowEnergyHandle descriptorHandle, const QByteArray &newValue) override
QLowEnergyControllerPrivateBluez()
void stopAdvertising() override
void startAdvertising(const QLowEnergyAdvertisingParameters ¶ms, const QLowEnergyAdvertisingData &advertisingData, const QLowEnergyAdvertisingData &scanResponseData) override
void connectToDevice() override
~QLowEnergyControllerPrivateBluez() override
void disconnectFromDevice() override
void readDescriptor(const QSharedPointer< QLowEnergyServicePrivate > service, const QLowEnergyHandle charHandle, const QLowEnergyHandle descriptorHandle) override
void addToGenericAttributeList(const QLowEnergyServiceData &service, QLowEnergyHandle startHandle) override
void requestConnectionUpdate(const QLowEnergyConnectionParameters ¶ms) override
The QLowEnergyServiceData class is used to set up GATT service data. \inmodule QtBluetooth.
DiscoveryMode
This enum lists service discovery modes.
WriteMode
This enum describes the mode to be used when writing a characteristic value.
\macro QT_RESTRICTED_CAST_FROM_ASCII
Combined button and popup list for selecting options.
DBusConnection const char DBusError DBusBusType DBusError return DBusConnection DBusHandleMessageFunction void DBusFreeFunction return DBusConnection return DBusConnection return const char DBusError return DBusConnection DBusMessage dbus_uint32_t return DBusConnection dbus_bool_t DBusConnection DBusAddWatchFunction DBusRemoveWatchFunction DBusWatchToggledFunction void DBusFreeFunction return DBusConnection DBusDispatchStatusFunction void DBusFreeFunction DBusTimeout return DBusTimeout return DBusWatch return DBusWatch unsigned int return DBusError const DBusError return const DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessageIter int const void return DBusMessageIter DBusMessageIter return DBusMessageIter void DBusMessageIter void int return DBusMessage DBusMessageIter return DBusMessageIter return DBusMessageIter DBusMessageIter const char const char const char const char return DBusMessage return DBusMessage const char return DBusMessage dbus_bool_t return DBusMessage dbus_uint32_t return DBusMessage void
EGLOutputLayerEXT EGLint EGLAttrib value
[5]
void registerQLowEnergyControllerMetaType()
GLsizei const GLfloat * v
[13]
GLuint64 GLenum void * handle
GLenum GLuint GLint level
GLuint GLsizei const GLchar * message
GLenum GLuint GLintptr offset
GLfloat GLfloat GLfloat GLfloat h
static QSize getSize(QTextDocument *doc, const QTextImageFormat &format)
#define Q_DECLARE_TYPEINFO(TYPE, FLAGS)
unsigned long long quint64
QNetworkRequest request(url)
QLowEnergyHandle groupEndHandle
QBluetooth::AttAccessConstraints readConstraints
QBluetooth::AttAccessConstraints writeConstraints
QLowEnergyCharacteristic::PropertyTypes properties