В Ble, могу ли я передать пакет данных больше чем MTU? - PullRequest
0 голосов
/ 13 июня 2019

Предположим, я хочу передать некоторые данные (100 байт) с помощью ble, а MTU составляет 50 байт, могу ли я сделать пакет из 100 байт и просто отправить его один раз?

В моем тесте data данные были усечены. Значит ли это, что мы должны вручную упаковать данные нашим приложением, отправить их по одному и переупаковать вручную на другой стороне?

Есть ли у Android API для автоматического включения подпакетов и перепаковок ack

        gatt.requestMtu(100);
        @Override
        public void onMtuChanged(BluetoothGatt gatt, int mtu, int status) {
            super.onMtuChanged(gatt, mtu, status);
            //// here the mtu is 50
        }

1 Ответ

1 голос
/ 14 июня 2019

При разработке приложения BLE на Android или других высокоуровневых операционных системах вы можете практически игнорировать MTU.Лучше оставить это на усмотрение системы для согласования конфигурации.

Однако это не означает, что вы можете просто отправлять данные произвольной длины.С BLE данные передаются от / к характеристикам службы Bluetooth, и они имеют максимальную длину, которую вы не можете превысить, а также флаги разрешений и контроля доступа.

Чтобы определить максимальную длину пакета, получите размер характеристики, в которую вы записываете.Разработчик этой характеристики в идеале должен убедиться, что длина характеристики равна или кратна MTU устройства.

Единственное исключение из этого - использование вашей характеристики для уведомлений (в отличие от чтения или записи).).В этом случае максимальная длина характеристики равна MTU устройства.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...