Bluez D-Bus: Bluetooth-динамик Воспроизведение / Пауза / Следующая / Предыдущая кнопка

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

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

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

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

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

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

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

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

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

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

РЕДАКТИРОВАТЬ 1: У меня есть источник длиной 1200 строк, и я не знаю, что я могу извлечь из кода для вас. Но, к вашему сведению, я использую высокоуровневую поддержку D-Bus GLib: https://developer.gnome.org/gio/stable/gdbus-convenience.html

1 ответ

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

Другие вопросы по тегам