mirror of
https://github.com/bluekitchen/btstack.git
synced 2025-03-20 10:20:48 +00:00
hfp: handle accept sco connection in hfp_hf
This commit is contained in:
parent
e0780573cb
commit
1b005648b2
@ -106,18 +106,12 @@ static btstack_packet_handler_t hfp_ag_callback;
|
|||||||
static btstack_packet_handler_t hfp_hf_rfcomm_packet_handler;
|
static btstack_packet_handler_t hfp_hf_rfcomm_packet_handler;
|
||||||
static btstack_packet_handler_t hfp_ag_rfcomm_packet_handler;
|
static btstack_packet_handler_t hfp_ag_rfcomm_packet_handler;
|
||||||
|
|
||||||
|
static void (*hfp_hf_run_for_context)(hfp_connection_t * hfp_connection);
|
||||||
|
|
||||||
static btstack_packet_callback_registration_t hci_event_callback_registration;
|
static btstack_packet_callback_registration_t hci_event_callback_registration;
|
||||||
|
|
||||||
static hfp_connection_t * sco_establishment_active;
|
static hfp_connection_t * sco_establishment_active;
|
||||||
|
|
||||||
void hfp_set_hf_callback(btstack_packet_handler_t callback){
|
|
||||||
hfp_hf_callback = callback;
|
|
||||||
}
|
|
||||||
|
|
||||||
void hfp_set_ag_callback(btstack_packet_handler_t callback){
|
|
||||||
hfp_ag_callback = callback;
|
|
||||||
}
|
|
||||||
|
|
||||||
const char * hfp_hf_feature(int index){
|
const char * hfp_hf_feature(int index){
|
||||||
if (index > HFP_HF_FEATURES_SIZE){
|
if (index > HFP_HF_FEATURES_SIZE){
|
||||||
return hfp_hf_features[HFP_HF_FEATURES_SIZE];
|
return hfp_hf_features[HFP_HF_FEATURES_SIZE];
|
||||||
@ -580,15 +574,18 @@ void hfp_handle_hci_event(uint8_t packet_type, uint16_t channel, uint8_t *packet
|
|||||||
log_debug("HFP packet_handler type %u, event type %x, size %u", packet_type, hci_event_packet_get_type(packet), size);
|
log_debug("HFP packet_handler type %u, event type %x, size %u", packet_type, hci_event_packet_get_type(packet), size);
|
||||||
|
|
||||||
switch (hci_event_packet_get_type(packet)) {
|
switch (hci_event_packet_get_type(packet)) {
|
||||||
|
|
||||||
case HCI_EVENT_CONNECTION_REQUEST:
|
case HCI_EVENT_CONNECTION_REQUEST:
|
||||||
// printf("hfp HCI_EVENT_CONNECTION_REQUEST\n");
|
|
||||||
switch(hci_event_connection_request_get_link_type(packet)){
|
switch(hci_event_connection_request_get_link_type(packet)){
|
||||||
case 0: // SCO
|
case 0: // SCO
|
||||||
case 2: // eSCO
|
case 2: // eSCO
|
||||||
hci_event_connection_request_get_bd_addr(packet, event_addr);
|
hci_event_connection_request_get_bd_addr(packet, event_addr);
|
||||||
hfp_connection = get_hfp_connection_context_for_bd_addr(event_addr);
|
hfp_connection = get_hfp_connection_context_for_bd_addr(event_addr);
|
||||||
if (!hfp_connection) break;
|
if (!hfp_connection) break;
|
||||||
|
log_info("hf accept sco\n");
|
||||||
hfp_connection->hf_accept_sco = 1;
|
hfp_connection->hf_accept_sco = 1;
|
||||||
|
if (!hfp_hf_run_for_context) break;
|
||||||
|
(*hfp_hf_run_for_context)(hfp_connection);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
@ -1490,13 +1487,26 @@ void hfp_setup_synchronous_connection(hfp_connection_t * hfp_connection){
|
|||||||
sco_voice_setting, hfp_link_settings[setting].retransmission_effort, hfp_link_settings[setting].packet_types); // all types 0x003f, only 2-ev3 0x380
|
sco_voice_setting, hfp_link_settings[setting].retransmission_effort, hfp_link_settings[setting].packet_types); // all types 0x003f, only 2-ev3 0x380
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void hfp_set_hf_callback(btstack_packet_handler_t callback){
|
||||||
|
hfp_hf_callback = callback;
|
||||||
|
}
|
||||||
|
|
||||||
|
void hfp_set_ag_callback(btstack_packet_handler_t callback){
|
||||||
|
hfp_ag_callback = callback;
|
||||||
|
}
|
||||||
|
|
||||||
void hfp_set_ag_rfcomm_packet_handler(btstack_packet_handler_t handler){
|
void hfp_set_ag_rfcomm_packet_handler(btstack_packet_handler_t handler){
|
||||||
hfp_ag_rfcomm_packet_handler = handler;
|
hfp_ag_rfcomm_packet_handler = handler;
|
||||||
}
|
}
|
||||||
|
|
||||||
void hfp_set_hf_rfcomm_packet_handler(btstack_packet_handler_t handler){
|
void hfp_set_hf_rfcomm_packet_handler(btstack_packet_handler_t handler){
|
||||||
hfp_hf_rfcomm_packet_handler = handler;
|
hfp_hf_rfcomm_packet_handler = handler;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void hfp_set_hf_run_for_context(void (*callback)(hfp_connection_t * hfp_connection)){
|
||||||
|
hfp_hf_run_for_context = callback;
|
||||||
|
}
|
||||||
|
|
||||||
static void packet_handler(uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size){
|
static void packet_handler(uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size){
|
||||||
hfp_handle_hci_event(packet_type, channel, packet, size, HFP_ROLE_INVALID);
|
hfp_handle_hci_event(packet_type, channel, packet, size, HFP_ROLE_INVALID);
|
||||||
}
|
}
|
||||||
|
@ -647,6 +647,7 @@ void hfp_set_ag_rfcomm_packet_handler(btstack_packet_handler_t handler);
|
|||||||
|
|
||||||
void hfp_set_hf_callback(btstack_packet_handler_t callback);
|
void hfp_set_hf_callback(btstack_packet_handler_t callback);
|
||||||
void hfp_set_hf_rfcomm_packet_handler(btstack_packet_handler_t handler);
|
void hfp_set_hf_rfcomm_packet_handler(btstack_packet_handler_t handler);
|
||||||
|
void hfp_set_hf_run_for_context(void (*callbcack)(hfp_connection_t * hfp_connection));
|
||||||
|
|
||||||
void hfp_init(void);
|
void hfp_init(void);
|
||||||
|
|
||||||
|
@ -1100,6 +1100,7 @@ void hfp_hf_init(uint16_t rfcomm_channel_nr){
|
|||||||
|
|
||||||
rfcomm_register_service(rfcomm_packet_handler, rfcomm_channel_nr, 0xffff);
|
rfcomm_register_service(rfcomm_packet_handler, rfcomm_channel_nr, 0xffff);
|
||||||
hfp_set_hf_rfcomm_packet_handler(&rfcomm_packet_handler);
|
hfp_set_hf_rfcomm_packet_handler(&rfcomm_packet_handler);
|
||||||
|
hfp_set_hf_run_for_context(hfp_run_for_context);
|
||||||
|
|
||||||
hfp_supported_features = HFP_DEFAULT_HF_SUPPORTED_FEATURES;
|
hfp_supported_features = HFP_DEFAULT_HF_SUPPORTED_FEATURES;
|
||||||
hfp_codecs_nr = 0;
|
hfp_codecs_nr = 0;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user