Loading system/bta/le_audio/client.cc +22 −1 Original line number Diff line number Diff line Loading @@ -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(); Loading Loading @@ -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_); Loading Loading @@ -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_; Loading system/bta/le_audio/le_audio_client_test.cc +3 −0 Original line number Diff line number Diff line Loading @@ -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{ Loading @@ -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) { Loading system/conf/bt_stack.conf +3 −0 Original line number Diff line number Diff line Loading @@ -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 Loading system/internal_include/stack_config.h +1 −0 Original line number Diff line number Diff line Loading @@ -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; Loading system/main/stack_config.cc +7 −0 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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 = { Loading @@ -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
system/bta/le_audio/client.cc +22 −1 Original line number Diff line number Diff line Loading @@ -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(); Loading Loading @@ -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_); Loading Loading @@ -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_; Loading
system/bta/le_audio/le_audio_client_test.cc +3 −0 Original line number Diff line number Diff line Loading @@ -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{ Loading @@ -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) { Loading
system/conf/bt_stack.conf +3 −0 Original line number Diff line number Diff line Loading @@ -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 Loading
system/internal_include/stack_config.h +1 −0 Original line number Diff line number Diff line Loading @@ -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; Loading
system/main/stack_config.cc +7 −0 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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 = { Loading @@ -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; }