- change control blocks for each device independently for each HS.  - change rc structures for multiple avrcp connections.  - change scb structures for extending support for 2 a2dp.  - add device address for all callbacks.

Change-Id: Id99b8174479f8da9ec80afa8531755d160b32034

Bluetooth: Enable A2dp Multicast.

This feature enables the multi
streaming support on BT HOST.

Change-Id: Ic3748c32b30036abd352c9322e30a704b2103fa7

Bluetooth: A2dp MultiCast/ Soft Hands-off.

 - Trigger suspend, when new ACL is up during active
   multicast
 - Initiate suspend on both links when it is initiated by
   either connected HS
 - Clear remote suspend flag when play is initiated by either
   connected HS
 - Allocate first free SCB when remote has initiated AVRCP connection
   and we are trying to connect to other HS
 - Update Encoder when HS2 is connected during
   active streaming on HS1
Change-Id: I7ccfb81637688c23c6a2b005f849ac76cc0dbd2a

Bluetooth: Initialize RC handle with proper value.

 - Initialize rc_handle with 0xFF
 - On disconnect re-set rc_handle to invalid value.

Change-Id: Id507114451701e998f9960aa5dc961ff16f2d1bf

Bluetooth: Do not register for Volume change.

 - When absolute volume is not supported by any
   of connected HS do not register for volume change
   notification on connected HS.

Change-Id: I3b29ac5929989bc7c45b1b0f8cbe75b3082e66d3

Bluetooth: Use SCB handle for Sniff.

 - Use scb handle for making entry for sniff instead
   of audio count.With Multi A2dp audio count denotes
   number of A2dp devices connected.Due to this stale
   entries were created for AV power entries, due to
   which links did not go to sniff after max entries
   in table is reached.

Change-Id: I051017991c7d3d7d42c4822efdad2b2aa1b0e2b2

Bluetooth: Use free SCB for Incoming connections.

  - In connection race conditions, check for
    first free SCB to allocate for incoming
    connection.
  - Initiate disconnect for incoming connection when
    no free SCB is available.
  - Check for max. possible connections before initiating
    suspend for new link up-event.
  - Clear all flag on AVRCP disconnect.
Change-Id: Ic605b0470ca88aac856cefe54bf6c9ec5320bd5a

A2DP Multicast: Allow outgoing connections for scatternet

    - As there is fallback to soft handoff incase of
      scatternet scenarios, allow the outgoing
      connections in case of role switch failure for
      existing slave connection.
    - Reject the incoming connection from BTA while
      processing another incoming connection.

Change-Id: Ib8a087eea5e9845a6e2ef758757f941c1bdf7b52

A2DP Multicast: Disable multicast if BR HS is connected

    - Disable multicast if BR headset is connected
    - Use scb index for AV Busy and Idle state updates

Change-Id: If7310be4f47cbe0775eb35c0b81122d524be25f5

Dual A2DP: Avoid blocking Play key event

    - Send play key event for PLAY sent from non playing device
      to be compliant with default behavior for single connection.

Change-Id: Ie07fc10d3a946ca4e3f9643b2ae5e556358fd0b8

A2DP Multicast: Update multicast state after AV state update

    - multicast state update checks the AV state for updating
      multicast condition. Need to make sure that AV state
      is updated in OPEN state before calling the API.

Change-Id: Ifa0fd1a90ff5d8a05c37dba1590f76176d9899e0

Dual A2DP: Disconnect AVRCP only connection.

    - AVRCP only connection should be disconnected to avoid
      confusion to end user in the Dual A2DP/Multicast scenarios.
    - Proper check for RC connections before closing uinput.

Change-Id: Id515c3f29499a3ada02b8e45cc2189276152a461

Conflicts:
	btif/src/btif_av.c

Dual A2DP: Allocate free SCB for incoming connection

    - SCB allocated to incoming connection should be idle.
      If not, ongoing connection handling will be affected.

Change-Id: Ideaab85b928f08b37c7a284644fd3a62926b15ec

Dual A2DP: Initiate outgoing connection only if the state is Idle

    - A2DP connection also could be triggered from remote device
      before the AVRCP timer expires. Check the state before initiating
      connection for the device.

Change-Id: Id538de6ce829a388a4c052769177319cd5c217fc

