2016-08-02 35 views
0

Ausgehend von offiziellen QT5 Beispielen, die ich ein sehr kurzes Stück Code geschrieben, der ein GATT-Server Merkmal definiert:BLE GATT-Server Eigenschaften Definitionen

QLowEnergyCharacteristicData chrCommand; 
chrCommand.setUuid(UUID_CHR_COMMAND); 
chrCommand.setValue(QByteArray(2, 0)); 
chrCommand.setProperties(QLowEnergyCharacteristic::Write); 
const QLowEnergyDescriptorData clientConfigCommand(QBluetoothUuid::ClientCharacteristicConfiguration, QByteArray(2, 0)); 
chrCommand.addDescriptor(clientConfigCommand); 

Dann gründe ich den Server selbst: advertisingData.setDiscoverability (QLowEnergyAdvertisingData: : AuffindbarkeitGeneral); advertisingData.setIncludePowerLevel (false); advertisingData.setLocalName ("test"); advertisingData.setServices (QList() < < UUID_ADV_MIRROR);

QLowEnergyServiceData srvService; 
srvService.setType(QLowEnergyServiceData::ServiceTypePrimary); 
srvService.setUuid(UUID_SRV_SERVICE); 
srvService.addCharacteristic(chrCommand); 

leController = QLowEnergyController::createPeripheral(); 
service = leController->addService(srvService); 
leController->startAdvertising(QLowEnergyAdvertisingParameters(), advertisingData, advertisingData); 

Wo alle UUIDs Konstanten sind nur meine eigenen zufälligen UUIDs. Es funktioniert und ich kann die 2-Bytes zu meinem Merkmal entdecken, verbinden und schreiben.

lese ich beide durch die QT5 und BLE Dokumentationen, aber ich habe noch ein paar Fragen, die ich nicht von mir selbst beantworten kann:

  • wie ein Merkmal mit mehr Nutzlast definieren? Sprich ein 16 Byte langes "String" -Array?

  • Was ist die maximale Länge eines einzelnen Merkmals?

  • Wie ist die maximale Länge aller Merkmale?

  • Der localName sollte in der vorherigen Größe summiert werden?

+0

Nach einigen Versuchen scheint es, ich kann Daten beliebiger Länge senden - ich habe versucht, bis zu 31 Bytes. In einigen Dokumenten lese ich die maximale Nutzlast eines GATT-Merkmals ist 22 Bytes. Somit sind die Verwirrung und die Fragen immer noch gültig! – Mark

Antwort

1

Ich bin nicht mit der Qt-Bibliothek BLE vertraut aber in der Regel haben Sie diese Regeln:

Ein Merkmal eine maximale Länge von 512 Byte.

Es gibt keine summierte maximale Länge aller Merkmale.

Es gibt jedoch Grenzen, wenn Werte über die Luft gesendet werden:

Die Werbedaten in zwei Teile unterteilt ist, wobei jedes Teil max beträgt 31 Byte. Der erste Teil heißt Werbedaten und der andere Teil heißt Scan-Antwortdaten. Standardmäßig wird nur der erste Teil mit häufigen Zeitintervallen über Funk gesendet. Ein zentraler Benutzer kann jedoch nach den Scan-Antwortdaten fragen, indem er eine Scan-Anfrage sendet.

Qt scheint eine Bibliotheksfunktion zu haben, um die adv-Daten zu erstellen, aber Sie müssen immer noch auf die maximale Länge achten. Es gibt keine Einschränkung der internen Komponenten in den Werbedaten.

In einem verbundenen Zustand können Sie in einer Standardschreibanforderung bis zu 20 Byte schreiben, und wenn Sie eine Leseanforderung ausführen, können Sie maximal 22 Byte als Antwort erhalten. Aber die Protokoll-Nachrichten können auch "lange Werte" lesen und schreiben, erfordern aber mehrere Rundreisen.

+0

Danke für die Antwort, sehr nützlich. Jedenfalls habe ich versucht, 31 Bytes zu schreiben und es hat funktioniert! Ich verstehe nicht, warum die Eigenschaften Werte von bis zu 512 Bytes haben können, wenn die maximale Länge der Standard-Lese-/Schreibmethoden auf 20/22 begrenzt ist! Sie hatten bereits ein solches Protokoll in Planung, um längere Nutzlasten zu ermöglichen? – Mark