BLE GATT服务器特性定义



从官方的Qt5示例开始,我写了一段很短的代码,定义了GATT服务器特性:

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);

然后我设置了服务器本身:advertisingData.setDiscoverability(QLowEnergyAdvertisingData::DiscoverabilityGeneral);advertisingData.setIncludePowerLevel(false);advertisingData.setLocalName("test");advertisingData.setServices(QList()<lt;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);

其中所有的UUID常量都只是我自己的随机UUID。它很有效,我可以发现、结合并根据自己的特点编写2字节。

我正在阅读Qt5和BLE文档,但我仍然有一些问题无法自己回答:

  • 如何定义具有较长有效载荷的特性?说一个16字节长的"字符串"数组?

  • 单个特征的最大长度是多少?

  • 所有特征的最大长度是多少?

  • localName应该加在前面的大小中吗?

我不熟悉Qt BLE库,但通常您有以下规则:

一个特性的最大长度为512字节。

没有所有特征的最大长度总和。

然而,当数值通过空中发送时也有限制:

广告数据被分为两部分,其中每个部分最大为31个字节。第一部分称为广告数据,另一部分称为扫描响应数据。默认情况下,只有第一部分以频繁的时间间隔通过空中发送,但中心可以通过发送扫描请求来请求扫描响应数据。

Qt似乎有一些库函数来构建adv数据,但您仍然必须注意最大长度。广告数据中的内部组件没有限制。

在连接状态下,在标准写入请求中最多可以写入20个字节,如果执行读取请求,则最多可以获得22个字节的响应。但协议消息也可以读取和写入"长值",但它们需要多次往返。

相关内容

  • 没有找到相关文章

最新更新