#ios #bluetooth #core-bluetooth
#iOS #bluetooth #ядро-bluetooth
Вопрос:
На iOS, когда я запрашиваю MTU, я получаю разные значения для .withoutResponse
vs .withResponse
. Я понимаю, что это может быть иначе, поскольку функция принимает этот параметр, но почему это отличается?
Вот на устройстве (BLE 4.2):
(lldb) po peripheral.maximumWriteValueLength(for: .withoutResponse)
182
(lldb) po peripheral.maximumWriteValueLength(for: .withResponse)
512
На другом устройстве (BLE 5) Я получаю:
(lldb) po peripheral.maximumWriteValueLength(for: .withoutResponse)
509
(lldb) po peripheral.maximumWriteValueLength(for: .withResponse)
512
Ответ №1:
Запись без ответа напрямую связана с MTU. (MTU — 3).
При использовании writeWithResponse
iOS может либо выполнить запись с ответом (максимальная длина значения равна MTU — 3), либо «Записать длинные значения характеристик», в котором для записи значения используется несколько транзакций ATT. В последнем случае единственным ограничивающим фактором является максимальная длина значения характеристики, которая по стандарту установлена равной 512 байтам.
Комментарии:
1. Спасибо! У вас есть ссылка, в которой я могу прочитать больше? (или раздел в спецификации BLE) Что именно в указании «ответа» имеет значение.
2. Просто прочитайте главу GATT, например, раздел 4.9.4.