Loading system/bta/Android.bp +2 −0 Original line number Diff line number Diff line Loading @@ -720,6 +720,7 @@ cc_test { "le_audio/le_audio_types.cc", "le_audio/mock_iso_manager.cc", "le_audio/mock_codec_manager.cc", ":TestCommonStackConfig", ], shared_libs: [ "libprotobuf-cpp-lite", Loading Loading @@ -774,6 +775,7 @@ cc_test { "le_audio/mock_iso_manager.cc", "test/common/mock_controller.cc", "le_audio/mock_codec_manager.cc", ":TestCommonStackConfig", ], shared_libs: [ "libprotobuf-cpp-lite", Loading system/bta/le_audio/broadcaster/broadcaster_types.cc +73 −0 Original line number Diff line number Diff line Loading @@ -23,6 +23,7 @@ #include "bta_le_audio_broadcaster_api.h" #include "btm_ble_api_types.h" #include "embdrv/lc3/include/lc3.h" #include "internal_include/stack_config.h" #include "osi/include/properties.h" using bluetooth::le_audio::BasicAudioAnnouncementBisConfig; Loading Loading @@ -223,6 +224,54 @@ static const BroadcastCodecWrapper lc3_stereo_24_2 = BroadcastCodecWrapper( // Frame len. 60); static const BroadcastCodecWrapper lc3_stereo_48_1 = BroadcastCodecWrapper( kLeAudioCodecIdLc3, // LeAudioCodecConfiguration {.num_channels = LeAudioCodecConfiguration::kChannelNumberStereo, .sample_rate = LeAudioCodecConfiguration::kSampleRate48000, .bits_per_sample = LeAudioCodecConfiguration::kBitsPerSample16, .data_interval_us = LeAudioCodecConfiguration::kInterval7500Us}, // Bitrate 80000, // Frame len. 75); static const BroadcastCodecWrapper lc3_stereo_48_2 = BroadcastCodecWrapper( kLeAudioCodecIdLc3, // LeAudioCodecConfiguration {.num_channels = LeAudioCodecConfiguration::kChannelNumberStereo, .sample_rate = LeAudioCodecConfiguration::kSampleRate48000, .bits_per_sample = LeAudioCodecConfiguration::kBitsPerSample16, .data_interval_us = LeAudioCodecConfiguration::kInterval10000Us}, // Bitrate 80000, // Frame len. 100); static const BroadcastCodecWrapper lc3_stereo_48_3 = BroadcastCodecWrapper( kLeAudioCodecIdLc3, // LeAudioCodecConfiguration {.num_channels = LeAudioCodecConfiguration::kChannelNumberStereo, .sample_rate = LeAudioCodecConfiguration::kSampleRate48000, .bits_per_sample = LeAudioCodecConfiguration::kBitsPerSample16, .data_interval_us = LeAudioCodecConfiguration::kInterval7500Us}, // Bitrate 96000, // Frame len. 90); static const BroadcastCodecWrapper lc3_stereo_48_4 = BroadcastCodecWrapper( kLeAudioCodecIdLc3, // LeAudioCodecConfiguration {.num_channels = LeAudioCodecConfiguration::kChannelNumberStereo, .sample_rate = LeAudioCodecConfiguration::kSampleRate48000, .bits_per_sample = LeAudioCodecConfiguration::kBitsPerSample16, .data_interval_us = LeAudioCodecConfiguration::kInterval10000Us}, // Bitrate 96000, // Frame len. 120); const std::map<uint32_t, uint8_t> sample_rate_to_sampling_freq_map = { {LeAudioCodecConfiguration::kSampleRate8000, codec_spec_conf::kLeAudioSamplingFreq8000Hz}, Loading Loading @@ -318,8 +367,12 @@ std::ostream& operator<<( static const BroadcastQosConfig qos_config_2_10 = BroadcastQosConfig(2, 10); static const BroadcastQosConfig qos_config_4_50 = BroadcastQosConfig(4, 50); static const BroadcastQosConfig qos_config_4_60 = BroadcastQosConfig(4, 60); static const BroadcastQosConfig qos_config_4_65 = BroadcastQosConfig(4, 65); std::ostream& operator<<( std::ostream& os, const le_audio::broadcaster::BroadcastQosConfig& config) { os << " BroadcastQosConfig=["; Loading @@ -344,8 +397,28 @@ static const std::pair<const BroadcastCodecWrapper&, const BroadcastQosConfig&> static const std::pair<const BroadcastCodecWrapper&, const BroadcastQosConfig&> lc3_stereo_24_2_2 = {lc3_stereo_24_2, qos_config_4_60}; static const std::pair<const BroadcastCodecWrapper&, const BroadcastQosConfig&> lc3_stereo_48_1_2 = {lc3_stereo_48_1, qos_config_4_50}; static const std::pair<const BroadcastCodecWrapper&, const BroadcastQosConfig&> lc3_stereo_48_2_2 = {lc3_stereo_48_2, qos_config_4_65}; static const std::pair<const BroadcastCodecWrapper&, const BroadcastQosConfig&> lc3_stereo_48_3_2 = {lc3_stereo_48_3, qos_config_4_50}; static const std::pair<const BroadcastCodecWrapper&, const BroadcastQosConfig&> lc3_stereo_48_4_2 = {lc3_stereo_48_4, qos_config_4_65}; std::pair<const BroadcastCodecWrapper&, const BroadcastQosConfig&> getStreamConfigForContext(uint16_t context) { const std::string* options = stack_config_get_interface()->get_pts_broadcast_audio_config_options(); if (options) { if (!options->compare("lc3_stereo_48_1_2")) return lc3_stereo_48_1_2; if (!options->compare("lc3_stereo_48_2_2")) return lc3_stereo_48_2_2; if (!options->compare("lc3_stereo_48_3_2")) return lc3_stereo_48_3_2; if (!options->compare("lc3_stereo_48_4_2")) return lc3_stereo_48_4_2; } // High quality, Low Latency auto contexts_stereo_24_2_1 = static_cast<std::underlying_type<LeAudioContextType>::type>( Loading system/conf/bt_stack.conf +8 −0 Original line number Diff line number Diff line Loading @@ -113,3 +113,11 @@ TRC_HID_DEV=2 # SMP_NUMERIC_COMPAR_FAIL = 12 #PTS_SmpFailureCase=0 # PTS Broadcast audio configuration option # Option: # lc3_stereo_48_1_2 # lc3_stereo_48_2_2 # lc3_stereo_48_3_2 # lc3_stereo_48_4_2 #PTS_BroadcastAudioConfigOption=lc3_stereo_48_1_2 system/internal_include/stack_config.h +1 −0 Original line number Diff line number Diff line Loading @@ -45,6 +45,7 @@ typedef struct { bool (*get_pts_l2cap_ecoc_connect_remaining)(void); 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); config_t* (*get_all)(void); } stack_config_t; Loading system/main/stack_config.cc +12 −0 Original line number Diff line number Diff line Loading @@ -47,6 +47,8 @@ const char* PTS_L2CAP_ECOC_INITIAL_CHAN_CNT = "PTS_L2capEcocInitialChanCnt"; const char* PTS_L2CAP_ECOC_CONNECT_REMAINING = "PTS_L2capEcocConnectRemaining"; 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"; static std::unique_ptr<config_t> config; } // namespace Loading Loading @@ -184,6 +186,15 @@ static bool get_pts_l2cap_ecoc_reconfigure(void) { PTS_L2CAP_ECOC_RECONFIGURE, false); } static const std::string* get_pts_broadcast_audio_config_options(void) { if (!config) { LOG_INFO("Config isn't ready, use default option"); return NULL; } return config_get_string(*config, CONFIG_DEFAULT_SECTION, PTS_BROADCAST_AUDIO_CONFIG_OPTION, NULL); } static config_t* get_all(void) { return config.get(); } const stack_config_t interface = {get_trace_config_enabled, Loading @@ -205,6 +216,7 @@ const stack_config_t interface = {get_trace_config_enabled, get_pts_l2cap_ecoc_connect_remaining, get_pts_l2cap_ecoc_send_num_of_sdu, get_pts_l2cap_ecoc_reconfigure, get_pts_broadcast_audio_config_options, get_all}; const stack_config_t* stack_config_get_interface(void) { return &interface; } Loading
system/bta/Android.bp +2 −0 Original line number Diff line number Diff line Loading @@ -720,6 +720,7 @@ cc_test { "le_audio/le_audio_types.cc", "le_audio/mock_iso_manager.cc", "le_audio/mock_codec_manager.cc", ":TestCommonStackConfig", ], shared_libs: [ "libprotobuf-cpp-lite", Loading Loading @@ -774,6 +775,7 @@ cc_test { "le_audio/mock_iso_manager.cc", "test/common/mock_controller.cc", "le_audio/mock_codec_manager.cc", ":TestCommonStackConfig", ], shared_libs: [ "libprotobuf-cpp-lite", Loading
system/bta/le_audio/broadcaster/broadcaster_types.cc +73 −0 Original line number Diff line number Diff line Loading @@ -23,6 +23,7 @@ #include "bta_le_audio_broadcaster_api.h" #include "btm_ble_api_types.h" #include "embdrv/lc3/include/lc3.h" #include "internal_include/stack_config.h" #include "osi/include/properties.h" using bluetooth::le_audio::BasicAudioAnnouncementBisConfig; Loading Loading @@ -223,6 +224,54 @@ static const BroadcastCodecWrapper lc3_stereo_24_2 = BroadcastCodecWrapper( // Frame len. 60); static const BroadcastCodecWrapper lc3_stereo_48_1 = BroadcastCodecWrapper( kLeAudioCodecIdLc3, // LeAudioCodecConfiguration {.num_channels = LeAudioCodecConfiguration::kChannelNumberStereo, .sample_rate = LeAudioCodecConfiguration::kSampleRate48000, .bits_per_sample = LeAudioCodecConfiguration::kBitsPerSample16, .data_interval_us = LeAudioCodecConfiguration::kInterval7500Us}, // Bitrate 80000, // Frame len. 75); static const BroadcastCodecWrapper lc3_stereo_48_2 = BroadcastCodecWrapper( kLeAudioCodecIdLc3, // LeAudioCodecConfiguration {.num_channels = LeAudioCodecConfiguration::kChannelNumberStereo, .sample_rate = LeAudioCodecConfiguration::kSampleRate48000, .bits_per_sample = LeAudioCodecConfiguration::kBitsPerSample16, .data_interval_us = LeAudioCodecConfiguration::kInterval10000Us}, // Bitrate 80000, // Frame len. 100); static const BroadcastCodecWrapper lc3_stereo_48_3 = BroadcastCodecWrapper( kLeAudioCodecIdLc3, // LeAudioCodecConfiguration {.num_channels = LeAudioCodecConfiguration::kChannelNumberStereo, .sample_rate = LeAudioCodecConfiguration::kSampleRate48000, .bits_per_sample = LeAudioCodecConfiguration::kBitsPerSample16, .data_interval_us = LeAudioCodecConfiguration::kInterval7500Us}, // Bitrate 96000, // Frame len. 90); static const BroadcastCodecWrapper lc3_stereo_48_4 = BroadcastCodecWrapper( kLeAudioCodecIdLc3, // LeAudioCodecConfiguration {.num_channels = LeAudioCodecConfiguration::kChannelNumberStereo, .sample_rate = LeAudioCodecConfiguration::kSampleRate48000, .bits_per_sample = LeAudioCodecConfiguration::kBitsPerSample16, .data_interval_us = LeAudioCodecConfiguration::kInterval10000Us}, // Bitrate 96000, // Frame len. 120); const std::map<uint32_t, uint8_t> sample_rate_to_sampling_freq_map = { {LeAudioCodecConfiguration::kSampleRate8000, codec_spec_conf::kLeAudioSamplingFreq8000Hz}, Loading Loading @@ -318,8 +367,12 @@ std::ostream& operator<<( static const BroadcastQosConfig qos_config_2_10 = BroadcastQosConfig(2, 10); static const BroadcastQosConfig qos_config_4_50 = BroadcastQosConfig(4, 50); static const BroadcastQosConfig qos_config_4_60 = BroadcastQosConfig(4, 60); static const BroadcastQosConfig qos_config_4_65 = BroadcastQosConfig(4, 65); std::ostream& operator<<( std::ostream& os, const le_audio::broadcaster::BroadcastQosConfig& config) { os << " BroadcastQosConfig=["; Loading @@ -344,8 +397,28 @@ static const std::pair<const BroadcastCodecWrapper&, const BroadcastQosConfig&> static const std::pair<const BroadcastCodecWrapper&, const BroadcastQosConfig&> lc3_stereo_24_2_2 = {lc3_stereo_24_2, qos_config_4_60}; static const std::pair<const BroadcastCodecWrapper&, const BroadcastQosConfig&> lc3_stereo_48_1_2 = {lc3_stereo_48_1, qos_config_4_50}; static const std::pair<const BroadcastCodecWrapper&, const BroadcastQosConfig&> lc3_stereo_48_2_2 = {lc3_stereo_48_2, qos_config_4_65}; static const std::pair<const BroadcastCodecWrapper&, const BroadcastQosConfig&> lc3_stereo_48_3_2 = {lc3_stereo_48_3, qos_config_4_50}; static const std::pair<const BroadcastCodecWrapper&, const BroadcastQosConfig&> lc3_stereo_48_4_2 = {lc3_stereo_48_4, qos_config_4_65}; std::pair<const BroadcastCodecWrapper&, const BroadcastQosConfig&> getStreamConfigForContext(uint16_t context) { const std::string* options = stack_config_get_interface()->get_pts_broadcast_audio_config_options(); if (options) { if (!options->compare("lc3_stereo_48_1_2")) return lc3_stereo_48_1_2; if (!options->compare("lc3_stereo_48_2_2")) return lc3_stereo_48_2_2; if (!options->compare("lc3_stereo_48_3_2")) return lc3_stereo_48_3_2; if (!options->compare("lc3_stereo_48_4_2")) return lc3_stereo_48_4_2; } // High quality, Low Latency auto contexts_stereo_24_2_1 = static_cast<std::underlying_type<LeAudioContextType>::type>( Loading
system/conf/bt_stack.conf +8 −0 Original line number Diff line number Diff line Loading @@ -113,3 +113,11 @@ TRC_HID_DEV=2 # SMP_NUMERIC_COMPAR_FAIL = 12 #PTS_SmpFailureCase=0 # PTS Broadcast audio configuration option # Option: # lc3_stereo_48_1_2 # lc3_stereo_48_2_2 # lc3_stereo_48_3_2 # lc3_stereo_48_4_2 #PTS_BroadcastAudioConfigOption=lc3_stereo_48_1_2
system/internal_include/stack_config.h +1 −0 Original line number Diff line number Diff line Loading @@ -45,6 +45,7 @@ typedef struct { bool (*get_pts_l2cap_ecoc_connect_remaining)(void); 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); config_t* (*get_all)(void); } stack_config_t; Loading
system/main/stack_config.cc +12 −0 Original line number Diff line number Diff line Loading @@ -47,6 +47,8 @@ const char* PTS_L2CAP_ECOC_INITIAL_CHAN_CNT = "PTS_L2capEcocInitialChanCnt"; const char* PTS_L2CAP_ECOC_CONNECT_REMAINING = "PTS_L2capEcocConnectRemaining"; 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"; static std::unique_ptr<config_t> config; } // namespace Loading Loading @@ -184,6 +186,15 @@ static bool get_pts_l2cap_ecoc_reconfigure(void) { PTS_L2CAP_ECOC_RECONFIGURE, false); } static const std::string* get_pts_broadcast_audio_config_options(void) { if (!config) { LOG_INFO("Config isn't ready, use default option"); return NULL; } return config_get_string(*config, CONFIG_DEFAULT_SECTION, PTS_BROADCAST_AUDIO_CONFIG_OPTION, NULL); } static config_t* get_all(void) { return config.get(); } const stack_config_t interface = {get_trace_config_enabled, Loading @@ -205,6 +216,7 @@ const stack_config_t interface = {get_trace_config_enabled, get_pts_l2cap_ecoc_connect_remaining, get_pts_l2cap_ecoc_send_num_of_sdu, get_pts_l2cap_ecoc_reconfigure, get_pts_broadcast_audio_config_options, get_all}; const stack_config_t* stack_config_get_interface(void) { return &interface; }