2016-06-19 1 views
0

Je joue sur cet exemple:BLE format de données du serveur GATT

https://doc-snapshots.qt.io/qt5-dev/qtbluetooth-heartrate-server-example.html

pour mieux comprendre comment configurer un serveur du GATT. L'exemple simule un profil HeartRate. Dans le détail, il crée une caractéristique avec ce descripteur de client:

const QLowEnergyDescriptorData clientConfig(QBluetoothUuid::ClientCharacteristicConfiguration, QByteArray(2, 0)); 

d'ici:

https://developer.bluetooth.org/gatt/descriptors/Pages/DescriptorViewer.aspx?u=org.bluetooth.descriptor.gatt.client_characteristic_configuration.xml

Je comprends qu'il a des notifications et des indications désactivées par défaut (en fait, je dois leur permettre de une application client pour être averti).

Ce que je ne comprends pas ce code:

quint8 currentHeartRate = 60; 
const auto heartbeatProvider = [&service, &currentHeartRate, &valueChange]() { 
    QByteArray value; 
    value.append(char(0)); // Flags that specify the format of the value. 
    value.append(char(currentHeartRate)); // Actual value. 
    QLowEnergyCharacteristic characteristic = service->characteristic(QBluetoothUuid::HeartRateMeasurement); 
    service->writeCharacteristic(characteristic, value); // Potentially causes notification. 
    ... 

Eh bien, il ajoute deux octets à la valeur de la caractéristique parce qu'il a été défini ci-dessus:

QLowEnergyCharacteristicData charData; 
charData.setUuid(QBluetoothUuid::HeartRateMeasurement); 
charData.setValue(QByteArray(2, 0)); 

mais qu'est-ce que le premier un moyen?

value.append(char(0)); // Flags that specify the format of the value. 

Je ne trouve aucune documentation sur ce "format".

Répondre

1

Le premier octet est le champ de drapeaux spécifié dans le service de fréquence cardiaque (HRS) here. Dans cet exemple, le champ flags indique que la valeur de la mesure de la fréquence cardiaque est au format uint8.

+0

J'ai généré un UUID aléatoire pour créer mon propre serveur GATT. Mais si j'essaie de définir les deux valeurs et les descripteurs comme 'QByteArray (1, 0)' pour que la charge utile ne dépasse qu'une longueur d'octets, j'obtiens: 'qt.bluetooth.bluez: attribut de type" {00002902-0000-1000- 8000-00805f9b34fb} "a une longueur invalide de 1 octet". La même chose se produit pour n'importe quel nombre d'octets mais 2. Pourquoi? Maintenant, il n'y a rien sur le profil de rythme cardiaque! – Mark

+0

00002902-0000-1000-8000-00805f9b34fb est le descripteur de configuration de caractéristique client uuid, dont la valeur est de 2 octets. Il semble que vous définissez cette valeur de descripteur. – Preeti

+0

J'ai compris! Je comprends mon erreur maintenant. – Mark