2012-06-11 26 views
5

藍牙核心規格V4.0卷。 3部分G章節4.9.3規定,爲了寫入具有響應的特徵值,使用屬性協議寫入請求過程。用響應書寫多個藍牙低功耗特徵值

藍牙核心規範V4.0第3卷部分F第3.3.2節描述,即

一旦客戶端發送請求到服務器,該客戶端應發送沒有其他請求到相同的服務器直到收到響應PDU。

我想在使用CoreBluetooth的iOS應用程序中寫入多個值和響應。我必須自己管理這個規範嗎?或者我可以簡單地使用- writeValue:forCharacteristic:type一次性寫入所有值,並且iOS管理每個請求只在前一個請求被處理後才發送?

不知何故,我猜,iOS將對其進行管理,因爲根據藍牙核心規範4.0版第3卷第F部分3.4.5.2寫響應不包含的鏈接寫入性能。然而,- peripheral:didWriteValueForCharacteristic:error方法建議iOS以某種方式記錄響應與什麼特徵相關聯。

有人可以確認或否認這一點?

+0

你想通了嗎? – chwi

+0

沒有。還沒。 :-( – Etan

回答

2

我認爲在處理CB時,你不需要擔心ATT/GATT。原因是許多使用CB的人無法訪問Bluetooth Core 4.0規範,他們也不會閱讀它們。

CB知道如何關聯這個特性的原因是協議規定每個命令和響應都是成對的。當你發送一個命令時,你會收到一個迴應。

因此,您可以多次使用writeValue,並且CB會爲您正確排隊調用,即它會在下一次寫入之前等待ATT層的響應。並且委託回調保證與寫入執行的順序相同。

+3

)您可否在您的聲明中添加一個來源?此外,藍牙核心規格版本4.0可免費供任何人在http://bluetooth.org/spec – Etan

+0

上使用您可以使用嗅探器查找空中事務被調用時的流量,而且,從邏輯上講,因爲CB不能依賴委託來存在或完成它,所以它必須處理所有的協議事務,而不用等待委託回調。需要閱讀1000頁的規格以使用CB。如果您有疑問,可以在https://devforums.apple.com/community/ios/core/cbt上提出同樣的問題 – yuklai

1

我能夠寫即 「與響應多​​個請求」

[自外圍] writeValue:valueToWrite forCharacteristic:dataPointCharacteristic類型:CBCharacteristicWriteWithResponse];

在一起 - 實際上我發送了14個 - 他們都在延遲後回覆了答覆。但是 - 寫入響應不包含寫入該特性的數據 - 例如 - 只有特性內的值在響應中無效。

似乎接近註釋「根據藍牙核心規格V4.0第3卷第F部分第3.4.5.2節,寫入響應不包含指向寫入特徵的鏈接」,不同之處僅在於[特性值],這是不正確的 - 但ios在內部負責測序。因此,使用寫入響應(即BLE確認)來連接排序邏輯以處理接下來要執行的一系列步驟似乎不可行。如果您要求BLE向外設寫入「WriteWithReponse」信息「執行任務#1」,則外設的BLE響應爲「OK!」。響應不會告訴你外設收到了消息「做任務#1」,而是像 - 是的,我明白你的意思了。我懶得重複你發給我的確切命令 :)