Размер буфера соединения BLE до длины пакета - PullRequest
1 голос
/ 14 марта 2019

В настоящее время я работаю над дипломным проектом, в котором я хочу передать сессионный токен, используя BLE. На стороне сервера я использую Node.js и Bleno для создания соединения. После того, как клиент подпишется на уведомление, сервер отправит токен. Небольшая часть кода:

const buf1 = Buffer.from(info, 'utf8');

updateValueCallback(buf1);

На этом этапе я использую nRF Connect, чтобы проверить, все ли работает. Мое намерение работает, за исключением того, что я вижу, что передаются только первые 20 символов. (Столько же, сколько размер пакета)

Мой вопрос касается размера буфера. Будет ли, когда я наконец подключусь к приложению Android, вся строка будет передана? В этом случае базовые протоколы обрезают строку и собирают ее на другой стороне. В этом случае размер буфера не имеет значения. Или я должен согласовать MTU для размера строки. Другими словами, должен ли размер буфера быть размером передаваемого пакета?

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

Ответы [ 2 ]

1 голос
/ 15 марта 2019

GATT требует, чтобы уведомление было максимальным MTU - длиной 3 байта. MTU по умолчанию равен 23, поэтому максимальная длина значения модификации по умолчанию составляет 20 байтов. Договариваясь о большем MTU, вы можете отправлять более длинные уведомления (если ваш стек BLE поддерживает это).

0 голосов
/ 15 марта 2019

Я не использовал Bleno, но весь стек, который я использовал, мне нужен был для того, чтобы разделить данные на 20 байтов за раз.А на приемной стороне соберите их и соедините снова.

Стеки были хороши для буферизации данных и передачи их по одному фрагменту за раз.Поэтому я зациклил функцию (как ваш updateValueCallback ()), пока все кусочки моих данных не были сделаны.

Надеюсь, у вас это получится.

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