From dcd1707abac1c8773eea3b85c5ff5eaaddd4a115 Mon Sep 17 00:00:00 2001 From: Dirk Helbig Date: Thu, 7 Sep 2023 19:53:41 +0200 Subject: [PATCH] test/le_audio: support random addresses on broadcast if no local address is available --- test/le_audio/le_audio_broadcast_sink.c | 22 ++++++++++++++++++++-- test/le_audio/le_audio_broadcast_source.c | 22 ++++++++++++++++++++-- 2 files changed, 40 insertions(+), 4 deletions(-) diff --git a/test/le_audio/le_audio_broadcast_sink.c b/test/le_audio/le_audio_broadcast_sink.c index 55e5e828e..c2ce5239c 100644 --- a/test/le_audio/le_audio_broadcast_sink.c +++ b/test/le_audio/le_audio_broadcast_sink.c @@ -123,12 +123,12 @@ static const uint8_t adv_sid = 0; static le_advertising_set_t le_advertising_set; static uint8_t adv_handle = 0; -static const le_extended_advertising_parameters_t extended_params = { +static le_extended_advertising_parameters_t extended_params = { .advertising_event_properties = 1, // connectable .primary_advertising_interval_min = 0x4b0, // 750 ms .primary_advertising_interval_max = 0x4b0, // 750 ms .primary_advertising_channel_map = 7, - .own_address_type = 0, + .own_address_type = BD_ADDR_TYPE_LE_PUBLIC, .peer_address_type = 0, .peer_address = { 0 }, .advertising_filter_policy = 0, @@ -483,8 +483,26 @@ static void start_scanning() { printf("Start scan..\n"); } +static bool is_zero_bd_addr( bd_addr_t address ) { + int sum = 0; + for( int i=0; i<6; ++i ) { + sum += address[i]; + } + return (sum>0)?false:true; +} + static void setup_advertising() { + bd_addr_t local_addr; + gap_local_bd_addr(local_addr); + bool local_address_invalid = is_zero_bd_addr( local_addr ); + if( local_address_invalid ) { + extended_params.own_address_type = BD_ADDR_TYPE_LE_RANDOM; + } gap_extended_advertising_setup(&le_advertising_set, &extended_params, &adv_handle); + if( local_address_invalid ) { + bd_addr_t random_address = { 0xC1, 0x01, 0x01, 0x01, 0x01, 0x01 }; + gap_extended_advertising_set_random_address( adv_handle, random_address ); + } gap_extended_advertising_set_adv_data(adv_handle, sizeof(extended_adv_data), extended_adv_data); gap_extended_advertising_start(adv_handle, 0, 0); } diff --git a/test/le_audio/le_audio_broadcast_source.c b/test/le_audio/le_audio_broadcast_source.c index d9ddd23ac..4c13d71e5 100644 --- a/test/le_audio/le_audio_broadcast_source.c +++ b/test/le_audio/le_audio_broadcast_source.c @@ -76,12 +76,12 @@ static const uint8_t adv_sid = 0; static le_advertising_set_t le_advertising_set; -static const le_extended_advertising_parameters_t extended_params = { +static le_extended_advertising_parameters_t extended_params = { .advertising_event_properties = 0, .primary_advertising_interval_min = 0x4b0, // 750 ms .primary_advertising_interval_max = 0x4b0, // 750 ms .primary_advertising_channel_map = 7, - .own_address_type = 0, + .own_address_type = BD_ADDR_TYPE_LE_PUBLIC, .peer_address_type = 0, .peer_address = { 0 }, .advertising_filter_policy = 0, @@ -419,8 +419,26 @@ static void generate_audio_and_encode(void){ } } +static bool is_zero_bd_addr( bd_addr_t address ) { + int sum = 0; + for( int i=0; i<6; ++i ) { + sum += address[i]; + } + return (sum>0)?false:true; +} + static void setup_advertising() { + bd_addr_t local_addr; + gap_local_bd_addr(local_addr); + bool local_address_invalid = is_zero_bd_addr( local_addr ); + if( local_address_invalid ) { + extended_params.own_address_type = BD_ADDR_TYPE_LE_RANDOM; + } gap_extended_advertising_setup(&le_advertising_set, &extended_params, &adv_handle); + if( local_address_invalid ) { + bd_addr_t random_address = { 0xC1, 0x01, 0x01, 0x01, 0x01, 0x01 }; + gap_extended_advertising_set_random_address( adv_handle, random_address ); + } gap_extended_advertising_set_adv_data(adv_handle, sizeof(extended_adv_data), extended_adv_data); gap_periodic_advertising_set_params(adv_handle, &periodic_params); gap_periodic_advertising_set_data(adv_handle, period_adv_data_len, period_adv_data);