Bluez D-Bus: Динамик Bluetooth Управление кнопками Play/Pause/Next/Previous

Я работаю над функцией медиаплеера Bluetooth проекта интернет-радио, написанного на C на платформе Linux. Идея такова:

  • Подключитесь к ближайшему динамику BT, который поддерживает профиль AVRCP.
  • Передача звука через BT на динамик BT
  • Обработка событий нажатия кнопки

Первоначально я следовал спецификации интерфейса MPRIS D-Bus: https://specifications.freedesktop.org/mpris-spec/latest/

Если я правильно понимаю, то спецификация говорит следующее:

  • Запросите уникальное имя шины, которое выглядит следующим образом: org.mpris.MediaPlayer2.AnyName
  • Предоставьте путь к объекту /org/mpris/MediaPlayer2.
  • Implement the following interfaces:
    • org.mpris.MediaPlayer2
    • org.mpris.MediaPlayer2.Player

Все эти шаги сделаны. Я использую инструмент D-Feet D-bus для проверки запросов свойств, вызовов методов, и все они работают правильно.

Теперь моя проблема в том, что когда я подключаюсь к динамику BT и нажимаю кнопки, приложение не получает события.

Не могли бы вы указать, что мне не хватает и что мне делать дальше?

Заранее спасибо!

PM: Извините, если я не совсем понятен, я начинающий программист и пользователь Stackoverflow. Пожалуйста, спросите меня, нужна ли вам дополнительная информация. Буду признателен за любой ваш совет :)

EDIT1: у меня есть исходный код длиной 1200 строк, и я не знаю, что я могу извлечь из кода для вас. Но к вашему сведению, я использую поддержку D-Bus высокого уровня в GLib: https://developer.gnome.org/gio/stable/gdbus-convenience.html


person Posta Istvan    schedule 18.03.2016    source источник
comment
Привет, добро пожаловать в Stackoverflow. Не могли бы вы поделиться частью написанного вами кода, который относится к вашему вопросу?   -  person Matt    schedule 18.03.2016
comment
Сейчас код составляет 1200 строк. Я не знаю, смогу ли я извлечь фрагменты кода. Вместо этого я отредактирую свой пост и добавлю строку о том, что я использую поддержку D-Bus высокого уровня в Glib.   -  person Posta Istvan    schedule 18.03.2016


Ответы (1)


Модуль uinput используется для записи команд клавиш AVRCP, поэтому вам потребуется, чтобы клиент читал из uinput, когда подключена гарнитура BT (A2DP), проверьте в profiles/audio/avctp.c::uinput_create(), когда подключен профиль avrcp. , ключи отправляются из функции handle_panel_passthrough() в модуль uinput в ядре

person ashish    schedule 27.04.2016