Bluez'de artık kullanımdan kaldırılan rfcomm ikili dosyaya alternatif


10

Bluez 5.44'ten beri, bluez-utils (hcitool gibi diğerleri arasında) bulunan rfcomm ikili dosyaları onaylanmamış olarak kabul edilir ve bundan böyle yalnızca AUR tarafından sağlanan bluez-utils-uyumlu paketinde yer almaktadır.

Bluetooth aygıtını rfcomm çekirdek modülünü kullanarak bir seri bağlantı noktasına bağlamak için benzer bir komut satırı uygulaması var mı veya bundan sonra PyBluez veya benzer kütüphaneleri kullanmam gerekiyor mu?

İkincisi böyle olursa, hangi Python 3 kütüphanelerini önerirsiniz?

Ve eğer biri bilirse, lütfen bana neden bu kadar çok bluez-utilsin birdenbire kullanılmadığını düşündüğünüzü söyleyin. Bununla ilgili hiçbir şey bulamadım.

ArchWiki yeni kullanılarak RFCOMM işlevselliği uygulama önerir D-Bus Profili 1 API .

Yanıtlar:


2

Yakın zamanda Bluez'in mevcut D-Bus api'sini kullanarak kayıp işlevselliği uygulamayı amaçlayan bluez-tools projesini buldum .

Bluez-tools, ArchLinux'da topluluk deposundan edinilebilir. Bunu test etmedim ve github sayfası hala betada olduğunu söylüyor. Ancak belgelere göre, bt-seri, eski bluez rfcomm ve bt-adaptör + bt-agent + bt-cihazının hcitool işlevine sahip olmasını sağlamalıdır.

Düzenleme: Sorun listesine ve son taahhütlere bakarken, bluez-araçları artık aktif olarak korunmuyor gibi görünüyor.


1

Başka bir olası çözüm buldum. Bunu birinin git hub repo'yu kazarak buldum. Bu, python3 yerleşik soket modülünü kullanır.

Ön şartlar:

  1. <Adaptör adresi> adresinde çalışan bir bağdaştırıcınız var.
  2. Hedef Bluetooth cihazınız <cihaz adresi> konumunda.
  3. Cihaz sabitlendi.

Yani, rfcomm ile aynı nokta kullanılabilir.


$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'un yerel olarak Bluetooth seri iletişimi desteklediğini bilmek güzel. Bu nispeten eski soruyu yanıtladığınız için teşekkür ederiz.
eike

0

Bu sorun hakkında not almak istiyorum:

  1. O bu github proje RFCOMM işlevselliği bazıları bulunur. (bluez test dosyalarına dayalı).
  2. bluez projesinin kendisi hala kolayca derlenebilen rfcomm.c dosyasını içerir:

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

... sadece bir dosya, tüm bluez projesini derlemeye gerek yok. burada xyz, indirilen bluez tar.xz kaynak kodunun sürümüdür (5.46 şimdi). indirmeden önce, kişi kendi kontrol etmeli bluetoothd -vve eşleşen kaynağı indirmelidir. bluez-libs sadece derleme başarısına bağımlılıktır.

Armv7 (ahududu 2) için rfcomm gerekli ve rfcomm için hiçbir aur paketi yoktur ve bu tek yoluydu, ama iyi çalışıyor.

Yine de rfcomm'un iyi bir alternatif olmadan neden kullanılmadığından ve seri bağlantı noktası olduğu gibi bluetooth ile nasıl konuşulacağından emin değilim. Python uzmanı ve DBUS uzmanı olduğunuz için bile ... (yukarıda belirtilen projenin sahibi muhtemelen olduğu gibi) ... hala sadece fifo bu şekilde sağlandı, / dev / ... 'de gerçek karakter cihazı değil, diğer tüm programlar (arduino gibi) ) görebilir ve çalışabilir.


2
1. Proje sayfasında "Sadece bu araçları kullanan bazı eski kodların yeniden uygulanmasından kaçınmak" yazıyor, bu da yazarın yeni projeler için bluez kullanırken farklı bir yaklaşım izlemesini önereceği anlamına geliyor. 2. Kendimi rfcomm'u derlemenin birçok yolu var, aradığım şey, kullanımının kaldırılmasının nedeni ve desteklenen bir alternatif.
eike
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.