2016-08-02 135 views
0

从官方QT5例子起始I写了很短的一段代码,其限定了GATT服务器特性:BLE 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()< < 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应该在前一个大小中相加?

+0

经过一番尝试,似乎我可以发送任何长度的数据 - 我试了31个字节。在我读的一些文件中,GATT特性的最大有效载荷是22字节。因此,混淆和问题仍然有效! – Mark

回答

1

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

一个特点是具有512个字节的最大长度。

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

然而有限制时的值通过空中发送:

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

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

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

+0

感谢您的回答,非常有用。无论如何,我试图写31个字节,它的工作!如果标准读/写方法的最大长度限制为20/22,我不明白为什么这些特性的值可能高达512字节!他们已经考虑过这样的协议,以允许更长的有效载荷? – Mark