diff --git a/components/bt/bluedroid/bta/gatt/bta_gattc_act.c b/components/bt/bluedroid/bta/gatt/bta_gattc_act.c index 159baa0632..03338bf255 100644 --- a/components/bt/bluedroid/bta/gatt/bta_gattc_act.c +++ b/components/bt/bluedroid/bta/gatt/bta_gattc_act.c @@ -1451,6 +1451,11 @@ void bta_gattc_q_cmd(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data) bta_gattc_enqueue(p_clcb, p_data); } +void bta_gattc_pop_command_to_send(tBTA_GATTC_CLCB *p_clcb) +{ + tBTA_GATTC_DATA *p_data = +} + /******************************************************************************* ** ** Function bta_gattc_fail diff --git a/components/bt/bluedroid/bta/gatt/bta_gattc_utils.c b/components/bt/bluedroid/bta/gatt/bta_gattc_utils.c index dfa685f67d..afb89cc34f 100644 --- a/components/bt/bluedroid/bta/gatt/bta_gattc_utils.c +++ b/components/bt/bluedroid/bta/gatt/bta_gattc_utils.c @@ -230,6 +230,7 @@ tBTA_GATTC_CLCB *bta_gattc_clcb_alloc(tBTA_GATTC_IF client_if, BD_ADDR remote_bd bdcpy(p_clcb->bda, remote_bda); p_clcb->p_rcb = bta_gattc_cl_get_regcb(client_if); + p_clcb->p_cmd_list = list_new(osi_free_func); if ((p_clcb->p_srcb = bta_gattc_find_srcb(remote_bda)) == NULL) { p_clcb->p_srcb = bta_gattc_srcb_alloc(remote_bda); @@ -437,10 +438,12 @@ BOOLEAN bta_gattc_enqueue(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data) { p_clcb->p_q_cmd = p_data; return TRUE; + } else if (p_clcb->p_cmd_list) { + //store the command to the command list. + list_append(p_clcb->p_cmd_list, (void *)p_data); + return FALSE; } - APPL_TRACE_ERROR ("%s: already has a pending command!!", __func__); - /* skip the callback now. ----- need to send callback ? */ return FALSE; } diff --git a/components/bt/bluedroid/bta/include/bta_gattc_int.h b/components/bt/bluedroid/bta/include/bta_gattc_int.h index 2515cb5225..f4af7fc8a3 100644 --- a/components/bt/bluedroid/bta/include/bta_gattc_int.h +++ b/components/bt/bluedroid/bta/include/bta_gattc_int.h @@ -305,7 +305,7 @@ typedef struct { tBTA_GATTC_RCB *p_rcb; /* pointer to the registration CB */ tBTA_GATTC_SERV *p_srcb; /* server cache CB */ tBTA_GATTC_DATA *p_q_cmd; /* command in queue waiting for execution */ - + list_t *p_cmd_list; /* The list to store the command to be sent */ #define BTA_GATTC_NO_SCHEDULE 0 #define BTA_GATTC_DISC_WAITING 0x01 #define BTA_GATTC_REQ_WAITING 0x10