mirror of
https://github.com/bluekitchen/btstack.git
synced 2025-02-11 09:40:24 +00:00
test/le_audio: introduce broadcast source struct to broadcast assistant
This commit is contained in:
parent
28ef06ceb7
commit
c69fca8812
@ -72,7 +72,7 @@ static void show_usage(void);
|
|||||||
|
|
||||||
static enum {
|
static enum {
|
||||||
APP_W4_WORKING,
|
APP_W4_WORKING,
|
||||||
APP_W4_BROADCAST_SINK_AND_SCAN_DELEGATOR_ADV,
|
APP_W4_BROADCAST_SOURCE_AND_SCAN_DELEGATOR_ADV,
|
||||||
APP_W4_PA_AND_BIG_INFO,
|
APP_W4_PA_AND_BIG_INFO,
|
||||||
APP_W4_BIG_SYNC_ESTABLISHED,
|
APP_W4_BIG_SYNC_ESTABLISHED,
|
||||||
APP_W4_SCAN_DELEGATOR_CONNECTION,
|
APP_W4_SCAN_DELEGATOR_CONNECTION,
|
||||||
@ -90,12 +90,17 @@ static bool have_big_info;
|
|||||||
static bool manual_mode;
|
static bool manual_mode;
|
||||||
|
|
||||||
// broadcast sink info
|
// broadcast sink info
|
||||||
static char broadcast_source_name[20];
|
#define NUM_BROADCAST_SOURCES 5
|
||||||
static bd_addr_t broadcast_source;
|
#define BROADCAST_SOURCE_NAME_LEN 20
|
||||||
static bd_addr_type_t broadcast_source_type;
|
struct {
|
||||||
static uint8_t broadcast_source_sid;
|
char name[BROADCAST_SOURCE_NAME_LEN];
|
||||||
static uint32_t broadcast_id;
|
bd_addr_t addr;
|
||||||
static uint16_t broadcast_source_pa_interval;
|
bd_addr_type_t addr_type;
|
||||||
|
uint8_t sid;
|
||||||
|
uint32_t broadcast_id;
|
||||||
|
uint16_t pa_interval;
|
||||||
|
} broadcast_sources[NUM_BROADCAST_SOURCES];
|
||||||
|
static uint8_t broadcast_source_current = 0;
|
||||||
|
|
||||||
// broadcast info
|
// broadcast info
|
||||||
static hci_con_handle_t sync_handle;
|
static hci_con_handle_t sync_handle;
|
||||||
@ -228,7 +233,7 @@ static void handle_periodic_advertisement(const uint8_t * packet, uint16_t size)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void start_scanning() {
|
static void start_scanning() {
|
||||||
app_state = APP_W4_BROADCAST_SINK_AND_SCAN_DELEGATOR_ADV;
|
app_state = APP_W4_BROADCAST_SOURCE_AND_SCAN_DELEGATOR_ADV;
|
||||||
have_base = false;
|
have_base = false;
|
||||||
have_big_info = false;
|
have_big_info = false;
|
||||||
gap_set_scan_params(1, 0x30, 0x30, 0);
|
gap_set_scan_params(1, 0x30, 0x30, 0);
|
||||||
@ -259,12 +264,12 @@ static void handle_big_info(const uint8_t * packet, uint16_t size){
|
|||||||
|
|
||||||
static void add_source() {// setup bass source info
|
static void add_source() {// setup bass source info
|
||||||
printf("BASS Client: add source with BIS Sync 0x%04x\n", bass_source_data.subgroups[0].bis_sync_state);
|
printf("BASS Client: add source with BIS Sync 0x%04x\n", bass_source_data.subgroups[0].bis_sync_state);
|
||||||
bass_source_data.address_type = broadcast_source_type;
|
bass_source_data.address_type = broadcast_sources[broadcast_source_current].addr_type;
|
||||||
memcpy(bass_source_data.address, broadcast_source, 6);
|
memcpy(bass_source_data.address, broadcast_sources[broadcast_source_current].addr, 6);
|
||||||
bass_source_data.adv_sid = broadcast_source_sid;
|
bass_source_data.adv_sid = broadcast_sources[broadcast_source_current].sid;
|
||||||
bass_source_data.broadcast_id = broadcast_id;
|
bass_source_data.broadcast_id = broadcast_sources[broadcast_source_current].broadcast_id;
|
||||||
bass_source_data.pa_sync = LE_AUDIO_PA_SYNC_SYNCHRONIZE_TO_PA_PAST_AVAILABLE;
|
bass_source_data.pa_sync = LE_AUDIO_PA_SYNC_SYNCHRONIZE_TO_PA_PAST_AVAILABLE;
|
||||||
bass_source_data.pa_interval = broadcast_source_pa_interval;
|
bass_source_data.pa_interval = broadcast_sources[broadcast_source_current].pa_interval;
|
||||||
// bass_source_new.subgroups_num set in BASE parser
|
// bass_source_new.subgroups_num set in BASE parser
|
||||||
// bass_source_new.subgroup[i].* set in BASE parser
|
// bass_source_new.subgroup[i].* set in BASE parser
|
||||||
|
|
||||||
@ -351,9 +356,9 @@ static void le_audio_broadcast_assistant_start_periodic_sync() {
|
|||||||
gap_set_scan_params(1, 0x30, 0x30, 1);
|
gap_set_scan_params(1, 0x30, 0x30, 1);
|
||||||
// sync to PA
|
// sync to PA
|
||||||
gap_periodic_advertiser_list_clear();
|
gap_periodic_advertiser_list_clear();
|
||||||
gap_periodic_advertiser_list_add(broadcast_source_type, broadcast_source, broadcast_source_sid);
|
gap_periodic_advertiser_list_add(broadcast_sources[broadcast_source_current].addr_type, broadcast_sources[broadcast_source_current].addr, broadcast_sources[broadcast_source_current].sid);
|
||||||
app_state = APP_W4_PA_AND_BIG_INFO;
|
app_state = APP_W4_PA_AND_BIG_INFO;
|
||||||
gap_periodic_advertising_create_sync(0x01, broadcast_source_sid, broadcast_source_type, broadcast_source, 0, 1000, 0);
|
gap_periodic_advertising_create_sync(0x01, broadcast_sources[broadcast_source_current].sid, broadcast_sources[broadcast_source_current].addr_type, broadcast_sources[broadcast_source_current].addr, 0, 1000, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -456,7 +461,7 @@ static void packet_handler (uint8_t packet_type, uint16_t channel, uint8_t *pack
|
|||||||
uuid = little_endian_read_16(data, 0);
|
uuid = little_endian_read_16(data, 0);
|
||||||
switch (uuid){
|
switch (uuid){
|
||||||
case ORG_BLUETOOTH_SERVICE_BROADCAST_AUDIO_ANNOUNCEMENT_SERVICE:
|
case ORG_BLUETOOTH_SERVICE_BROADCAST_AUDIO_ANNOUNCEMENT_SERVICE:
|
||||||
broadcast_id = little_endian_read_24(data, 2);
|
broadcast_sources[broadcast_source_current].broadcast_id = little_endian_read_24(data, 2);
|
||||||
found_broadcast_source = true;
|
found_broadcast_source = true;
|
||||||
break;
|
break;
|
||||||
case ORG_BLUETOOTH_SERVICE_BROADCAST_AUDIO_SCAN_SERVICE:
|
case ORG_BLUETOOTH_SERVICE_BROADCAST_AUDIO_SCAN_SERVICE:
|
||||||
@ -489,12 +494,12 @@ static void packet_handler (uint8_t packet_type, uint16_t channel, uint8_t *pack
|
|||||||
|
|
||||||
if ((have_broadcast_source == false) && found_broadcast_source){
|
if ((have_broadcast_source == false) && found_broadcast_source){
|
||||||
have_broadcast_source = true;
|
have_broadcast_source = true;
|
||||||
gap_event_extended_advertising_report_get_address(packet, broadcast_source);
|
gap_event_extended_advertising_report_get_address(packet, broadcast_sources[broadcast_source_current].addr);
|
||||||
broadcast_source_type = gap_event_extended_advertising_report_get_address_type(packet);
|
broadcast_sources[broadcast_source_current].addr_type = gap_event_extended_advertising_report_get_address_type(packet);
|
||||||
broadcast_source_sid = gap_event_extended_advertising_report_get_advertising_sid(packet);
|
broadcast_sources[broadcast_source_current].sid = gap_event_extended_advertising_report_get_advertising_sid(packet);
|
||||||
btstack_strcpy(broadcast_source_name, sizeof(broadcast_source_name), (const char *) adv_name);
|
btstack_strcpy(broadcast_sources[broadcast_source_current].name, BROADCAST_SOURCE_NAME_LEN, (const char *) adv_name);
|
||||||
printf("Broadcast source found, addr %s, name: '%s'\n", bd_addr_to_str(broadcast_source), broadcast_source_name);
|
printf("Broadcast source found, addr %s, name: '%s'\n", bd_addr_to_str(broadcast_sources[broadcast_source_current].addr), broadcast_sources[broadcast_source_current].name);
|
||||||
gap_whitelist_add(broadcast_source_type, broadcast_source);
|
gap_whitelist_add(broadcast_sources[broadcast_source_current].addr_type, broadcast_sources[broadcast_source_current].addr);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((have_broadcast_source && have_scan_delegator) == false) break;
|
if ((have_broadcast_source && have_scan_delegator) == false) break;
|
||||||
@ -507,7 +512,7 @@ static void packet_handler (uint8_t packet_type, uint16_t channel, uint8_t *pack
|
|||||||
switch(hci_event_le_meta_get_subevent_code(packet)) {
|
switch(hci_event_le_meta_get_subevent_code(packet)) {
|
||||||
case HCI_SUBEVENT_LE_PERIODIC_ADVERTISING_SYNC_ESTABLISHMENT:
|
case HCI_SUBEVENT_LE_PERIODIC_ADVERTISING_SYNC_ESTABLISHMENT:
|
||||||
sync_handle = hci_subevent_le_periodic_advertising_sync_establishment_get_sync_handle(packet);
|
sync_handle = hci_subevent_le_periodic_advertising_sync_establishment_get_sync_handle(packet);
|
||||||
broadcast_source_pa_interval = hci_subevent_le_periodic_advertising_sync_establishment_get_periodic_advertising_interval(packet);
|
broadcast_sources[broadcast_source_current].pa_interval = hci_subevent_le_periodic_advertising_sync_establishment_get_periodic_advertising_interval(packet);
|
||||||
printf("Periodic advertising sync with handle 0x%04x established\n", sync_handle);
|
printf("Periodic advertising sync with handle 0x%04x established\n", sync_handle);
|
||||||
break;
|
break;
|
||||||
case HCI_SUBEVENT_LE_PERIODIC_ADVERTISING_REPORT:
|
case HCI_SUBEVENT_LE_PERIODIC_ADVERTISING_REPORT:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user