2016-06-19 2 views
0

Я играю на этом примере:BLE ГАТТ формат данных сервера

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

, чтобы лучше понять, как настроить сервер ГАТТ. Этот пример подделывает профиль HeartRate. Более подробно она создает характеристику с этим клиентом дескриптора:

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

здесь:

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

Я понимаю, что есть оба уведомления и указания по умолчанию отключена (на самом деле мне нужно, чтобы позволить им клиентское приложение для получения уведомления).

То, что я действительно не понимаю, этот код:

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. 
    ... 

Ну, он добавляет два байта значения Характерного, так как она была определена выше:

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

но то, что делает первую один означает?

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

Я не могу найти документацию об этом «формате».

ответ

1

Первый байт - это поле флагов, указанное в службе сердечного ритма (HRS) here. В этом примере поле flags указывает, что значение измерения сердечного ритма находится в формате uint8.

+0

Я создал случайный UUID, чтобы создать свой собственный сервер GATT. Но если я попытаюсь установить оба значения и дескрипторы как 'QByteArray (1, 0)', чтобы получить полезную нагрузку только одну длину байта, я получаю: 'qt.bluetooth.bluez: атрибут типа {{00002902-0000-1000- 8000-00805f9b34fb} "имеет недопустимую длину 1 байт. То же самое происходит для любых чисел байтов, но 2. Почему? Теперь нет ничего о сердечном профиле! – Mark

+0

00002902-0000-1000-8000-00805f9b34fb - это дескриптор конфигурации идентификатора клиента uuid, значение которого составляет 2 байта. Кажется, вы устанавливаете это значение дескриптора. – Preeti

+0

Получил! Теперь я понимаю свою ошибку. – Mark

Смежные вопросы