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

Commit 77956781 authored by Jakub Pawłowski's avatar Jakub Pawłowski Committed by Automerger Merge Worker
Browse files

Merge "le_audio: Disable ASEs after 3sec from suspend request" am: fcacecac...

Merge "le_audio: Disable ASEs after 3sec from suspend request" am: fcacecac am: 1dc416be am: 5783a893 am: f8620c26

Original change: https://android-review.googlesource.com/c/platform/packages/modules/Bluetooth/+/2178854



Change-Id: I12c0be0ed6e2e9a6177892a50bc56f3b5cd34d55
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents 4e919674 f8620c26
Loading
Loading
Loading
Loading
+22 −1
Original line number Diff line number Diff line
@@ -240,7 +240,8 @@ class LeAudioClientImpl : public LeAudioClient {
        lc3_decoder_right(nullptr),
        audio_source_instance_(nullptr),
        audio_sink_instance_(nullptr),
        suspend_timeout_(alarm_new("LeAudioSuspendTimeout")) {
        suspend_timeout_(alarm_new("LeAudioSuspendTimeout")),
        disable_timer_(alarm_new("LeAudioDisableTimer")) {
    LeAudioGroupStateMachine::Initialize(state_machine_callbacks_);
    groupStateMachine_ = LeAudioGroupStateMachine::Get();

@@ -2993,11 +2994,29 @@ class LeAudioClientImpl : public LeAudioClient {
      return;
    }

    if (stack_config_get_interface()
            ->get_pts_le_audio_disable_ases_before_stopping()) {
      LOG_INFO("Stream disable_timer_ started");
      if (alarm_is_scheduled(disable_timer_)) alarm_cancel(disable_timer_);

      alarm_set_on_mloop(
          disable_timer_, kAudioDisableTimeoutMs,
          [](void* data) {
            if (instance) instance->GroupSuspend(PTR_TO_INT(data));
          },
          INT_TO_PTR(active_group_id_));
    }

    /* Group should tie in time to get requested status */
    uint64_t timeoutMs = kAudioSuspentKeepIsoAliveTimeoutMs;
    timeoutMs = osi_property_get_int32(kAudioSuspentKeepIsoAliveTimeoutMsProp,
                                       timeoutMs);

    if (stack_config_get_interface()
           ->get_pts_le_audio_disable_ases_before_stopping()) {
        timeoutMs += kAudioDisableTimeoutMs;
    }

    LOG_DEBUG("Stream suspend_timeout_ started: %d ms",
              static_cast<int>(timeoutMs));
    if (alarm_is_scheduled(suspend_timeout_)) alarm_cancel(suspend_timeout_);
@@ -3946,9 +3965,11 @@ class LeAudioClientImpl : public LeAudioClient {
  const void* audio_source_instance_;
  const void* audio_sink_instance_;
  static constexpr uint64_t kAudioSuspentKeepIsoAliveTimeoutMs = 5000;
  static constexpr uint64_t kAudioDisableTimeoutMs = 3000;
  static constexpr char kAudioSuspentKeepIsoAliveTimeoutMsProp[] =
      "persist.bluetooth.leaudio.audio.suspend.timeoutms";
  alarm_t* suspend_timeout_;
  alarm_t* disable_timer_;
  static constexpr uint64_t kDeviceAttachDelayMs = 500;

  std::vector<int16_t> cached_channel_data_;
+3 −0
Original line number Diff line number Diff line
@@ -148,6 +148,7 @@ bool get_pts_connect_eatt_before_encryption(void) { return false; }
bool get_pts_unencrypt_broadcast(void) { return false; }
bool get_pts_eatt_peripheral_collision_support(void) { return false; }
bool get_pts_force_le_audio_multiple_contexts_metadata(void) { return false; }
bool get_pts_le_audio_disable_ases_before_stopping(void) { return false; }
config_t* get_all(void) { return nullptr; }

stack_config_t mock_stack_config{
@@ -169,6 +170,8 @@ stack_config_t mock_stack_config{
        get_pts_eatt_peripheral_collision_support,
    .get_pts_force_le_audio_multiple_contexts_metadata =
        get_pts_force_le_audio_multiple_contexts_metadata,
    .get_pts_le_audio_disable_ases_before_stopping =
        get_pts_le_audio_disable_ases_before_stopping,
    .get_all = get_all,
};
const stack_config_t* stack_config_get_interface(void) {
+3 −0
Original line number Diff line number Diff line
@@ -97,6 +97,9 @@ TRC_HID_DEV=2
# Use EATT for all services
#PTS_UseEattForAllServices=true

# Suspend stream after some timeout in LE Audio client module
#PTS_LeAudioSuspendStreaming=true

# Force to update metadata with multiple CCIDs
#PTS_ForceLeAudioMultipleContextsMetadata=true

+1 −0
Original line number Diff line number Diff line
@@ -47,6 +47,7 @@ typedef struct {
  int (*get_pts_l2cap_ecoc_send_num_of_sdu)(void);
  bool (*get_pts_l2cap_ecoc_reconfigure)(void);
  const std::string* (*get_pts_broadcast_audio_config_options)(void);
  bool (*get_pts_le_audio_disable_ases_before_stopping)(void);
  config_t* (*get_all)(void);
} stack_config_t;

+7 −0
Original line number Diff line number Diff line
@@ -51,6 +51,7 @@ const char* PTS_L2CAP_ECOC_SEND_NUM_OF_SDU = "PTS_L2capEcocSendNumOfSdu";
const char* PTS_L2CAP_ECOC_RECONFIGURE = "PTS_L2capEcocReconfigure";
const char* PTS_BROADCAST_AUDIO_CONFIG_OPTION =
    "PTS_BroadcastAudioConfigOption";
const char* PTS_LE_AUDIO_SUSPEND_STREAMING = "PTS_LeAudioSuspendStreaming";

static std::unique_ptr<config_t> config;
}  // namespace
@@ -202,6 +203,11 @@ static const std::string* get_pts_broadcast_audio_config_options(void) {
                           PTS_BROADCAST_AUDIO_CONFIG_OPTION, NULL);
}

static bool get_pts_le_audio_disable_ases_before_stopping(void) {
  return config_get_bool(*config, CONFIG_DEFAULT_SECTION,
                         PTS_LE_AUDIO_SUSPEND_STREAMING, false);
}

static config_t* get_all(void) { return config.get(); }

const stack_config_t interface = {
@@ -226,6 +232,7 @@ const stack_config_t interface = {
    get_pts_l2cap_ecoc_send_num_of_sdu,
    get_pts_l2cap_ecoc_reconfigure,
    get_pts_broadcast_audio_config_options,
    get_pts_le_audio_disable_ases_before_stopping,
    get_all};

const stack_config_t* stack_config_get_interface(void) { return &interface; }
Loading