Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 31854d61 authored by Alice Kuo's avatar Alice Kuo
Browse files

Retry and cache symmetric PHY setting as remote reject the CIS request

Remote headset may reject the asymmetric PHY setting as CIS request with
error code 0x1A (unsupported remote feature). For this case, retry CIG
set parameter with symmetric PHY setting to avoid the IOP issue.

Bug: 310187752
Bug: 314176433
Test: Connect with LE audio bud. Do the media / conversational streaming
Change-Id: Ib79a33819b7c366a1dfba57dad22b021bdd1e019
parent 986c88fc
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -35,6 +35,8 @@
#include <android/sysprop/BluetoothProperties.sysprop.h>
#endif

#include <android_bluetooth_flags.h>

#include "devices.h"
#include "le_audio_types.h"

@@ -82,6 +84,7 @@ class LeAudioDeviceGroup {
  bool is_output_preference_le_audio;
  bool is_duplex_preference_le_audio;
  DsaMode dsa_mode_;
  bool asymmetric_phy_for_unidirectional_cis_supported;

  explicit LeAudioDeviceGroup(const int group_id)
      : group_id_(group_id),
@@ -118,6 +121,8 @@ class LeAudioDeviceGroup {
    is_output_preference_le_audio = true;
    is_duplex_preference_le_audio = true;
#endif
    asymmetric_phy_for_unidirectional_cis_supported =
        IS_FLAG_ENABLED(asymmetric_phy_for_unidirectional_cis);
  }
  ~LeAudioDeviceGroup(void);

+9 −2
Original line number Diff line number Diff line
@@ -851,6 +851,13 @@ class LeAudioGroupStateMachineImpl : public LeAudioGroupStateMachine {
        return;
      }

      if (event->status == HCI_ERR_UNSUPPORTED_REM_FEATURE &&
          group->asymmetric_phy_for_unidirectional_cis_supported == true &&
          group->GetSduInterval(le_audio::types::kLeAudioDirectionSource) ==
              0) {
        group->asymmetric_phy_for_unidirectional_cis_supported = false;
      }

      LOG_ERROR("CIS creation failed %d times, stopping the stream",
                leAudioDevice->cis_failed_to_be_established_retry_cnt_);
      leAudioDevice->cis_failed_to_be_established_retry_cnt_ = 0;
@@ -1373,8 +1380,8 @@ class LeAudioGroupStateMachineImpl : public LeAudioGroupStateMachine {

    // Use 1M Phy for the ACK packet from remote device to phone for better
    // sensitivity
    if (IS_FLAG_ENABLED(asymmetric_phy_for_unidirectional_cis) &&
        max_sdu_size_stom == 0 &&
    if (group->asymmetric_phy_for_unidirectional_cis_supported &&
        sdu_interval_stom == 0 &&
        (phy_stom & bluetooth::hci::kIsoCigPhy1M) != 0) {
      LOG_INFO("Use asymmetric PHY for unidirectional CIS");
      phy_stom = bluetooth::hci::kIsoCigPhy1M;