2016-08-02 139 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