Advanced Audio Distribution Profile / Audio/Video Remote Control Profile (A2DP/AVRCP)

AVCRP allows the head unit to control media playback on connected devices.

The AVRCP profile is used with the Advanced Audio Distribution Profile (A2DP) profile, which supports streaming of high-quality audio, in mono and stereo, from a mobile device to the head unit.

Architecture

The following diagram shows the components involved with the operation of the AVRCP profile.



Figure 1. The components involved with the operation of the AVRCP profile

The AVRCP profile writes playback status updates to /dev/name/local/avrcp-mmplayer-plugin-server, creates the pathnames for the media player devices (/dev/io-bluetooth/avrcp/#, where # is an integer), and then monitors these entries for new playback commands. It also writes the audio data read from the Bluetooth hardware and devc-seromap_hci serial driver to the audio data device entries (/dev/io-bluetooth/avrcp/mmr/#, where # is an integer).

The mmp-avrcp.so plugin supports AVRCP. The mm-player service uses this plugin to forward playback commands, issued by the user in the HMI, to the appropriate media player device path and to mm-renderer. This last service reads media streams through the audio data device entries and then sends these streams to io-audio, which outputs the audio through hardware. The plugin also reads status information from the avrcp-mmplayer-plugin-server device entry and updates the HMI with this information as needed.

Connecting

To connect via A2DP/AVRCP, simply send the connect_service command with the MAC address as the data parameter and the profile number (0x110B) as data2 to the /pps/services/bluetooth/control object. For example:

echo "command::connect_service\n
      data::BA:C3:32:AD:55:CC\n
      data2::0x110B" >>
      /pps/services/bluetooth/control

In response to commands sent to the control object, the Bluetooth Manager publishes appropriate events (e.g., BTMGR_EVENT_CONNECT_ALL_SUCCESS) in the /pps/services/bluetooth/status object.

Note: A2DP/AVRCP works only with the mm-player media service; it doesn't work with the legacy mm-control service.

Disconnecting

To disconnect, simply send the disconnect_service command using the same parameters you used to connect. For example:

echo "command::disconnect_service\n
      data::BA:C3:32:AD:55:CC\n
      data2::0x110B" >> 
      /pps/services/bluetooth/control