Оставляет ли стек BLE отправку пакета, если ответ не получен?

107
15

Мне было интересно, если мне нужно дождаться ответа от сервера, что команда была выполнена до выполнения другой команды, или если стек BLE позаботится об этом под капотом, так сказать.

Например, я хочу написать характеристику, а затем прочитать ее. Должен ли я выполнять эти команды в тандеме или я должен ждать, когда метод обратного вызова onWriteRequest будет готов, прежде чем отправить запрос на чтение?

Если да, то вопрос о том, сколько попыток повторной отправки будет выполняться в стеке BLE, и сколько времени он ожидает ответа перед повторной отправкой пакета?

спросил(а) 2021-01-19T14:00:33+03:00 2 месяца, 3 недели назад
1
Решение
106

С протоколом GATT вы можете иметь только одну выдающуюся операцию за раз. Вы должны подождать ответа, пока не сможете отправить следующий запрос. Для Android вам, следовательно, придется ждать onCharacteristicWrite, пока вы не сможете отправить, например, запрос на чтение. Я предполагаю, что то же самое на iOS.

Стек Bluetooth отправляет пакет запроса на контроллер Bluetooth в телефоне. Контроллер Bluetooth, который реализует уровень связи, затем отправит пакет при следующей возможности (событие соединения). Если пакет не подтвержден, он повторно отправит тот же пакет, пока не будет подтвержден или не истечет время соединения (контрольный тайм-аут). Таймаут по умолчанию - 5 секунд (это было 20 секунд в более ранних версиях Android). Однако периферийное устройство может изменить значение таймаута, выдав запрос обновления параметра соединения.

ответил(а) 2021-01-19T14:00:33+03:00 2 месяца, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема