#python #linux #bluetooth #dbus #bluez
Вопрос:
Я пытаюсь перенести pybluez для работы с bluez5, но я не знаю, как получить данные об услуге.
Я могу получить идентификаторы UUID, объявленные устройством, получив свойство UUIDs из org.bluez.Интерфейс dbus Device1, но я не могу получить дополнительную информацию об этих службах (например, имя). С моей точки зрения, эта информация должна быть доступна в свойстве serviceData, но это поле действительно кажется пустым.
В целях тестирования я пробую все это из приложения d-feet.
Редактировать: Я думаю, что то, что я пытаюсь сделать, — это получить доступ к sdp из api-интерфейса bluez dbus
Редактировать:
Например, я создаю на своем ноутбуке сервис https://github.com/pybluez/pybluez/blob/master/examples/simple/rfcomm-server.py (используя параметры совместимости в bluez) и установив имя на Apapatata
Затем с другого компьютера (который сопряжен и подключен) Я запускаю «sudo sdptool записывает MAC моего ноутбука», и в результате я получаю:
Service Name: Apapatata
Service RecHandle: 0x1000e
Service Class ID List:
UUID 128: 94f39d29-7d6d-437d-973b-fba39e49d4ee
"Serial Port" (0x1101)
Protocol Descriptor List:
"L2CAP" (0x0100)
"RFCOMM" (0x0003)
Channel: 1
Profile Descriptor List:
"Serial Port" (0x1101)
Version: 0x0100
Как вы можете видеть, Apapatata нет ни в одном списке известных сервисов, и я хотел знать, как получить это имя с помощью api dbus (и, если возможно, других свойств).
Редактировать:
Хорошо, я думаю, что мне удалось восстановить служебную запись, запросив sdp моего ноутбука, который включен только с параметрами совместимости bluez.
И результат от
import pydbus;
from pprint import pprint; pprint([iface for dpath, iface in pydbus.SystemBus().get('org.bluez', '/').GetManagedObjects().items() if iface.get('org.bluez.Device1', {}).get('Address') == 'xx:xx:xx:xx:xx:xx'])
является:
[{'org.bluez.Device1': {'Adapter': '/org/bluez/hci0',
'Address': '84:4B:F5:40:03:00',
'AddressType': 'public',
'Alias': 'G2',
'Blocked': False,
'Class': 1835276,
'Connected': True,
'Icon': 'computer',
'LegacyPairing': False,
'Modalias': 'usb:v1D6Bp0246d0535',
'Name': 'G2',
'Paired': True,
'RSSI': -55,
'ServicesResolved': False,
'Trusted': True,
'TxPower': 4,
'UUIDs': ['00001104-0000-1000-8000-00805f9b34fb',
'00001105-0000-1000-8000-00805f9b34fb',
'00001106-0000-1000-8000-00805f9b34fb',
'00001108-0000-1000-8000-00805f9b34fb',
'0000110a-0000-1000-8000-00805f9b34fb',
'0000110b-0000-1000-8000-00805f9b34fb',
'0000110c-0000-1000-8000-00805f9b34fb',
'0000110d-0000-1000-8000-00805f9b34fb',
'0000110e-0000-1000-8000-00805f9b34fb',
'00001112-0000-1000-8000-00805f9b34fb',
'0000112f-0000-1000-8000-00805f9b34fb',
'00001132-0000-1000-8000-00805f9b34fb',
'00001133-0000-1000-8000-00805f9b34fb',
'00001200-0000-1000-8000-00805f9b34fb',
'00005005-0000-1000-8000-0002ee000001',
'94f39d29-7d6d-437d-973b-fba39e49d4ee']},
'org.bluez.MediaControl1': {'Connected': True,
'Player': '/org/bluez/hci0/dev_84_4B_F5_40_03_00/player0'},
'org.freedesktop.DBus.Introspectable': {},
'org.freedesktop.DBus.Properties': {}}]
Я совершенно уверен, что то, что я хочу сделать, невозможно с bluez5, и я совершенно уверен, что все, что связано с услугами, должно быть реализовано с использованием интерфейса org.bluez.Профиль 1