3

Мне нужно обмениваться данными между двумя устройствами Bluetooth, одним из них будет устройство Android. Для простоты вы можете предположить, что другое устройство будет общим устройством linux, работающим на синем, с данными, подобными данным, которые создаст фитнес-трекер.Есть ли способ надежно общаться через Bluetooth?

Сценарий выглядит как простой вариант использования Bluetooth Low Energy. Проблема, с которой я в настоящее время сталкиваюсь, связана с тем, что связь должна быть надежной (надежной в том смысле, что TCP является надежным). Это означает:

  • без потерь
  • не искажение данных потребностей
  • заказа не должны быть сохранены
  • Нет дублирует
  • нет фантомных пакетов

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

Не проделанная большая работа с Bluetooth. В настоящее время я немного перегружен количеством опций, в то время как ни один вариант не подходит для счета.

Есть ли «лучшая практика» для надежной связи между двумя устройствами Bluetooth? Решение Bluetooth Low Energy было бы предпочтительным, но не обязательно.

ответ

2

После вашего подключения к Bluetooth надежного. Поэтому вам не нужно беспокоиться о потере данных или коррупции.

Так что вещи, о которых вы беспокоитесь, могут быть легко обработаны на вашей стороне. Вы получите правильное соединение и обратный вызов отключения при настройке BroadcastReceiver для вашего BluetoothAdapter.

В случае какого-либо отключения вам может потребоваться перезапустить процедуру подключения снова, и после ее правильной установки вы можете повторно отправить данные.

Я еще не знаю о вашей цели, но хочу отметить, что я бы не рекомендовал сообщение Bluetooth, если вы долгое время поддерживаете соединение. Некоторые устройства автоматически отсоединяют соединение через некоторое время, если нет непрерывной передачи.

+0

Я понял, что потеря или коррупция не будут иметь проблемы с BLE. Как насчет других требований, которые я перечислял? В спецификации нет ничего, что могло бы гарантировать, что порядок пакетов будет сохранен? Кроме того, если я хочу предотвратить дублирование и фантомные пакеты, я должен сам реализовать эти требования? – ASM88

+0

'порядок пакетов будет сохранен' - я тоже не нашел никаких спецификаций, но я еще не нашел проблем с заказом. «предотвращать дубликаты и фантомные пакеты». Как и в обычных случаях, нет никаких шансов на потерю или повреждение данных, которые могут не потребоваться для реализации стратегии дублированных пакетов. –

+1

Хорошо. Это в значительной степени то, что я узнал в своих исследованиях. Не совсем то, на что я надеялся, но я все еще принимаю этот ответ, поскольку он наиболее полезен. – ASM88

1

У Android есть поддержка Bluetooth, но она позволяет отправлять и получать данные из потока. В Google есть очень хороший пример: https://github.com/googlesamples/android-BluetoothChat. Единственный недостаток этого примера заключается в том, что он использует Handler для передачи информации о событиях Bluetooth. Я немного изменил его, чтобы использовать другой Thread, и из него вызывается методы интерфейса, которые вы задаете, посмотрите проект: https://github.com/AlexShutov/LEDLights. Это обычный Bluetooth, а не BLE, надеюсь, что это поможет

1

Стойка BLE от Android также отлична от спецификации уровня ссылки. Таким образом, вы можете использовать «писать без ответа» в одном направлении и уведомления для другого направления. Просто убедитесь, что ваша периферийная сторона не отбрасывает входящие записи.

0

BLE использует 24-битный CRC. для количества данных, передаваемых с использованием BLE, CRC достаточно устойчив, а вероятность коррупции очень низкая (обратите внимание, что TCP CRC - 16 бит, а Ethernet CRC - 32 бит, см. http://www.evanjones.ca/tcp-and-ethernet-checksums-fail.html).

Проблемы с упорядочением в проводной сети являются результатом маршрутизации пакетов по различным маршрутам в один и тот же пункт назначения (см. If TCP is connection oriented why do packets follow different paths?). Это частично связано с использованием протокола подтверждения скользящего окна, который позволяет передавать несколько пакетов перед подтверждением. В BLE нет маршрутизации, а схема подтверждения - это вариант схемы остановки и ожидания ARQ (2-бит ленивый подтверждение), это означает, что невозможно отправить новый пакет без подтверждения. Эти два фактора делают вероятность того, что передача не в порядке, маловероятна.