API-интерфейсы DBUS в BLUEZ

Я новичок в BLUEZ, а также в Linux. Я обнаружил, что Bluez продвигает использование API DBUS. Я также хочу знать, что такое DBUS API с точки зрения BLUEZ, в чем преимущество их использования вместо прямого C APIS? Насколько он отличается от C API?


person Shruthi    schedule 25.02.2015    source источник


Ответы (3)


Из моего собственного опыта:

  • API-интерфейсы DBUS являются официально опубликованными, поэтому они, скорее всего, будут стабильными, поддерживаемыми и документированными.
  • API-интерфейсы C немного более низкого уровня, и не всегда очевидно, как их можно использовать (кроме простого обнаружения).
  • API-интерфейсы C более легкие, тогда как API-интерфейсы DBUS требуют больше времени как во время сборки, так и во время выполнения (glib, dbus, bluetoothd, чтобы назвать несколько вещей).

Так что это зависит от того, чего вы пытаетесь достичь. Если вам просто нужно базовое обнаружение и соединения rfcomm/l2cap, то API C, вероятно, подойдет. Если вы хотите чего-то большего, и если ваша платформа способна выдержать дополнительные накладные расходы на DBUS/bluetoothd/и т. д., то вы, вероятно, захотите использовать API DBUS.

person kaylum    schedule 25.02.2015
comment
Я пытаюсь создать центральный BLE, который получает уведомления от многих периферийных устройств BLE. Центральный BLE должен быть построен на машине Linux с использованием BLUEZ. Могу ли я сделать это с помощью API DBUS? - person Shruthi; 26.02.2015
comment
Кроме того, могу ли я написать прикладную программу C для использования API DBUS? или это должно быть только в Python? - person Shruthi; 26.02.2015
comment
@ user3301710 Кто упомянул Python? Для DBUS есть библиотеки как на C, так и на Python. - person Tim Tisdall; 26.02.2015
comment
Смотрите ответ Тима. Я согласен с этим. Для того, что вы хотите сделать, похоже, что интерфейс DBUS может не делать то, что вы хотите. К сожалению, я не думаю, что есть хороший общедоступный необработанный интерфейс C для возможностей Bluez gatt (я не знаю, почему). Но не так уж сложно извлечь это из исходников Bluez. Я делал это раньше. Для начала взгляните на исходный код gatttool в каталоге attrib. По сути, вы можете вызвать g_attrib_register, чтобы зарегистрироваться для получения уведомлений. И gatt_write_char для записи характеристик, включая включение уведомлений. - person kaylum; 27.02.2015
comment
Я работаю над ядром Linux версии 3.13 и bluez версии 5.28. Ограничение с использованием DBUS все еще существует? - person Shruthi; 27.02.2015
comment
@Tim Я преподавал Python, потому что образцы тестовых сценариев (для термометра, частоты сердечных сокращений ...), которые используют API DBUS, доступные на bluez / test, все на python. - person Shruthi; 27.02.2015
comment
Я использую 5.24, которому около 4 месяцев. Не смотрел последнюю версию, поэтому не могу сказать наверняка. - person kaylum; 27.02.2015

Обновление: bluez теперь поддерживает gatt API через dbus. Только что завершено в 5.28 (хотя я думаю, что в более ранних версиях это было немного).

person kaylum    schedule 14.03.2015

Bluez продвигает использование интерфейса DBUS по сравнению с остальными. К сожалению, не все возможно через интерфейс DBUS.

Я не смотрел на это в последнее время, но раньше BLE плохо поддерживался через DBUS. Вы могли взаимодействовать только с официально опубликованными профилями BLE, такими как мониторы сердечного ритма. Если вы хотели что-то сделать с атрибутами, не являющимися частью какого-либо профиля Bluetooth BLE, вы застряли. Так, например, к акселерометрам нельзя было получить доступ через интерфейс DBUS.

Это могло быть изменено в ветке 5.X (я не смотрел на это, потому что это не работает с ядром 3.4, которое я должен использовать). Ветвь Bluez 4.X не изменилась, и это определенно тот случай, когда у вас возникнут проблемы с BLE через DBUS для непрофильных атрибутов.

Просто предупреждаю: если вы используете ядро ​​3.4 или старше, у вас возникнут проблемы с открытием более одного сокета L2CAP. В ядре есть ошибка, которую никто не хочет исправлять. (происходит то, что все данные поступают в один сокет, независимо от того, с какого устройства они поступили)

person Tim Tisdall    schedule 26.02.2015