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 в ядре