Почему MTU отличается для с ответом и без ответа?

#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.