Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
Loading...
Searching...
No Matches
qlowenergycontroller_winrt_p.h
Go to the documentation of this file.
1// Copyright (C) 2017 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4#ifndef QLOWENERGYCONTROLLERPRIVATEWINRT_P_H
5#define QLOWENERGYCONTROLLERPRIVATEWINRT_P_H
6
7//
8// W A R N I N G
9// -------------
10//
11// This file is not part of the Qt API. It exists purely as an
12// implementation detail. This header file may change from version to
13// version without notice, or even be removed.
14//
15// We mean it.
16//
17
18#include <qglobal.h>
19#include <QtCore/QList>
20#include <QtCore/QQueue>
21#include <QtBluetooth/qbluetooth.h>
22#include <QtBluetooth/qlowenergycharacteristic.h>
23#include <QtBluetooth/qlowenergyservicedata.h>
26
27namespace ABI {
28 namespace Windows {
29 namespace Devices {
30 namespace Bluetooth {
31 struct IBluetoothLEDevice;
32 }
33 }
34 namespace Foundation {
35 template <typename T> struct IAsyncOperation;
36 enum class AsyncStatus;
37 }
38 }
39}
40
41#include <wrl.h>
42#include <windows.devices.bluetooth.genericattributeprofile.h>
43
44#include <functional>
45
47
49class QTimer;
50
52
54{
56public:
59
60 void init() override;
61
62 void connectToDevice() override;
63 void disconnectFromDevice() override;
64
65 void discoverServices() override;
66 void discoverServiceDetails(const QBluetoothUuid &service,
68
70 const QLowEnergyAdvertisingData &advertisingData,
71 const QLowEnergyAdvertisingData &scanResponseData) override;
72 void stopAdvertising() override;
73
75
76 // read data
77 void readCharacteristic(const QSharedPointer<QLowEnergyServicePrivate> service,
78 const QLowEnergyHandle charHandle) override;
79 void readDescriptor(const QSharedPointer<QLowEnergyServicePrivate> service,
80 const QLowEnergyHandle charHandle,
81 const QLowEnergyHandle descriptorHandle) override;
82
83 // write data
84 void writeCharacteristic(const QSharedPointer<QLowEnergyServicePrivate> service,
85 const QLowEnergyHandle charHandle,
86 const QByteArray &newValue, QLowEnergyService::WriteMode mode) override;
87 void writeDescriptor(const QSharedPointer<QLowEnergyServicePrivate> service,
88 const QLowEnergyHandle charHandle,
89 const QLowEnergyHandle descriptorHandle,
90 const QByteArray &newValue) override;
91
93 QLowEnergyHandle startHandle) override;
94
95 int mtu() const override;
96
98 void characteristicChanged(quint16 charHandle, const QByteArray &data);
100
101private slots:
102 void handleCharacteristicChanged(quint16 charHandle, const QByteArray &data);
103 void handleServiceHandlerError(const QString &error);
104
105private:
106 void handleConnectionError(const char *logMessage);
107
110 mGattSession;
111 EventRegistrationToken mStatusChangedToken;
112 EventRegistrationToken mMtuChangedToken;
113 struct ValueChangedEntry {
114 ValueChangedEntry() {}
116 EventRegistrationToken t)
117 : characteristic(c)
118 , token(t)
119 {
120 }
121
123 EventRegistrationToken token;
124 };
125 QList<ValueChangedEntry> mValueChangedTokens;
126
128 QMap<QBluetoothUuid, GattDeviceServiceComPtr> m_openedServices;
129 QSet<QBluetoothUuid> m_requestDetailsServiceUuids;
130
131 using NativeServiceCallback = std::function<void(GattDeviceServiceComPtr)>;
132 HRESULT getNativeService(const QBluetoothUuid &serviceUuid, NativeServiceCallback callback);
133
135 using NativeCharacteristicCallback = std::function<void(GattCharacteristicComPtr)>;
136 HRESULT getNativeCharacteristic(const QBluetoothUuid &serviceUuid,
137 const QBluetoothUuid &charUuid,
138 NativeCharacteristicCallback callback);
139
140 void registerForValueChanges(const QBluetoothUuid &serviceUuid, const QBluetoothUuid &charUuid);
141 void unregisterFromValueChanges();
142 HRESULT onValueChange(ABI::Windows::Devices::Bluetooth::GenericAttributeProfile::IGattCharacteristic *characteristic,
143 ABI::Windows::Devices::Bluetooth::GenericAttributeProfile::IGattValueChangedEventArgs *args);
144 HRESULT onMtuChange(ABI::Windows::Devices::Bluetooth::GenericAttributeProfile::IGattSession *session,
145 IInspectable *args);
146 bool registerForMtuChanges();
147 void unregisterFromMtuChanges();
148
149 bool registerForStatusChanges();
150 void unregisterFromStatusChanges();
151 HRESULT onStatusChange(ABI::Windows::Devices::Bluetooth::IBluetoothLEDevice *dev, IInspectable *);
152
153 void obtainIncludedServices(QSharedPointer<QLowEnergyServicePrivate> servicePointer,
156 ABI::Windows::Foundation::AsyncStatus status);
157
158 void readCharacteristicHelper(const QSharedPointer<QLowEnergyServicePrivate> service,
159 const QLowEnergyHandle charHandle,
160 GattCharacteristicComPtr characteristic);
161 void readDescriptorHelper(const QSharedPointer<QLowEnergyServicePrivate> service,
162 const QLowEnergyHandle charHandle,
163 const QLowEnergyHandle descriptorHandle,
164 GattCharacteristicComPtr characteristic);
165 void writeCharacteristicHelper(const QSharedPointer<QLowEnergyServicePrivate> service,
166 const QLowEnergyHandle charHandle, const QByteArray &newValue,
167 bool writeWithResponse,
168 GattCharacteristicComPtr characteristic);
169 void writeDescriptorHelper(const QSharedPointer<QLowEnergyServicePrivate> service,
170 const QLowEnergyHandle charHandle,
171 const QLowEnergyHandle descriptorHandle,
172 const QByteArray &newValue,
173 GattCharacteristicComPtr characteristic);
174 void discoverServiceDetailsHelper(const QBluetoothUuid &service,
176 GattDeviceServiceComPtr deviceService);
177
178 void clearAllServices();
179 void closeAndRemoveService(const QBluetoothUuid &uuid);
180};
181
183
184#endif // QLOWENERGYCONTROLLERPRIVATEWINRT_P_H
\inmodule QtBluetooth
\inmodule QtCore
Definition qbytearray.h:57
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...
The QLowEnergyConnectionParameters class is used when requesting or reporting an update of the parame...
void discoverServiceDetails(const QBluetoothUuid &service, QLowEnergyService::DiscoveryMode mode) override
void characteristicChanged(quint16 charHandle, const QByteArray &data)
void addToGenericAttributeList(const QLowEnergyServiceData &service, QLowEnergyHandle startHandle) override
void readDescriptor(const QSharedPointer< QLowEnergyServicePrivate > service, const QLowEnergyHandle charHandle, const QLowEnergyHandle descriptorHandle) override
void writeDescriptor(const QSharedPointer< QLowEnergyServicePrivate > service, const QLowEnergyHandle charHandle, const QLowEnergyHandle descriptorHandle, const QByteArray &newValue) override
void startAdvertising(const QLowEnergyAdvertisingParameters &params, const QLowEnergyAdvertisingData &advertisingData, const QLowEnergyAdvertisingData &scanResponseData) 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
void requestConnectionUpdate(const QLowEnergyConnectionParameters &params) override
QLowEnergyController::Error error
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
Definition qstring.h:129
\inmodule QtCore
Definition qtimer.h:20
Combined button and popup list for selecting options.
quint16 QLowEnergyHandle
Definition qbluetooth.h:42
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
void registerQLowEnergyControllerMetaType()
GLenum mode
GLint GLsizei GLsizei GLenum GLenum GLsizei void * data
void ** params
const GLubyte * c
GLdouble GLdouble t
Definition qopenglext.h:243
#define Q_OBJECT
#define slots
#define signals
unsigned short quint16
Definition qtypes.h:48
long HRESULT
QJSValueList args