Я экспериментирую с Bluetooth LE с GATT, и я столкнулся с проблемой, с которой мне нужна ваша помощь.Устройство BLE не может отправить несколько уведомлений GATT в строке
Я отправляю данные между клиентом (одно приложение для Android и одно приложение для iOS) и сервер (в настоящее время выполняется Bleno).
Я выбрал архитектуру с одной характеристикой (которая, как я думаю, является Socket), и я пишу Запросы от нее от Клиентов. Сервер отвечает на запрос уведомлением. Уведомления могут быть только 20 байтов, поэтому мне иногда приходится разделить ответ на несколько кусков и отправлять его в виде отдельных уведомлений.
Моя проблема заключается в том, что когда я разделяю ответ на 10 кусков или больше, они никогда не получаются на Клиентах. (Для 1..9 Chunks все работает так, как ожидалось).
Я использовал HCIDump (hcidump -i hci0 -X
), чтобы проверять команды, отправленные через BLE, когда он терпит неудачу и когда он преуспевает.
Следующий вывод берется из HCIDump при отправке уведомлений успешно:
< ACL data: handle 69 flags 0x00 dlen 27
ATT: Handle notify (0x1b)
handle 0x000c
value 0x06 0x09 0x46 0x46 0x47 0x47 0x47 0x47 0x47 0x47 0x47 0x47 0x47 0x47 0x47 0x47 0x47 0x47 0x47 0x47
followed by:
> HCI Event: Number of Completed Packets (0x13) plen 5
handle 69 packets 1
(для каждого из Notification Кусков)
Следующий вывод берется из HCIDump при отсутствии для отправки уведомлений:
< ACL data: handle 68 flags 0x00 dlen 27
ATT: Handle notify (0x1b)
handle 0x000c
value 0x08 0x0a 0x46 0x46 0x47 0x47 0x47 0x47 0x47 0x47 0x47 0x47 0x47 0x47 0x47 0x47 0x47 0x47 0x47 0x47
Но я не получаю никаких «завершенных пакетов», но вместо этого просто device: disconnected
.
Мне еще предстоит выяснить, на какой стороне связи возникает ошибка. Насколько мне известно, это могут быть либо клиенты, которые не могут получить, так и Ack Notifications «быстро», потому что я слишком много запросов на стороне сервера.
Я протестировал, чтобы добавить команды Sleep() между отправкой каждого уведомления на сервере. Он работает, но чувствует себя слишком неустойчивым. Для 10 уведомлений мне понадобилась задержка в 6 мс для отправки уведомлений, для 30 уведомлений мне понадобилось 10 мс задержки.
Кто-нибудь знает, с чего начать поиск проблемы? Я рад предоставить дополнительную информацию, если это необходимо.
Примечание:
- Я протестировано и точно такое же ограничение с моим устройством Android и IOS.
К сожалению, я не могу проверить, работает это или нет, поскольку мы больше не используем Bleno. Но это звучит очень здорово. – Joakim