Я новичок в BLUEZ, а также в Linux. Я обнаружил, что Bluez способствует использованию API DBUS. Я хочу знать, что такое DBUS API с точки зрения BLUEZ, и что использовать их вместо прямого C APIS? Насколько это отличается от C API?DBUS API в BLUEZ
ответ
Из моего собственного опыта:
- Dbus APIs являются официально опубликованы те так, скорее всего, будет стабильным, поддерживается и документированы.
- C apis немного более низкий уровень, и не всегда очевидно, как их можно использовать (кроме простого обнаружения).
- C apis - это более легкий вес, тогда как для API DBUS требуется больше как во время сборки, так и во время выполнения (glib, dbus, bluetoothd, чтобы назвать несколько вещей).
Так что это зависит от того, чего вы пытаетесь достичь. Если вам просто нужны базовые открытия и соединения rfcomm/l2cap, то C apis, вероятно, в порядке. Если вам нужно что-либо помимо этого, и если ваша платформа способна разместить дополнительные накладные расходы на DBUS/bluetoothd/etc, то вы, вероятно, захотите пойти с DBIS DBUS.
Bluez подталкивает использование интерфейса DBUS над остальным. К сожалению, не все возможно через интерфейс DBUS.
Я не смотрел на него недавно, но было так, что BLE плохо поддерживалась, хотя DBUS. Вы можете взаимодействовать только с официально опубликованными профилями BLE, такими как мониторы сердечного ритма. Если вы хотите что-либо сделать с атрибутами, не входящими в какой-либо профиль Bluetooth BLE, вы застряли. Так, например, акселерометрам было невозможно получить доступ через интерфейс DBUS.
Возможно, это было изменено в ветке 5.X (я не смотрел на нее, потому что она не работает на ядре 3.4, которое я должен использовать). 4X-ветвь Bluez не изменилась, и это определенно так, что у вас будут проблемы с BLE над DBUS по непрофильным атрибутам.
Просто обратите внимание, что если вы используете ядро версии 3.4 или старше, у вас возникнут проблемы с открытием более одного сокета L2CAP. В ядре есть ошибка, которую никто не заинтересован в исправлении. (что происходит, все данные поступают с одного разъема, независимо от того, из какого устройства оно поступало)
Обновление: bluez теперь поддерживает gatt API через dbus. Только что закончил в 5.28 (хотя я думаю, что в предыдущих версиях были бит).
Я пытаюсь создать центральный центр BLE, который получает уведомления от многих периферийных устройств BLE. BLE центральный должен быть построен на машине Linux с помощью BLUEZ. Могу ли я это сделать с помощью API DBUS? – Shruthi
Кроме того, могу ли я написать прикладную программу C для использования DBUS apis? или это должно быть только в Python? – Shruthi
@ user3301710 Кто упомянул Python? Существуют библиотеки в C и Python для DBUS. –