QLowEnergyController Class
Die Klasse „QLowEnergyController“ ermöglicht den Zugriff auf Bluetooth-Low-Energy-Geräte. Mehr...
| Header: | #include <QLowEnergyController> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Bluetooth) target_link_libraries(mytarget PRIVATE Qt6::Bluetooth) |
| qmake: | QT += bluetooth |
| Erbt von: | QObject |
Öffentliche Typen
| enum | ControllerState { UnconnectedState, ConnectingState, ConnectedState, DiscoveringState, DiscoveredState, …, AdvertisingState } |
| enum | Error { NoError, UnknownError, UnknownRemoteDeviceError, NetworkError, InvalidBluetoothAdapterError, …, RssiReadError } |
| enum | RemoteAddressType { PublicAddress, RandomAddress } |
| enum | Role { CentralRole, PeripheralRole } |
Öffentliche Funktionen
| virtual | ~QLowEnergyController() |
| QLowEnergyService * | addService(const QLowEnergyServiceData &service, QObject *parent = nullptr) |
| void | connectToDevice() |
| QLowEnergyService * | createServiceObject(const QBluetoothUuid &serviceUuid, QObject *parent = nullptr) |
| void | disconnectFromDevice() |
| void | discoverServices() |
| QLowEnergyController::Error | error() const |
| QString | errorString() const |
| QBluetoothAddress | localAddress() const |
(since 6.2) int | mtu() const |
(since 6.5) void | readRssi() |
| QBluetoothAddress | remoteAddress() const |
| QLowEnergyController::RemoteAddressType | remoteAddressType() const |
| QBluetoothUuid | remoteDeviceUuid() const |
| QString | remoteName() const |
| void | requestConnectionUpdate(const QLowEnergyConnectionParameters ¶meters) |
| QLowEnergyController::Role | role() const |
| QList<QBluetoothUuid> | services() const |
| void | setRemoteAddressType(QLowEnergyController::RemoteAddressType type) |
| void | startAdvertising(const QLowEnergyAdvertisingParameters ¶meters, const QLowEnergyAdvertisingData &advertisingData, const QLowEnergyAdvertisingData &scanResponseData = QLowEnergyAdvertisingData()) |
| QLowEnergyController::ControllerState | state() const |
| void | stopAdvertising() |
Signale
| void | connected() |
| void | connectionUpdated(const QLowEnergyConnectionParameters &newParameters) |
| void | disconnected() |
| void | discoveryFinished() |
(since 6.2) void | errorOccurred(QLowEnergyController::Error newError) |
| void | mtuChanged(int mtu) |
(since 6.5) void | rssiRead(qint16 rssi) |
| void | serviceDiscovered(const QBluetoothUuid &newService) |
| void | stateChanged(QLowEnergyController::ControllerState state) |
Statische öffentliche Mitglieder
| QLowEnergyController * | createCentral(const QBluetoothDeviceInfo &remoteDevice, QObject *parent = nullptr) |
| QLowEnergyController * | createCentral(const QBluetoothDeviceInfo &remoteDevice, const QBluetoothAddress &localDevice, QObject *parent = nullptr) |
| QLowEnergyController * | createPeripheral(QObject *parent = nullptr) |
(since 6.2) QLowEnergyController * | createPeripheral(const QBluetoothAddress &localDevice, QObject *parent = nullptr) |
Ausführliche Beschreibung
QLowEnergyController dient als Einstiegspunkt für die Entwicklung von Bluetooth Low Energy.
Bluetooth Low Energy definiert zwei Arten von Geräten: das Peripheriegerät und das Zentralgerät. Jede Rolle erfüllt eine andere Aufgabe. Das Peripheriegerät liefert Daten, die von Zentralgeräten genutzt werden. Ein Beispiel hierfür wäre ein Feuchtigkeitssensor, der die Luftfeuchtigkeit in einem Wintergarten misst. Ein Gerät wie ein Mobiltelefon könnte den Sensorwert auslesen und ihn dem Benutzer im Gesamtkontext aller Sensoren in derselben Umgebung anzeigen. In diesem Fall ist der Sensor das Peripheriegerät und das Mobiltelefon fungiert als Zentralgerät.
Ein Controller in der zentralen Rolle wird über die Factory-Methode ` createCentral()` erstellt. Ein solches Objekt fungiert im Wesentlichen als Platzhalter für ein entferntes Low-Energy-Peripheriegerät und ermöglicht Funktionen wie Service-Erkennung und Statusverfolgung.
Nachdem ein Controller-Objekt in der zentralen Rolle erstellt wurde, besteht der erste Schritt darin, über ` connectToDevice()` eine Verbindung herzustellen. Sobald die Verbindung hergestellt ist, ändert sich der Status des Controllers von ` state()` zu ` QLowEnergyController::ConnectedState `, und das Signal ` connected()` wird ausgesendet. Es ist wichtig zu erwähnen, dass einige Plattformen, wie beispielsweise ein BlueZ-basiertes Linux, nicht zwei verbundene Instanzen von ` QLowEnergyController ` mit demselben Remote-Gerät aufrechterhalten können. In solchen Fällen kann der zweite Aufruf von ` connectToDevice()` fehlschlagen. Diese Einschränkung könnte in Zukunft beseitigt werden. Die Funktion ` disconnectFromDevice()` wird verwendet, um die bestehende Verbindung zu trennen.
Der zweite Schritt nach dem Aufbau der Verbindung besteht darin, die vom entfernten Peripheriegerät angebotenen Dienste zu ermitteln. Dieser Vorgang wird über ` discoverServices()` gestartet und ist abgeschlossen, sobald das Signal ` discoveryFinished()` ausgegeben wurde. Die ermittelten Dienste können über ` services()` aufgelistet werden.
Der letzte Schritt besteht darin, Dienstobjekte zu erstellen. Die Funktion ` createServiceObject()` fungiert als Factory für jedes Dienstobjekt und erwartet die Dienst-UUID als Parameter. Der aufrufende Kontext sollte die Verantwortung für die zurückgegebene ` QLowEnergyService `-Instanz übernehmen.
Jede Instanz von ` QLowEnergyService`, ` QLowEnergyCharacteristic ` oder ` QLowEnergyDescriptor `, die später aus der Verbindung dieses Controllers erstellt wird, wird ungültig, sobald der Controller die Verbindung zum entfernten Bluetooth-Low-Energy-Gerät trennt.
Ein Controller in der Peripherie-Rolle wird über die Factory-Methode ` createPeripheral()` erstellt. Ein solches Objekt fungiert selbst als Peripheriegerät, ermöglicht Funktionen wie das Anbieten von Diensten und ermöglicht es Clients, über Änderungen an Merkmalswerten benachrichtigt zu werden.
Nachdem ein Controller-Objekt in der Peripherie-Rolle erstellt wurde, besteht der erste Schritt darin, die Reihe der GATT-Dienste, die Client-Geräten angeboten werden, durch Aufrufe von ` addService()` zu füllen. Anschließend würde man ` startAdvertising()` aufrufen, um das Gerät einige Daten senden zu lassen und – je nach Art der durchgeführten Werbung – auch auf eingehende Verbindungen von GATT-Clients zu warten.
Siehe auch QLowEnergyService, QLowEnergyCharacteristic, QLowEnergyDescriptor, QLowEnergyAdvertisingParameters und QLowEnergyAdvertisingData.
Dokumentation zu Mitgliedstypen
enum QLowEnergyController::ControllerState
Gibt den Status des Controller-Objekts an.
| Konstante | Wert | Beschreibung |
|---|---|---|
QLowEnergyController::UnconnectedState | 0 | Der Controller ist nicht mit einem Remote-Gerät verbunden. |
QLowEnergyController::ConnectingState | 1 | Der Controller versucht, eine Verbindung zu einem Remote-Gerät herzustellen. |
QLowEnergyController::ConnectedState | 2 | Der Controller ist mit einem Remote-Gerät verbunden. |
QLowEnergyController::DiscoveringState | 3 | Der Controller ruft die Liste der vom Remote-Gerät angebotenen Dienste ab. |
QLowEnergyController::DiscoveredState | 4 | Der Controller hat alle vom Remote-Gerät angebotenen Dienste erkannt. |
QLowEnergyController::ClosingState | 5 | Die Verbindung des Controllers zum Remote-Gerät wird in Kürze getrennt. |
QLowEnergyController::AdvertisingState (since Qt 5.7) | 6 | Der Controller sendet derzeit Daten aus. |
enum QLowEnergyController::Error
Zeigt alle möglichen Fehlerzustände an, die während der Lebensdauer des Controllers festgestellt wurden.
| Konstante | Wert | Beschreibung |
|---|---|---|
QLowEnergyController::NoError | 0 | Es ist kein Fehler aufgetreten. |
QLowEnergyController::UnknownError | 1 | Es ist ein unbekannter Fehler aufgetreten. |
QLowEnergyController::UnknownRemoteDeviceError | 2 | Das entfernte Bluetooth-Low-Energy-Gerät mit der an den Konstruktor dieser Klasse übergebenen Adresse kann nicht gefunden werden. |
QLowEnergyController::NetworkError | 3 | Der Versuch, vom Remote-Gerät zu lesen oder darauf zu schreiben, ist fehlgeschlagen. |
QLowEnergyController::InvalidBluetoothAdapterError | 4 | Das lokale Bluetooth-Gerät mit der an den Konstruktor dieser Klasse übergebenen Adresse kann nicht gefunden werden oder es ist kein lokales Bluetooth-Gerät vorhanden. |
QLowEnergyController::ConnectionError (since Qt 5.5) | 5 | Der Versuch, eine Verbindung zum Remote-Gerät herzustellen, ist fehlgeschlagen. |
QLowEnergyController::AdvertisingError (since Qt 5.7) | 6 | Der Versuch, die Werbung zu starten, ist fehlgeschlagen. |
QLowEnergyController::RemoteHostClosedError (since Qt 5.10) | 7 | Das Remote-Gerät hat die Verbindung geschlossen. |
QLowEnergyController::AuthorizationError (since Qt 5.14) | 8 | Das lokale Bluetooth-Gerät hat die Verbindung aufgrund unzureichender Berechtigungen geschlossen. |
QLowEnergyController::MissingPermissionsError (since Qt 6.4) | 9 | Das Betriebssystem fordert Berechtigungen an, die vom Benutzer nicht erteilt wurden. |
QLowEnergyController::RssiReadError (since Qt 6.5) | 10 | Ein Versuch, den RSSI-Wert (Received Signal Strength Indicator) eines Remote-Geräts auszulesen, ist fehlgeschlagen. |
enum QLowEnergyController::RemoteAddressType
Gibt an, welche Art von Bluetooth-Adresse das Remote-Gerät verwendet.
| Konstante | Wert | Beschreibung |
|---|---|---|
QLowEnergyController::PublicAddress | 0 | Das Remote-Gerät verwendet eine öffentliche Bluetooth-Adresse. |
QLowEnergyController::RandomAddress | 1 | Eine zufällige Adresse ist eine Sicherheitsfunktion von Bluetooth Low Energy. Peripheriegeräte, die solche Adressen verwenden, können ihre Bluetooth-Adresse häufig ändern. Diese Information wird benötigt, wenn versucht wird, eine Verbindung zu einem Peripheriegerät herzustellen. |
enum QLowEnergyController::Role
Gibt die Rolle des Controller-Objekts an.
| Konstante | Wert | Beschreibung |
|---|---|---|
QLowEnergyController::CentralRole | 0 | Der Controller fungiert als Client, der mit einem Remote-Gerät interagiert, das die Peripherie-Rolle einnimmt. Der Controller kann Verbindungen initiieren, Dienste erkennen sowie Merkmale lesen und schreiben. |
QLowEnergyController::PeripheralRole | 1 | Der Controller kann verwendet werden, um Dienste anzubieten und eingehende Verbindungen sowie Client-Anfragen zu bearbeiten, wobei er als GATT-Server fungiert. Ein mit dem Controller verbundenes Remote-Gerät nimmt die Rolle des Zentralgeräts ein. Hinweis: Die Peripherie-Rolle wird unter Windows nicht unterstützt. Unter Linux erfordert die serverseitige Verarbeitung des ATT-Befehls „Signed Write“ außerdem BlueZ 5 und eine Kernel-Version 3.7 oder höher. |
Siehe auch QLowEnergyController::createCentral() und QLowEnergyController::createPeripheral().
Dokumentation zu den Member-Funktionen
[virtual noexcept] QLowEnergyController::~QLowEnergyController()
Löscht die Instanz von „ QLowEnergyController “.
QLowEnergyService *QLowEnergyController::addService(const QLowEnergyServiceData &service, QObject *parent = nullptr)
Erstellt und gibt ein „ QLowEnergyService “-Objekt mit „ parent “ aus „ service “ zurück. Der Controller muss sich im „ PeripheralRole “ und im „ UnconnectedState “ befinden. Das „ service “-Objekt muss gültig sein.
Hinweis: Sobald die Peripherie-Instanz vom entfernten zentralen Gerät getrennt wird oder wenn disconnectFromDevice() manuell aufgerufen wird, werden alle Dienstdefinitionen, die zuvor über diese Funktion hinzugefügt wurden, aus der Peripherie entfernt. Daher muss diese Funktion erneut aufgerufen werden, bevor diese Peripherie-Controller-Instanz erneut bekannt gegeben wird. Das beschriebene Verhalten ist verbindungsspezifisch und hängt daher nicht davon ab, ob stopAdvertising() aufgerufen wurde.
Siehe auch stopAdvertising(), disconnectFromDevice() und QLowEnergyServiceData::addIncludedService.
void QLowEnergyController::connectToDevice()
Stellt eine Verbindung zum entfernten Bluetooth-Low-Energy-Gerät her.
Diese Funktion führt keine Aktion aus, wenn der Wert von „ state()“ des Controllers nicht „ UnconnectedState “ ist. Das Signal „ connected()“ wird ausgegeben, sobald die Verbindung erfolgreich hergestellt wurde.
Auf Linux/BlueZ-Systemen ist es nicht möglich, mit zwei Instanzen dieser Klasse eine Verbindung zum selben Remote-Gerät herzustellen. Der zweite Aufruf dieser Funktion schlägt möglicherweise mit einem Fehler fehl. Diese Einschränkung wird möglicherweise in zukünftigen Versionen aufgehoben.
Siehe auch ` disconnectFromDevice()`.
[signal] void QLowEnergyController::connected()
Dieses Signal wird gesendet, wenn der Controller erfolgreich eine Verbindung zu einem entfernten Low-Energy-Gerät herstellt (sofern sich der Controller im Modus „ CentralRole “ befindet) oder wenn ein entferntes Low-Energy-Gerät mit dem Controller verbunden ist (sofern sich der Controller im Modus „ PeripheralRole “ befindet). Unter iOS, macOS und Android ist dieses Signal nicht zuverlässig, wenn sich der Controller im Modus „ PeripheralRole “ befindet. Unter iOS und macOS geht der Controller erst dann davon aus, dass ein Central mit unserem Peripheriegerät verbunden ist, sobald dieses Central versucht, eine Eigenschaft oder einen Deskriptor zu schreiben oder zu lesen. Unter Android überwacht der Controller alle verbundenen GATT-Geräte. Beim Linux-BlueZ-DBus-Peripherie-Backend gilt die Fernbedienung als verbunden, sobald sie zum ersten Mal eine Eigenschaft oder einen Deskriptor liest oder schreibt.
[signal] void QLowEnergyController::connectionUpdated(const QLowEnergyConnectionParameters &newParameters)
Dieses Signal wird ausgelöst, wenn sich die Verbindungsparameter ändern. Dies kann durch den Aufruf von ` requestConnectionUpdate()` oder aus anderen Gründen geschehen, beispielsweise weil die Gegenstelle der Verbindung neue Parameter angefordert hat. Die neuen Werte können über ` newParameters` abgerufen werden.
Siehe auch requestConnectionUpdate().
[static] QLowEnergyController *QLowEnergyController::createCentral(const QBluetoothDeviceInfo &remoteDevice, QObject *parent = nullptr)
Gibt ein neues Objekt dieser Klasse zurück, das sich im „ CentralRole “ befindet und dessen übergeordnetes Objekt „ parent “ ist. „ remoteDevice “ bezieht sich auf das Gerät, zu dem später eine Verbindung hergestellt wird.
Der Controller verwendet den lokalen Standard-Bluetooth-Adapter für die Verbindungsverwaltung.
Siehe auch „ QLowEnergyController::CentralRole “.
[static] QLowEnergyController *QLowEnergyController::createCentral(const QBluetoothDeviceInfo &remoteDevice, const QBluetoothAddress &localDevice, QObject *parent = nullptr)
Gibt eine neue Instanz dieser Klasse mit dem Parameter „ parent “ zurück.
remoteDevice muss die Adresse des entfernten Bluetooth-Low-Energy-Geräts enthalten, mit dem dieses Objekt später eine Verbindung herstellen soll.
Die Verbindung wird über ` localDevice` hergestellt. Ist ` localDevice ` ungültig, wird automatisch das lokale Standardgerät ausgewählt. Wenn ` localDevice ` ein lokales Gerät angibt, bei dem es sich nicht um einen lokalen Bluetooth-Adapter handelt, wird ` error()` auf ` InvalidBluetoothAdapterError ` gesetzt, sobald ` connectToDevice()` aufgerufen wird.
Beachten Sie, dass die Angabe des für die Verbindung zu verwendenden lokalen Geräts nur bei Verwendung von BlueZ möglich ist. Alle anderen Plattformen unterstützen diese Funktion nicht.
[static] QLowEnergyController *QLowEnergyController::createPeripheral(QObject *parent = nullptr)
Gibt ein neues Objekt dieser Klasse zurück, das sich im „ PeripheralRole “ befindet und das über das übergeordnete Objekt „ parent “ verfügt. In der Regel bestehen die nächsten Schritte darin, einige Dienste hinzuzufügen und schließlich die Methode „ startAdvertising()“ für das zurückgegebene Objekt aufzurufen.
Der Controller verwendet den lokalen Standard-Bluetooth-Adapter für die Verbindungsverwaltung.
Siehe auch QLowEnergyController::PeripheralRole.
[static, since 6.2] QLowEnergyController *QLowEnergyController::createPeripheral(const QBluetoothAddress &localDevice, QObject *parent = nullptr)
Gibt ein neues Objekt dieser Klasse zurück, das sich im „ PeripheralRole “ befindet, das „ parent “ als übergeordnetes Objekt hat und „ localDevice “ verwendet. In der Regel bestehen die nächsten Schritte darin, einige Dienste hinzuzufügen und schließlich die Methode „ startAdvertising()“ für das zurückgegebene Objekt aufzurufen.
Das Peripheriegerät wird unter „ localDevice “ angelegt. Ist „ localDevice “ ungültig, wird automatisch das lokale Standardgerät ausgewählt. Wenn „ localDevice “ ein lokales Gerät angibt, bei dem es sich nicht um einen lokalen Bluetooth-Adapter handelt, wird „ error()“ auf „ InvalidBluetoothAdapterError “ gesetzt.
Die Auswahl von „ localDevice “ wird nur unter Linux unterstützt. Auf anderen Plattformen wird der Parameter ignoriert.
Diese Funktion wurde in Qt 6.2 eingeführt.
Siehe auch „ QLowEnergyController::PeripheralRole “.
QLowEnergyService *QLowEnergyController::createServiceObject(const QBluetoothUuid &serviceUuid, QObject *parent = nullptr)
Erstellt eine Instanz des Dienstes, der durch „ serviceUuid “ repräsentiert wird. Der Parameter „ serviceUuid “ muss zuvor über „ services()“ abgerufen worden sein.
Der Aufrufer übernimmt die Verantwortung für den zurückgegebenen Zeiger und kann einen „ parent “-Parameter als Standardbesitzer übergeben.
Diese Funktion gibt einen Nullzeiger zurück, wenn auf dem Remote-Gerät kein Dienst mit serviceUuid gefunden werden kann oder die Verbindung zum Controller unterbrochen ist.
Diese Funktion kann auch Instanzen für sekundäre Dienste zurückgeben. Die Einbindungsbeziehungen zwischen Diensten können über ` QLowEnergyService::includedServices()` ausgedrückt werden.
Wird diese Funktion mehrfach mit derselben Dienst-UUID aufgerufen, teilen sich die zurückgegebenen „ QLowEnergyService “-Instanzen ihre internen Daten. Wenn also eine der Instanzen die Ermittlung der Dienstdetails initiiert, wechseln die anderen Instanzen automatisch ebenfalls in den Ermittlungszustand.
Siehe auch ` services()`.
void QLowEnergyController::disconnectFromDevice()
Trennt die Verbindung zum Remote-Gerät.
Alle Instanzen von ` QLowEnergyService`, ` QLowEnergyCharacteristic ` oder ` QLowEnergyDescriptor `, die aus der aktuellen Verbindung entstanden sind, werden automatisch ungültig. Sobald eines dieser Objekte ungültig wird, bleibt es ungültig, auch wenn dieses Controller-Objekt die Verbindung erneut herstellt.
Diese Funktion hat keine Auswirkung, wenn sich der Controller im Zustand „ UnconnectedState “ befindet.
Befindet sich der Controller in der Peripherie-Rolle, beendet er die Bekanntgabe und entfernt alle Dienste, die zuvor über ` addService()` hinzugefügt wurden. Um die ` QLowEnergyController `-Instanz wiederverwenden zu können, muss die Anwendung die Dienste erneut hinzufügen und den Bekanntgabemodus durch Aufruf von ` startAdvertising()` neu starten.
Siehe auch ` connectToDevice()`.
[signal] void QLowEnergyController::disconnected()
Dieses Signal wird ausgesendet, wenn die Steuerung die Verbindung zum Low-Energy-Fernbedienungsgerät trennt oder umgekehrt. Unter iOS und macOS ist dieses Signal unzuverlässig, wenn sich die Steuerung im „ PeripheralRole “ befindet. Unter Android wird das Signal ausgesendet, wenn die Verbindung zum zuletzt verbundenen Gerät getrennt wird. Beim BlueZ-DBus-Backend gilt die Steuerung als getrennt, wenn der letzte Client, der auf die Attribute zugegriffen hat, die Verbindung getrennt hat.
void QLowEnergyController::discoverServices()
Leitet den Prozess der Dienstermittlung ein.
Der Fortschritt der Erkennung wird über das Signal „ serviceDiscovered()“ angezeigt. Das Signal „ discoveryFinished()“ wird ausgesendet, sobald der Vorgang abgeschlossen ist.
Wenn die Controller-Instanz nicht verbunden ist oder der Controller die Dienstermittlung bereits durchgeführt hat, führt diese Funktion keine Aktion aus.
Hinweis: Einige Plattformen speichern die Dienstliste eines zuvor erkannten Geräts intern im Cache. Dies kann zu Problemen führen, wenn das Remote-Gerät seine Dienstliste oder deren Einschlussbaum geändert hat. Sollte dieses Verhalten ein Problem darstellen, besteht die beste Abhilfe darin, Bluetooth vorübergehend zu deaktivieren. Dies führt zu einem Zurücksetzen der Cache-Daten. Derzeit weist Android ein solches Cache-Verhalten auf.
[signal] void QLowEnergyController::discoveryFinished()
Dieses Signal wird ausgesendet, wenn die laufende Diensterkennung abgeschlossen ist. Das Signal wird nicht ausgesendet, wenn der Erkennungsprozess mit einem Fehler endet.
Dieses Signal kann nur ausgegeben werden, wenn sich der Controller im Zustand „ CentralRole “ befindet.
Siehe auch „ discoverServices()“ und „ error()“.
QLowEnergyController::Error QLowEnergyController::error() const
Gibt den zuletzt aufgetretenen Fehler oder „ NoError “ zurück.
[signal, since 6.2] void QLowEnergyController::errorOccurred(QLowEnergyController::Error newError)
Dieses Signal wird ausgelöst, wenn ein Fehler auftritt. Der Parameter „ newError “ beschreibt den aufgetretenen Fehler.
Diese Funktion wurde in Qt 6.2 eingeführt.
Siehe auch „ error()“ und „ errorString()“.
QString QLowEnergyController::errorString() const
Gibt eine textuelle Darstellung des zuletzt aufgetretenen Fehlers zurück. Die Zeichenkette wird übersetzt.
QBluetoothAddress QLowEnergyController::localAddress() const
Gibt die Adresse des lokalen Bluetooth-Adapters zurück, der für die Kommunikation verwendet wird.
Wenn bei der Erstellung dieser Klasseninstanz die Verwendung des Standardadapters angefordert wurde, zum Zeitpunkt der Erstellung jedoch kein Standardadapter vorhanden war, ist der zurückgegebene Wert „ QBluetoothAddress “ null.
Siehe auch ` QBluetoothAddress::isNull()`.
[since 6.2] int QLowEnergyController::mtu() const
Gibt die MTU-Größe zurück.
Während des Verbindungsaufbaus wird die ATT-MTU-Größe ausgehandelt. Diese Methode liefert das Ergebnis dieser Aushandlung. Sie kann in bestimmten Situationen zur Optimierung der Paketgrößen verwendet werden. Die maximale Datenmenge, die in einem einzelnen Paket übertragen werden kann, beträgt „mtu-3“ Bytes. 3 Bytes werden für den ATT-Protokoll-Header benötigt.
Vor dem Verbindungsaufbau und der MTU-Aushandlung wird der Standardwert „ 23 “ zurückgegeben.
Nicht jede Plattform gibt den MTU-Wert preis. Auf diesen Plattformen (z. B. Linux) gibt diese Funktion immer „ -1 “ zurück.
Befindet sich der Controller im Modus „ PeripheralRole “, sind möglicherweise mehrere zentrale Geräte mit ihm verbunden. In diesen Fällen gibt diese Funktion die MTU der zuletzt ausgehandelten Verbindung zurück.
Diese Funktion wurde in Qt 6.2 eingeführt.
[signal] void QLowEnergyController::mtuChanged(int mtu)
Dieses Signal wird nach einer erfolgreichen MTU-Änderung ausgesendet. „ mtu “ steht für den neuen Wert.
Hinweis: Befindet sich der Controller im Modus „ PeripheralRole “, wird der MTU-Wert für jeden Client bzw. jedes zentrale Gerät individuell ausgehandelt. Daher kann dieses Signal für ein oder mehrere Geräte mehrmals hintereinander ausgegeben werden.
Siehe auch „ mtu()“.
[since 6.5] void QLowEnergyController::readRssi()
readRssi() liest den RSSI-Wert (Received Signal Strength Indicator) eines angeschlossenen Fernbedienungsgeräts aus. War der Lesevorgang erfolgreich, wird der RSSI-Wert anschließend über das Signal „ rssiRead()“ gemeldet.
Hinweis: Vor dem Aufruf von `readRssi()` muss dieser Controller mit einem Peripheriegerät verbunden sein. Dieser Controller muss mit ` createCentral()` erstellt worden sein.
Hinweis: Falls das von Ihnen verwendete Bluetooth-Backend das Auslesen des RSSI nicht unterstützt, wird das Signal „ errorOccurred()“ mit dem Fehlercode „ QLowEnergyController::RssiReadError “ ausgelöst. Derzeit unterstützen unter anderem Android, iOS und macOS das Auslesen des RSSI.
Diese Funktion wurde in Qt 6.5 eingeführt.
Siehe auch „ rssiRead()“, „ connectToDevice()“, „ state()“, „ createCentral()“ und „ errorOccurred()“.
QBluetoothAddress QLowEnergyController::remoteAddress() const
Gibt die Adresse des entfernten Bluetooth-Low-Energy-Geräts zurück.
Bei einem Controller im „ CentralRole “ entspricht dieser Wert immer dem Wert, der bei der Erstellung des Controller-Objekts übergeben wurde. Bei einem Controller im „ PeripheralRole “ ist dieser Wert eine der Adressen der derzeit verbundenen Client-Geräte. Diese Adresse ist ungültig, wenn sich der Controller derzeit nicht im „ ConnectedState “ befindet.
QLowEnergyController::RemoteAddressType QLowEnergyController::remoteAddressType() const
Gibt den Typ von ` remoteAddress()` zurück. Standardmäßig wird dieser Wert auf ` PublicAddress` initialisiert.
Siehe auch „ setRemoteAddressType()“.
QBluetoothUuid QLowEnergyController::remoteDeviceUuid() const
Gibt die eindeutige Kennung des entfernten Bluetooth-Low-Energy-Geräts zurück.
Unter macOS/iOS/tvOS stellt CoreBluetooth keine Hardware-Adressen für LE-Geräte bereit bzw. akzeptiert diese nicht; stattdessen sollen Entwickler eindeutige 128-Bit-UUIDs verwenden, die von CoreBluetooth generiert werden. Diese UUIDs bleiben für dasselbe Central-<->Peripheral-Paar konstant, und wir verwenden sie bei der Verbindung mit einem Remote-Gerät. Bei einem Controller im „ CentralRole “ entspricht dieser Wert immer dem Wert, der bei der Erstellung des Controller-Objekts übergeben wurde. Bei einem Controller im „ PeripheralRole “ ist dieser Wert ungültig.
QString QLowEnergyController::remoteName() const
Gibt den Namen des entfernten Bluetooth-Low-Energy-Geräts zurück, sofern sich der Controller im Modus „ CentralRole “ befindet. Andernfalls ist das Ergebnis nicht definiert.
void QLowEnergyController::requestConnectionUpdate(const QLowEnergyConnectionParameters ¶meters)
Fordert den Controller auf, die Verbindung gemäß parameters zu aktualisieren. Ist die Anforderung erfolgreich, wird das Signal „ connectionUpdated()“ mit den aktuellen neuen Parametern ausgegeben. Weitere Informationen zu den Verbindungsparametern finden Sie in der Klasse „ QLowEnergyConnectionParameters “.
Android erlaubt die Anpassung dieses Parametersatzes nur indirekt. Die Verbindungsparameter sind in drei Kategorien unterteilt (hohe, niedrige und ausgewogene Priorität). Jede Kategorie beinhaltet einen vorkonfigurierten Wertesatz für „ QLowEnergyConnectionParameters::minimumInterval()“, „ QLowEnergyConnectionParameters::maximumInterval()“ und „ QLowEnergyConnectionParameters::latency()“. Obwohl die Verbindungsanfrage ein asynchroner Vorgang ist, stellt Android keinen Callback bereit, der das Ergebnis der Anfrage mitteilt. Dies ist ein bekannter Android-Fehler. Aufgrund dieses Fehlers gibt Android das Signal „ connectionUpdated()“ nicht aus.
Hinweis: Derzeit ist diese Funktionalität nur im Linux-Kernel-Backend und unter Android implementiert.
Siehe auch ` connectionUpdated()`.
QLowEnergyController::Role QLowEnergyController::role() const
Gibt die Rolle zurück, in der sich dieses Controller-Objekt befindet.
Die Rolle wird beim Erstellen einer Instanz von ` QLowEnergyController ` mithilfe von ` createCentral()` oder ` createPeripheral()` festgelegt.
[signal, since 6.5] void QLowEnergyController::rssiRead(qint16 rssi)
Dieses Signal wird nach erfolgreichem Auslesen des RSSI (Received Signal Strength Indicator) für ein verbundenes Remote-Gerät ausgegeben. Der Parameter „ rssi “ gibt den neuen Wert an.
Diese Funktion wurde in Qt 6.5 eingeführt.
Siehe auch ` readRssi()`.
[signal] void QLowEnergyController::serviceDiscovered(const QBluetoothUuid &newService)
Dieses Signal wird jedes Mal gesendet, wenn ein neuer Dienst erkannt wird. Der Parameter „ newService “ enthält die UUID des gefundenen Dienstes.
Dieses Signal kann nur ausgegeben werden, wenn sich der Controller im Zustand „ CentralRole “ befindet.
Siehe auch „ discoverServices()“ und „ discoveryFinished()“.
QList<QBluetoothUuid> QLowEnergyController::services() const
Gibt die Liste der vom Remote-Gerät angebotenen Dienste zurück, sofern sich der Controller im Modus „ CentralRole “ befindet. Andernfalls ist das Ergebnis nicht definiert.
Die Liste enthält alle primären und sekundären Dienste.
Siehe auch ` createServiceObject()` ().
void QLowEnergyController::setRemoteAddressType(QLowEnergyController::RemoteAddressType type)
Legt die Remote-Adresse „ type “ fest. Der Typ ist erforderlich, um eine Verbindung zum entfernten Bluetooth-Low-Energy-Gerät herzustellen.
Dieses Attribut muss nur auf Linux/BlueZ-Systemen mit älteren Linux-Kerneln (v3.3 oder niedriger) gesetzt werden oder wenn CAP_NET_ADMIN für die ausführbare Datei nicht gesetzt ist. Der Standardwert des Attributs lautet RandomAddress.
Hinweis: Alle anderen Plattformen behandeln dieses Flag transparent, sodass Anwendungen es vollständig ignorieren können. Unter Linux wird das Adresstyp-Flag von BlueZ nicht direkt offengelegt, obwohl diese Information in einigen Anwendungsfällen erforderlich ist. Die einzige Möglichkeit, das Flag zu erkennen, besteht über die Bluetooth-Management-API des Linux-Kernels (Kernel-Version 3.4+ erforderlich). Diese API erfordert jedoch CAP_NET_ADMIN-Berechtigungen. Wenn für den lokalen Prozess „ QtBluetooth “ diese Berechtigung gesetzt ist, nutzt „ QtBluetooth “ die API. Dies setzt voraus, dass vor dem Aufruf von „ QLowEnergyController::connectToDevice()“ die Funktion „ QBluetoothDeviceDiscoveryAgent “ verwendet wurde.
Siehe auch remoteAddressType().
void QLowEnergyController::startAdvertising(const QLowEnergyAdvertisingParameters ¶meters, const QLowEnergyAdvertisingData &advertisingData, const QLowEnergyAdvertisingData &scanResponseData = QLowEnergyAdvertisingData())
Startet die Veröffentlichung der unter advertisingData und scanResponseData angegebenen Daten unter Verwendung der unter parameters festgelegten Parameter. Der Controller muss sich unter PeripheralRole befinden. Wenn unter parameters angegeben ist, dass die Veröffentlichung verbindungsfähig sein soll, beginnt diese Funktion außerdem, auf eingehende Client-Verbindungen zu warten.
Die Angabe von scanResponseData ist nicht erforderlich, da sie für bestimmte Konfigurationen von parameters nicht zutrifft. advertisingData und scanResponseData sind auf 31 Byte Nutzdaten begrenzt. Werden beispielsweise mehrere 128-Bit-UUIDs zu advertisingData hinzugefügt, enthalten die gesendeten Pakete möglicherweise nicht alle UUIDs. Die bestehende Beschränkung könnte zur Verkürzung von UUIDs geführt haben. In solchen Fällen kann scanResponseData für zusätzliche Informationen genutzt werden.
Beim BlueZ-DBus-Backend entscheidet BlueZ, ob und welche Daten in einer Scan-Antwort verwendet werden. Daher wird empfohlen, alle Advertisement-Daten im Hauptparameter „ advertisingData “ festzulegen. Sind sowohl Advertisement- als auch Scan-Antwortdaten festgelegt, haben die Scan-Antwortdaten Vorrang.
Befindet sich dieses Objekt derzeit nicht in der „ UnconnectedState “, geschieht nichts.
Siehe auch ` stopAdvertising()`.
QLowEnergyController::ControllerState QLowEnergyController::state() const
Gibt den aktuellen Status des Controllers zurück.
Siehe auch „ stateChanged()“.
[signal] void QLowEnergyController::stateChanged(QLowEnergyController::ControllerState state)
Dieses Signal wird ausgelöst, wenn sich der Zustand des Controllers ändert. Der neue „ state “ kann auch über „ state()“ abgerufen werden.
Siehe auch state().
void QLowEnergyController::stopAdvertising()
Beendet die Anzeige, falls sich dieses Objekt derzeit im Anzeigestatus befindet.
Damit diese Funktion funktioniert, muss sich der Controller im „ PeripheralRole “ befinden. Sie macht Dienste, die zuvor über ` addService()` hinzugefügt wurden, nicht ungültig.
Siehe auch „ startAdvertising()“.
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.