Dual A2DP: Don't suspend if stream is started for other device

    - Avoid sending suspend for remote initiated START if
      stream is started for other device. IOT issues are seen with
      specific devices if gap between SUSPEND and START is less.

Change-Id: I64d768aa8246101687bbc98b4ae0be97645bb5b1

A2DP Multicast: Update multicast state during role change

    - Role change can be triggered at any point of time
      during the connection. Update the multicast state
      upon getting role change event.

Change-Id: I60a17e955b6fdc4379d571c59d8527ec023e9531

Revert "Bluetooth: Do not register for Volume change."

This reverts commit c87e747f40b870b9a540902595524b34a5436b43.

Change-Id: I4752486979366f67e9109bd61df54dc48786f564

Dual A2DP: Set the flush only when there is no play in progress

    - When connected to two devices update the flush state only
      if there is no play on any connected device.

Change-Id: Ic13b7285625c49350334c35eed878407b6e78821

Dual A2DP: Handle connection inconstencies during stress scenarios

    - Avoid removal of connect nodes in profile connect queue
    - Dual Handoff flag cleanup during START failure
    - Reject the A2DP connection from remote device if it is
      initiated on the same endpoint where outgoing connection
      is being attempted.

CRs-Fixed: 835641
Change-Id: I4cc0d680e5cabb003dd11c8ba232d1fc70f41780

Dual A2DP: Mark the AVDTP busy during outgoing connection

    - AVDTP incoming connection cannot be handled when there is
      outgoing connection in progress as per the base design.
      Reject the incoming AVDT connection so that other
      connection can happen and A2DP connection is always
      attempted from connectOtherProfile path.

CRs-Fixed: 839392

Change-Id: Iff801a7e4f170aa85cd06278c7d62dfc81464b5a

Dual A2DP: Acknowledge the SUSPEND after both streams stop

    - Avoid on_suspended call when other stream is not yet
      suspended as it unblocks the audio process to send
      further commands.
    - Handle RC close to cleanup the BTIF RC block even if
      the current AV connections are for different devices.
      This was seen because of not getting AVCT disconnection
      response and later this event is received after getting
      ACL disconnection complete.

CRs-Fixed: 842690
Change-Id: I7eb95a9ddfc7be06af4521af1567e4e166630317

Dual A2DP: Disconnect the AVRCP only connection

AVRCP only connection has to be disconnected when it is evaluated
for A2DP connection and no free AV blocks are available in BTIF.

Change-Id: I3f6b731ed6701c739defbfd8e011bbb6a1aeb3ba

Conflicts:
	btif/src/btif_rc.c

A2DP Multicast: Check for both streams for stream ready

    - Stream ready should succeed only after both streams
      are suspended during multicast, otherwise audio data
      coming will trigger inconsistent behavior for stream
      starting.

Change-Id: Ia8794dbed7dbe5f55cf7139b200fcdf2eb5ee45f

A2DP Multicast: Handle suspend for both streams

In race conditions, it is seen that ACL is established while
stream is being started for both devices for multicast.
Since the multicast state is updated after stream start when
suspend is initiated we need to check if both streams are
started and suspend them accordingly.

Change-Id: I23f64174914350b476022f7bfbfb553a55d12902

Dual A2DP: Clear the RC priority information while disconnect

RC priority information has to be cleared during disconnection
to avoid improper usage during start even after initiating
disconnection.

Change-Id: Ia52c04ea2bfecbf390aae12400073adb0f327718

Dual A2DP: Interface to query active device for handoff

During Handoff case, check the playing device and device to
start playback to provide state for given device.

CRs-Fixed: 856063
Change-Id: I3a326d9f0c6221cfc4cdcc3fad037f22a29ff90e

Dual A2DP: Connection failure handling for proper cleanup

    - Cleanup BTA AV block for the outgoing connection if
      it fails because of no resources
    - Reject the incoming connection if there is outgoing
      connection in progress

Change-Id: I44d3dd6bbff93d38c1c22260056897e42d915ffa

Conflicts:
	btif/src/btif_av.c

Intimate app on AVRCP connection state change.

 - Intimate app on AVRCP connection state change.
 - Synchronize Connection state update and RC feature update,
   to make sure RC features update is sent after connection state
   update.

Conflicts:
	btif/src/btif_av.c

CRs-Fixed: 843335
Change-Id: I6e6298f42ddbddb5f29169cb4c15a3a1b3078bf7
23 files changed