从官方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(假); advertisingData.setLocalName("测试&#34); 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 :(得分:1)
我不熟悉Qt BLE库,但通常你有这些规则:
特征的最大长度为512字节。
所有特征都没有总和的最大长度。
但是通过无线方式发送值时存在限制:
广告数据分为两部分,每部分最多31个字节。第一部分称为广告数据,另一部分称为扫描响应数据。默认情况下,只有第一部分以频繁的时间间隔通过无线方式发送,但中央可以通过发送扫描请求来请求扫描响应数据。
Qt似乎有一些库函数来构建adv数据但你必须要注意最大长度。广告数据中没有内部组件的限制。
在连接状态下,您可以在标准写入请求中写入最多20个字节,如果执行读取请求,则响应最多可以获得22个字节。但协议消息也能够读取和写入“长值”,但它们需要多次往返。