Я пытаюсь создать передачу данных между пользовательским периферийным устройством BLE и коммуникационной библиотекой Android, реализованной с помощью RxAndroidBle (1.4.1). У меня он работает с MTU по умолчанию (23 байта), так что Android передает только 20 байт за раз. Связь работает с MTU 23, но хотелось бы более быстрой связи.
Наше устройство поддерживает DLE и запрашивает больший MTU (158 байт) в начале связи и получает его практически со всеми мобильными телефонами. После этого устройство начинает отправлять данные размером до 155 байт за раз. Из-за этого связь между устройством и мобильным телефоном достаточно быстрая и работает нормально. Однако на стороне Android вызов getMtu() RxAndroidBle всегда возвращает 23 (даже если библиотека и тестовое приложение были созданы с minsdk = 21 и работают на Android 7.1.1). Я попытался добавить вызов RxBleConnection.requestMtu(512) после установления соединения, но это не приводит к обратным вызовам, а getMtu() по-прежнему возвращает 23.
Я попробовал это, просто вызывая setMaxBatchSize(155) для createNewLongWriteBuilder и наблюдая, что происходит. Результатом стало более быстрое общение без каких-либо проблем! (В журналах устройств я подтвердил, что в то время мы действительно получали> 20 байт). Однако, чтобы избежать неприятных сюрпризов, если устройство не поддерживает большие MTU, мне бы очень хотелось, чтобы библиотека использовала фактическое значение MTU, а не "большая догадка".
Итак, каков реальный способ получить текущий MTU в RxAndroidBle? Есть ли ошибка, которая мешает ему работать или что-то в этом роде?
RxBleConnection.getMtu()
возвращает правильное значение только в том случае, если MTU был запрошен центральным (Android) или вообще не изменился. Похоже на ошибку в библиотеке. - person Dariusz Seweryn   schedule 13.10.20171.4.2-SNAPSHOT
и проверить, работает ли она у вас? Он должен вернуть правильное значениеMTU
- person Dariusz Seweryn   schedule 24.10.2017