BLE GATT 服务器数据格式

BLE GATT server data format

我正在玩这个例子:

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

更好地了解如何配置 GATT 服务器。 该示例伪造了一个 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.

我找不到关于此 "format" 的任何文档。

第一个字节是心率服务 (HRS) 中指定的标志字段here。在这个例子中,flags字段表示心率测量值是uint8格式。