Skip to content

Commit f44f3d1

Browse files
committed
bluedroid: fix ble connection update with same params
1 parent 5d6dfd1 commit f44f3d1

File tree

1 file changed

+23
-11
lines changed
  • components/bt/host/bluedroid/stack/l2cap

1 file changed

+23
-11
lines changed

components/bt/host/bluedroid/stack/l2cap/l2c_ble.c

Lines changed: 23 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,8 @@ BOOLEAN L2CA_UpdateBleConnParams (BD_ADDR rem_bda, UINT16 min_int, UINT16 max_in
116116
{
117117
tL2C_LCB *p_lcb;
118118
tACL_CONN *p_acl_cb = btm_bda_to_acl(rem_bda, BT_TRANSPORT_LE);
119+
UINT8 status = HCI_SUCCESS;
120+
BOOLEAN need_cb = false;
119121

120122
/* See if we have a link control block for the remote device */
121123
p_lcb = l2cu_find_lcb_by_bd_addr (rem_bda, BT_TRANSPORT_LE);
@@ -135,19 +137,29 @@ BOOLEAN L2CA_UpdateBleConnParams (BD_ADDR rem_bda, UINT16 min_int, UINT16 max_in
135137
return (FALSE);
136138
}
137139

140+
/* Check whether the request conn params is already set */
141+
if ((max_int == p_lcb->current_used_conn_interval) && (latency == p_lcb->current_used_conn_latency) &&
142+
(timeout == p_lcb->current_used_conn_timeout)) {
143+
status = HCI_SUCCESS;
144+
need_cb = true;
145+
L2CAP_TRACE_WARNING("%s connection parameter already set", __func__);
146+
}
147+
138148
if (p_lcb->conn_update_mask & L2C_BLE_UPDATE_PARAM_FULL){
139-
UINT8 status = HCI_ERR_ILLEGAL_COMMAND;
149+
status = HCI_ERR_ILLEGAL_COMMAND;
150+
need_cb = true;
140151
L2CAP_TRACE_ERROR("There are two connection parameter requests that are being updated, please try later ");
141-
if (conn_param_update_cb.update_conn_param_cb != NULL) {
142-
tBTM_LE_UPDATE_CONN_PRAMS update_param;
143-
update_param.max_conn_int = max_int;
144-
update_param.min_conn_int = min_int;
145-
update_param.conn_int = p_lcb->current_used_conn_interval;
146-
update_param.slave_latency = p_lcb->current_used_conn_latency;
147-
update_param.supervision_tout = p_lcb->current_used_conn_timeout;
148-
(conn_param_update_cb.update_conn_param_cb)(status, p_lcb->remote_bd_addr, &update_param);
149-
}
150-
return (FALSE);
152+
}
153+
154+
if ((need_cb == TRUE) && (conn_param_update_cb.update_conn_param_cb != NULL)) {
155+
tBTM_LE_UPDATE_CONN_PRAMS update_param;
156+
update_param.max_conn_int = max_int;
157+
update_param.min_conn_int = min_int;
158+
update_param.conn_int = p_lcb->current_used_conn_interval;
159+
update_param.slave_latency = p_lcb->current_used_conn_latency;
160+
update_param.supervision_tout = p_lcb->current_used_conn_timeout;
161+
(conn_param_update_cb.update_conn_param_cb)(status, p_lcb->remote_bd_addr, &update_param);
162+
return (status == HCI_SUCCESS);
151163
}
152164

153165
p_lcb->waiting_update_conn_min_interval = min_int;

0 commit comments

Comments
 (0)