mirror of
https://github.com/espressif/esp-idf.git
synced 2024-10-05 20:47:46 -04:00
Merge branch 'bugfix/spp_connect_20_fail' into 'master'
component_bt: fix spp acceptor deadlock Closes IDFGH-5172 See merge request espressif/esp-idf!13940
This commit is contained in:
commit
d685e85ff4
@ -177,30 +177,16 @@ bool hci_hal_h4_task_post(uint32_t timeout)
|
|||||||
|
|
||||||
#if (C2H_FLOW_CONTROL_INCLUDED == TRUE)
|
#if (C2H_FLOW_CONTROL_INCLUDED == TRUE)
|
||||||
static void hci_packet_complete(BT_HDR *packet){
|
static void hci_packet_complete(BT_HDR *packet){
|
||||||
uint8_t type, num_handle;
|
uint8_t type;
|
||||||
uint16_t handle;
|
uint16_t handle;
|
||||||
uint16_t handles[MAX_L2CAP_LINKS + 4];
|
uint16_t num_packets = 1;
|
||||||
uint16_t num_packets[MAX_L2CAP_LINKS + 4];
|
|
||||||
uint8_t *stream = packet->data + packet->offset;
|
uint8_t *stream = packet->data + packet->offset;
|
||||||
tL2C_LCB *p_lcb = NULL;
|
|
||||||
|
|
||||||
STREAM_TO_UINT8(type, stream);
|
STREAM_TO_UINT8(type, stream);
|
||||||
if (type == DATA_TYPE_ACL/* || type == DATA_TYPE_SCO*/) {
|
if (type == DATA_TYPE_ACL/* || type == DATA_TYPE_SCO*/) {
|
||||||
STREAM_TO_UINT16(handle, stream);
|
STREAM_TO_UINT16(handle, stream);
|
||||||
handle = handle & HCI_DATA_HANDLE_MASK;
|
handle = handle & HCI_DATA_HANDLE_MASK;
|
||||||
p_lcb = l2cu_find_lcb_by_handle(handle);
|
btsnd_hcic_host_num_xmitted_pkts(1, &handle, &num_packets);
|
||||||
if (p_lcb) {
|
|
||||||
p_lcb->completed_packets++;
|
|
||||||
}
|
|
||||||
if (esp_vhci_host_check_send_available()){
|
|
||||||
num_handle = l2cu_find_completed_packets(handles, num_packets);
|
|
||||||
if (num_handle > 0){
|
|
||||||
btsnd_hcic_host_num_xmitted_pkts (num_handle, handles, num_packets);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
//Send HCI_Host_Number_of_Completed_Packets next time.
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif ///C2H_FLOW_CONTROL_INCLUDED == TRUE
|
#endif ///C2H_FLOW_CONTROL_INCLUDED == TRUE
|
||||||
|
@ -381,7 +381,6 @@ typedef struct t_l2c_linkcb {
|
|||||||
BOOLEAN is_aux; /* This variable used for BLE 5.0 or higher version when do auxiliary connection */
|
BOOLEAN is_aux; /* This variable used for BLE 5.0 or higher version when do auxiliary connection */
|
||||||
TIMER_LIST_ENT timer_entry; /* Timer list entry for timeout evt */
|
TIMER_LIST_ENT timer_entry; /* Timer list entry for timeout evt */
|
||||||
UINT16 handle; /* The handle used with LM */
|
UINT16 handle; /* The handle used with LM */
|
||||||
UINT16 completed_packets; /* The number of conpleted packets */
|
|
||||||
|
|
||||||
tL2C_CCB_Q ccb_queue; /* Queue of CCBs on this LCB */
|
tL2C_CCB_Q ccb_queue; /* Queue of CCBs on this LCB */
|
||||||
|
|
||||||
@ -677,10 +676,6 @@ extern void l2cu_send_peer_ble_credit_based_disconn_req(tL2C_CCB *p_ccb);
|
|||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if (C2H_FLOW_CONTROL_INCLUDED == TRUE)
|
|
||||||
extern UINT8 l2cu_find_completed_packets(UINT16 *handles, UINT16 *num_packets);
|
|
||||||
#endif ///C2H_FLOW_CONTROL_INCLUDED == TRUE
|
|
||||||
|
|
||||||
extern BOOLEAN l2cu_initialize_fixed_ccb (tL2C_LCB *p_lcb, UINT16 fixed_cid, tL2CAP_FCR_OPTS *p_fcr);
|
extern BOOLEAN l2cu_initialize_fixed_ccb (tL2C_LCB *p_lcb, UINT16 fixed_cid, tL2CAP_FCR_OPTS *p_fcr);
|
||||||
extern void l2cu_no_dynamic_ccbs (tL2C_LCB *p_lcb);
|
extern void l2cu_no_dynamic_ccbs (tL2C_LCB *p_lcb);
|
||||||
extern void l2cu_process_fixed_chnl_resp (tL2C_LCB *p_lcb);
|
extern void l2cu_process_fixed_chnl_resp (tL2C_LCB *p_lcb);
|
||||||
|
@ -112,9 +112,6 @@ tL2C_LCB *l2cu_allocate_lcb (BD_ADDR p_bd_addr, BOOLEAN is_bonding, tBT_TRANSPOR
|
|||||||
l2c_link_adjust_allocation();
|
l2c_link_adjust_allocation();
|
||||||
}
|
}
|
||||||
p_lcb->link_xmit_data_q = list_new(NULL);
|
p_lcb->link_xmit_data_q = list_new(NULL);
|
||||||
#if (C2H_FLOW_CONTROL_INCLUDED == TRUE)
|
|
||||||
p_lcb->completed_packets = 0;
|
|
||||||
#endif ///C2H_FLOW_CONTROL_INCLUDED == TRUE
|
|
||||||
return (p_lcb);
|
return (p_lcb);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -289,10 +286,6 @@ void l2cu_release_lcb (tL2C_LCB *p_lcb)
|
|||||||
p_lcb->le_sec_pending_q = NULL;
|
p_lcb->le_sec_pending_q = NULL;
|
||||||
}
|
}
|
||||||
#endif ///BLE_INCLUDED == TRUE
|
#endif ///BLE_INCLUDED == TRUE
|
||||||
|
|
||||||
#if (C2H_FLOW_CONTROL_INCLUDED == TRUE)
|
|
||||||
p_lcb->completed_packets = 0;
|
|
||||||
#endif ///C2H_FLOW_CONTROL_INCLUDED == TRUE
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -3204,36 +3197,6 @@ void l2cu_send_peer_ble_credit_based_disconn_req(tL2C_CCB *p_ccb)
|
|||||||
|
|
||||||
#endif /* BLE_INCLUDED == TRUE */
|
#endif /* BLE_INCLUDED == TRUE */
|
||||||
|
|
||||||
#if (C2H_FLOW_CONTROL_INCLUDED == TRUE)
|
|
||||||
/*******************************************************************************
|
|
||||||
**
|
|
||||||
** Function l2cu_find_completed_packets
|
|
||||||
**
|
|
||||||
** Description Find the completed packets,
|
|
||||||
** Then set it to zero
|
|
||||||
**
|
|
||||||
** Returns The num of handles
|
|
||||||
**
|
|
||||||
*******************************************************************************/
|
|
||||||
UINT8 l2cu_find_completed_packets(UINT16 *handles, UINT16 *num_packets)
|
|
||||||
{
|
|
||||||
UINT8 num = 0;
|
|
||||||
list_node_t *p_node = NULL;
|
|
||||||
tL2C_LCB *p_lcb = NULL;
|
|
||||||
for (p_node = list_begin(l2cb.p_lcb_pool); p_node; p_node = list_next(p_node)) {
|
|
||||||
p_lcb = list_node(p_node);
|
|
||||||
if ((p_lcb->in_use) && (p_lcb->completed_packets > 0)) {
|
|
||||||
*(handles++) = p_lcb->handle;
|
|
||||||
*(num_packets++) = p_lcb->completed_packets;
|
|
||||||
num++;
|
|
||||||
p_lcb->completed_packets = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return num;
|
|
||||||
}
|
|
||||||
#endif ///C2H_FLOW_CONTROL_INCLUDED == TRUE
|
|
||||||
|
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
** Functions used by both Full and Light Stack
|
** Functions used by both Full and Light Stack
|
||||||
********************************************************************************/
|
********************************************************************************/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user