Размер буфера подключения BLE к длине пакета

#node.js #bluetooth-lowenergy #buffer

#node.js #bluetooth -низкое энергопотребление #буфер

Вопрос:

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

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

updateValueCallback(buf1);
  

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

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

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

Ответ №1:

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

Ответ №2:

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

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

Надеюсь, у вас это сработает.