test/le-audio: use base builder

This commit is contained in:
Matthias Ringwald 2022-10-03 15:49:08 +02:00
parent 5c0702ea97
commit 4a06e23f2e

View File

@ -56,6 +56,7 @@
#include "hci_dump.h"
#include "btstack_lc3.h"
#include "btstack_lc3_google.h"
#include "le-audio/le_audio_base_builder.h"
#include "hxcmod.h"
#include "mods/mod.h"
@ -117,60 +118,6 @@ static const le_periodic_advertising_parameters_t periodic_params = {
.periodic_advertising_properties = 0
};
static uint8_t periodic_adv_data_1[] = {
// 16 bit service data
37, BLUETOOTH_DATA_TYPE_SERVICE_DATA_16_BIT_UUID,
// Level 1 - BIG Parameters (common to all BISes)
0x51, 0x18, // Basic Audio Announcement Service UUID
0x28, 0x00, 0x00, // Presentation Delay 3
0x01, // Num_Subgroups
// Level 2 - BIS Subgroup Parameters (common parameters for subgroups of BISes)
// offset 8
0x01, // The number of BISes in this subgroup
0x06, 0x00, 0x00, 0x00, 0x00, // 0x06 = LC3, vendor id + codec id = 0
10, // Codec_Specific_Configuration_Length[i]
// Codec_Specific_Configuration[i] = 8_2
// offset 15
0x02, 0x01, 0x01, // Sampling frequency 0x01 = 0x01 / 8 kHz
0x02, 0x02, 0x01, // Frame Duration 0x02 = 0x01 / 10 ms
0x03, 0x04, 0x1E, 0x00, // Octets per Frame 0x04 = 0x1e / 30
4, // Metadata_Length[i]
0x03, 0x02, 0x04, 0x00, // Metadata[i]
// Level 3 - Specific BIS Parameters (if required, for individual BISes)
0x01, // BIS_index[i[k]]
6, // Codec_Specific_Configuration_Length[i[k]]
0x05, 0x03, 0x01, 0x00, 0x00, 0x00 // Codec_Specific_Configuration[i[k]]
};
static uint8_t periodic_adv_data_2[] = {
// 16 bit service data
37+8, BLUETOOTH_DATA_TYPE_SERVICE_DATA_16_BIT_UUID,
// Level 1 - BIG Parameters (common to all BISes)
0x51, 0x18, // Basic Audio Announcement Service UUID
0x28, 0x00, 0x00, // Presentation Delay 3
0x01, // Num_Subgroups
// Level 2 - BIS Subgroup Parameters (common parameters for subgroups of BISes)
// offset 8
0x02, // The number of BISes in this subgroup
0x06, 0x00, 0x00, 0x00, 0x00, // 0x06 = LC3, vendor id + codec id = 0
10, // Codec_Specific_Configuration_Length[i]
// Codec_Specific_Configuration[0] = 8_2
// offset 15
0x02, 0x01, 0x01, // Sampling frequency 0x01 = 0x01 / 8 kHz
0x02, 0x02, 0x01, // Frame Duration 0x02 = 0x01 / 10 ms
0x03, 0x04, 0x1E, 0x00, // Octets per Frame 0x04 = 0x1e / 30
4, // Metadata_Length[i]
0x03, 0x02, 0x04, 0x00, // Metadata[0]
// Level 3 - Specific BIS Parameters (if required, for individual BISes)
0x01, // BIS_index[i[k]]
6, // Codec_Specific_Configuration_Length[i[k]]
0x05, 0x03, 0x01, 0x00, 0x00, 0x00, // Codec_Specific_Configuration[i[k]]
// Level 3 - Specific BIS Parameters (if required, for individual BISes)
0x02, // BIS_index[i[k]]
6, // Codec_Specific_Configuration_Length[i[k]]
0x05, 0x03, 0x02, 0x00, 0x00, 0x00 // Codec_Specific_Configuration[i[k]]
};
// input signal: pre-computed int16 sine wave, 96000 Hz at 300 Hz
static const int16_t sine_int16[] = {
0, 643, 1286, 1929, 2571, 3212, 3851, 4489, 5126, 5760,
@ -211,6 +158,8 @@ static bd_addr_t remote;
static const char * remote_addr_string = "00:1B:DC:08:E2:72";
static btstack_packet_callback_registration_t hci_event_callback_registration;
static uint8_t period_adv_data[255];
static uint16_t period_adv_data_len;
static uint8_t adv_handle = 0;
static unsigned int next_bis_index;
@ -475,21 +424,7 @@ static void setup_advertising() {
gap_extended_advertising_setup(&le_advertising_set, &extended_params, &adv_handle);
gap_extended_advertising_set_adv_data(adv_handle, sizeof(extended_adv_data), extended_adv_data);
gap_periodic_advertising_set_params(adv_handle, &periodic_params);
switch(num_bis){
case 1:
gap_periodic_advertising_set_data(adv_handle, sizeof(periodic_adv_data_1), periodic_adv_data_1);
printf("BASE: ");
printf_hexdump(periodic_adv_data_1, sizeof(periodic_adv_data_1));
break;
case 2:
gap_periodic_advertising_set_data(adv_handle, sizeof(periodic_adv_data_2), periodic_adv_data_2);
printf("BASE: ");
printf_hexdump(periodic_adv_data_2, sizeof(periodic_adv_data_2));
break;
default:
btstack_unreachable();
break;
}
gap_periodic_advertising_set_data(adv_handle, period_adv_data_len, period_adv_data);
gap_periodic_advertising_start(adv_handle, 0);
gap_extended_advertising_start(adv_handle, 0, 0);
}
@ -531,14 +466,38 @@ static void start_broadcast() {// use values from table
// get num samples per frame
setup_lc3_encoder();
// update BASEs
periodic_adv_data_1[17] = codec_configurations[menu_sampling_frequency].samplingrate_index;
periodic_adv_data_1[20] = (frame_duration == BTSTACK_LC3_FRAME_DURATION_7500US) ? 0 : 1;
little_endian_store_16(periodic_adv_data_1, 23, octets_per_frame);
periodic_adv_data_2[17] = codec_configurations[menu_sampling_frequency].samplingrate_index;
periodic_adv_data_2[20] = (frame_duration == BTSTACK_LC3_FRAME_DURATION_7500US) ? 0 : 1;
little_endian_store_16(periodic_adv_data_2, 23, octets_per_frame);
// setup base
uint8_t codec_id[] = { 0x06, 0x00, 0x00, 0x00, 0x00 };
uint8_t subgroup_codec_specific_configuration[] = {
0x02, 0x01, 0x01,
0x02, 0x02, 0x01,
0x03, 0x04, 0x1E, 0x00,
};
subgroup_codec_specific_configuration[2] = codec_configurations[menu_sampling_frequency].samplingrate_index;
subgroup_codec_specific_configuration[5] = (frame_duration == BTSTACK_LC3_FRAME_DURATION_7500US) ? 0 : 1;;
uint8_t subgroup_metadata[] = {
0x03, 0x02, 0x04, 0x00, // Metadata[i]
};
little_endian_store_16(subgroup_codec_specific_configuration, 8, octets_per_frame);
uint8_t bis_codec_specific_configuration_1[] = {
0x05, 0x03, 0x01, 0x00, 0x00, 0x00
};
uint8_t bis_codec_specific_configuration_2[] = {
0x05, 0x03, 0x02, 0x00, 0x00, 0x00
};
base_builder_t builder;
le_audio_base_builder_init(&builder, period_adv_data, sizeof(period_adv_data), 40);
le_audio_base_builder_add_subgroup(&builder, codec_id,
sizeof(subgroup_codec_specific_configuration),
subgroup_codec_specific_configuration,
sizeof(subgroup_metadata), subgroup_metadata);
le_audio_base_builder_add_bis(&builder, 1, sizeof(bis_codec_specific_configuration_1),
bis_codec_specific_configuration_1);
if (num_bis == 2){
le_audio_base_builder_add_bis(&builder, 2, sizeof(bis_codec_specific_configuration_2),
bis_codec_specific_configuration_2);
}
period_adv_data_len = le_audio_base_builder_get_ad_data_size(&builder);
// setup mod player
setup_mod_player();