Альтернатива устаревшему двоичному файлу rfcomm в bluez

в чем может быть разница?

Основная причина разного количества строк заключается в том, что вывод, производимый yum , является форматируется так, чтобы каждое поле выстраивалось по вертикали (независимо от длины имени пакета и / или номера версии). Это достигается за счет использования двух строк для перечисления таких пакетов и заполнения второй строки пробелами для правильного выравнивания полей.Следующий вывод (из окна CentOS 6) показывает, что две строки используются для перечисления пакета device-mapper-persistent-data.x86_64 :

device-mapper-libs.x86_64         1.02.95-3.el6_7.4    @clearos-verified-updates
device-mapper-persistent-data.x86_64
                                  0.3.2-1.el6          @clearos
dhclient.x86_64                   12:4.1.1-49.P1.v6    @clearos-verified-updates

Однако это не только , и это можно увидеть, проанализировав вывод двух команд перед их сравнением:

Для вывода команды rpm :

  1. Отсортируйте его так, чтобы пакеты начинались с заглавной буквы появляются перед строчными буквами:

     rpm -qa | LC_ALL = C sort 
     
  2. Используйте команду sed , чтобы удалить номера версий пакетов:

     rpm -qa | LC_ALL = C сортировать r | sed 's / - [^ -] * - [^ -] * $ //'> | installed.rpm 
     

Для вывода команды yum :

  1. Удалите первые две строки заголовка ( Загруженные плагины и Установленные пакеты ):

     Загруженные плагины: etckeeper, fastestmirror 
    Установленные пакеты 
     

    Мы можем использовать sed для этого:

      yum list installed | sed '1,2d;' 
     
  2. Мы также можем использовать sed , чтобы удалить все строки, которые являются продолжением списка пакетов (эти строки начинаются с некоторого количества пробелов, чтобы все версии пакета совпадают).

     установлен список конфет | sed '1,2d; / ^ /d;s/\..*//'> | installed.yum 
     

Теперь мы можем использовать команду diff для сравнения вывода двух файлов. Вот результаты из окна CentOS 6:

# diff installed.{rpm,yum}
239,243d238
< gpg-pubkey
< gpg-pubkey
< gpg-pubkey
< gpg-pubkey
< gpg-pubkey

Заключение

Это показывает, что rpm -qa также включает списки пакетов для открытых ключей, которым доверяют подписывать пакеты, в то время как yum ] исключает эти пакеты.

10
14.02.2018, 22:51
3 ответа

хочу отметить по поводу этой проблемы:

  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 (raspberry 2 )а для rfcomm нет пакета aur, и это был единственный способ, но он работает хорошо.

Все еще не уверен, почему rfcomm устарел, без хорошей альтернативы, и как общаться с bluetooth, поскольку это был последовательный порт другим способом. Потому что даже вы являетесь экспертом по python плюс эксперт по DBUS... (, как и вышеупомянутый владелец проекта, вероятно, )... тем не менее таким образом был предоставлен только fifo, а не реальное символьное устройство в /dev/... что все остальные программы (, такие как arduino ), могут видеть и работать.

0
27.01.2020, 20:03

Я нашел другое возможное решение. Я нашел это, копаясь в чьем-то репозитории git hub. Это использует python3, встроенный в модуль сокета.

Предпосылки:

  1. У вас есть работающий адаптер по адресу <adapter address>.
  2. У вас есть целевое Bluetooth-устройство по адресу <device address>.
  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()
2
27.01.2020, 20:03

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

Инструменты Bluez -доступны в ArchLinux из репозитория сообщества. Я не тестировал это, и на странице github указано, что он все еще находится в бета-версии. Но, согласно документации, серийный номер bt -должен быть в состоянии заменить старый bluez rfcomm, а устройство bt -адаптер+bt -агент+bt -имеет функциональность hcitool.

Изменить :Судя по списку проблем и последним коммитам, инструменты bluez -больше не поддерживаются активно.

2
27.01.2020, 20:03

Теги

Похожие вопросы