mirror of
https://github.com/bluekitchen/btstack.git
synced 2025-02-11 09:40:24 +00:00
test/le_audio: support extended advertisements in unicast headset
This commit is contained in:
parent
8282d308a8
commit
6b977eba66
@ -165,48 +165,7 @@ static void enter_streaming(void){
|
||||
printf("Configure: %u channels, sampling rate %u, samples per frame %u\n", num_channels, sampling_frequency_hz, number_samples_per_frame);
|
||||
}
|
||||
|
||||
|
||||
static void packet_handler (uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size){
|
||||
UNUSED(channel);
|
||||
bd_addr_t event_addr;
|
||||
hci_con_handle_t cis_handle;
|
||||
unsigned int i;
|
||||
uint8_t status;
|
||||
if (packet_type != HCI_EVENT_PACKET) return;
|
||||
switch (packet[0]) {
|
||||
case BTSTACK_EVENT_STATE:
|
||||
switch(btstack_event_state_get_state(packet)) {
|
||||
case HCI_STATE_WORKING:
|
||||
#ifdef ENABLE_DEMO_MODE
|
||||
if (app_state != APP_W4_WORKING) break;
|
||||
start_scanning();
|
||||
#else
|
||||
show_usage();
|
||||
#endif
|
||||
break;
|
||||
case HCI_STATE_OFF:
|
||||
printf("Goodbye\n");
|
||||
exit(0);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case HCI_EVENT_DISCONNECTION_COMPLETE:
|
||||
if (hci_event_disconnection_complete_get_connection_handle(packet) == remote_handle){
|
||||
printf("Disconnected, back to scanning\n");
|
||||
le_audio_demo_util_sink_close();
|
||||
start_scanning();
|
||||
}
|
||||
break;
|
||||
case GAP_EVENT_ADVERTISING_REPORT:
|
||||
{
|
||||
if (app_state != APP_W4_SOURCE_ADV) break;
|
||||
|
||||
gap_event_advertising_report_get_address(packet, remote_addr);
|
||||
uint8_t adv_size = gap_event_advertising_report_get_data_length(packet);
|
||||
const uint8_t * adv_data = gap_event_advertising_report_get_data(packet);
|
||||
|
||||
static void handle_advertisement(bd_addr_type_t address_type, bd_addr_t address, uint8_t adv_size, const uint8_t * adv_data){
|
||||
ad_context_t context;
|
||||
bool found = false;
|
||||
remote_name[0] = '\0';
|
||||
@ -248,16 +207,70 @@ static void packet_handler (uint8_t packet_type, uint16_t channel, uint8_t *pack
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!found) break;
|
||||
remote_type = gap_event_advertising_report_get_address_type(packet);
|
||||
if (!found) return;
|
||||
|
||||
memcpy(remote_addr, address, 6);
|
||||
remote_type = address_type;
|
||||
printf("Remote Unicast source found, addr %s, name: '%s'\n", bd_addr_to_str(remote_addr), remote_name);
|
||||
|
||||
// stop scanning
|
||||
app_state = APP_W4_CIS_CREATED;
|
||||
gap_stop_scan();
|
||||
gap_connect(remote_addr, remote_type);
|
||||
break;
|
||||
}
|
||||
|
||||
static void packet_handler (uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size){
|
||||
UNUSED(channel);
|
||||
bd_addr_t event_addr;
|
||||
bd_addr_type_t event_addr_type;
|
||||
hci_con_handle_t cis_handle;
|
||||
unsigned int i;
|
||||
uint8_t status;
|
||||
if (packet_type != HCI_EVENT_PACKET) return;
|
||||
switch (packet[0]) {
|
||||
case BTSTACK_EVENT_STATE:
|
||||
switch(btstack_event_state_get_state(packet)) {
|
||||
case HCI_STATE_WORKING:
|
||||
#ifdef ENABLE_DEMO_MODE
|
||||
if (app_state != APP_W4_WORKING) break;
|
||||
start_scanning();
|
||||
#else
|
||||
show_usage();
|
||||
#endif
|
||||
break;
|
||||
case HCI_STATE_OFF:
|
||||
printf("Goodbye\n");
|
||||
exit(0);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case HCI_EVENT_DISCONNECTION_COMPLETE:
|
||||
if (hci_event_disconnection_complete_get_connection_handle(packet) == remote_handle){
|
||||
printf("Disconnected, back to scanning\n");
|
||||
le_audio_demo_util_sink_close();
|
||||
start_scanning();
|
||||
}
|
||||
break;
|
||||
case GAP_EVENT_ADVERTISING_REPORT:
|
||||
if (app_state == APP_W4_SOURCE_ADV) {
|
||||
gap_event_advertising_report_get_address(packet, event_addr);
|
||||
event_addr_type = gap_event_advertising_report_get_address_type(packet);
|
||||
uint8_t adv_size = gap_event_advertising_report_get_data_length(packet);
|
||||
const uint8_t * adv_data = gap_event_advertising_report_get_data(packet);
|
||||
handle_advertisement(event_addr_type, event_addr, adv_size, adv_data);
|
||||
}
|
||||
break;
|
||||
case GAP_EVENT_EXTENDED_ADVERTISING_REPORT:
|
||||
if (app_state == APP_W4_SOURCE_ADV) {
|
||||
gap_event_extended_advertising_report_get_address(packet, event_addr);
|
||||
event_addr_type = gap_event_extended_advertising_report_get_address_type(packet) & 1;
|
||||
uint8_t adv_size = gap_event_extended_advertising_report_get_data_length(packet);
|
||||
const uint8_t * adv_data = gap_event_extended_advertising_report_get_data(packet);
|
||||
handle_advertisement(event_addr_type, event_addr, adv_size, adv_data);
|
||||
}
|
||||
break;
|
||||
case HCI_EVENT_META_GAP:
|
||||
switch (hci_event_gap_meta_get_subevent_code(packet)){
|
||||
case GAP_SUBEVENT_LE_CONNECTION_COMPLETE:
|
||||
|
Loading…
x
Reference in New Issue
Block a user