Альтернатива тепер застарілому двійковому коду rfcomm у bluez


10

Оскільки bluez 5.44, бінарні файли rfcomm, що містяться у bluez-utils (серед інших, як hcitool), вважаються застарілими і відтепер включаються лише у пакет bluez-utils-compat, що надається AUR.

Чи існує аналогічне додаток командного рядка для прив’язки пристрою Bluetooth до послідовного порту за допомогою модуля ядра rfcomm чи мені вже зараз доводиться використовувати PyBluez або подібні лібри?

Якщо це трапляється саме так, які бібліотеки Python 3 ви б рекомендували?

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

ArchWiki рекомендує реалізацію функціональності RFCOMM з використанням нового D-Bus Профіль 1 API .

Відповіді:


2

Нещодавно я знайшов проект bluez-tools , який спрямований на реалізацію втраченої функціональності за допомогою поточного api Blue-D-Bus.

Bluez-інструменти доступні в ArchLinux із сховища спільноти. Я цього не тестував, і на сторінці github йдеться про те, що він все ще знаходиться в бета-версії. Але згідно з документацією, bt-serial повинен мати можливість замінити старий bluez rfcomm, а bt-адаптер + bt-агент + bt-пристрій мають функціонал hcitool.

Редагувати: Переглядаючи список проблем і останні зобов'язання, інструменти bluez, здається, більше не підтримуються.


1

Я знайшов інше можливе рішення. Я виявив це, копаючись через чийсь git hub repo. Для цього використовується python3, вбудований в модуль socket.

Передумови:

  1. У вас є робочий адаптер за адресою <адреса адаптера>.
  2. У вас є цільовий пристрій Bluetooth за адресою <адреса пристрою>.
  3. Пристрій закріплено.

Тобто той самий момент, що можна використовувати rfcomm.


$python3
>>> import socket
>>> sock = socket.socket(socket.AF_BLUETOOTH, socket.SOCK_STREAM, socket.BTPROTO_RFCOMM)
>>> adapter = '00:11:22:33:44:55' #<adapter address>
>>> device = '55:44:33:22:11:00' #<device address>
>>> sock.bind((adapter, 1))
>>> sock.connect((device, 1))
## If not pinned it will ask you. You can use/adapt the bluez simple-agent for headless pinning
>>> sock.send(b'hello\n')
>>> sock.recv(100)
>>> sock.close()

Приємно знати, що Python споконвічно підтримує послідовний зв’язок Bluetooth. Дякуємо, що відповіли на це відносно давнє запитання.
eike

0

Я хочу зазначити цю проблему:

  1. що цей github проект містить деяку функціональність rfcomm. (на основі тестових файлів bluez).
  2. Сам проект bluez все ще містить файл rfcomm.c, який можна легко компілювати за допомогою:

    gcc -lbluetooth rfcomm.c -orfcomm -DVERSION = xyz

... лише один файл, не потрібно збирати весь проект bluez. де xyz - версія завантаженого вихідного коду bluez tar.xz (зараз 5.46). перед завантаженням слід спочатку перевірити власне bluetoothd -vта завантажити відповідне джерело. bluez-libs - це лише залежність для успіху компіляції.

Мені потрібен rfcomm для armv7 (малиновий 2), а для пакету rfcomm немає пакету aur, і це був єдиний спосіб, але він працює добре.

Досі не впевнений, чому rfcomm застарілий, без гарної альтернативи, і як спілкуватися з Bluetooth, як це був послідовний порт іншим способом. Тому що навіть ви експерт python плюс експерт DBUS ... (як це, мабуть, згаданий власник проекту) ... все-таки тільки таким чином надавались файли, а не реальні пристрої символів у / dev / ..., що всі інші програми (наприклад, arduino ) може бачити та працювати з.


2
1. На сторінці проекту зазначено "Просто щоб уникнути повторної реалізації старого коду, який використовує ці інструменти", а це означає, що автор запропонував би дотримуватися іншого підходу при використанні bluez для нових проектів. 2. Існує багато способів скласти сам rfcomm, те, що я шукаю, є причиною його депресії та підтримуваною альтернативою.
eike
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.