Skip to content
Permalink
Browse files

Bluetooth: controller: ull/lll: Workaround CPR procedure collision

This is a workaround for IOP issue, where peer rejects LLCP Slave
Connection Parameter Request with LMP Error Transaction Collision
error code even if previous request is complete at the instant.

Signed-off-by: Alexander Svensen <alsv@nordicsemi.no>
  • Loading branch information...
Alexander Svensen authored and nashif committed May 2, 2019
1 parent 06365a5 commit 8a4c13146e11ea8ea9781f0ae2adebbcc849e74b
Showing with 10 additions and 13 deletions.
  1. +10 −13 subsys/bluetooth/controller/ll_sw/ull_conn.c
@@ -3485,29 +3485,26 @@ static inline void reject_ind_conn_upd_recv(struct ll_conn *conn,

goto reject_ind_conn_upd_recv_exit;
}
/* Same Procedure or Different Procedure Collision */

/* If not same procedure, stop procedure timeout, else
* continue timer until phy upd ind is received.
*/
/* FIXME: handle unsupported LL parameters error */
else if (rej_ext_ind->error_code != BT_HCI_ERR_LL_PROC_COLLISION) {
/* update to next ticks offset */
if (lll->role) {
conn->slave.ticks_to_offset =
conn->llcp_conn_param.ticks_to_offset_next;
}
}

if (conn->llcp_conn_param.state == LLCP_CPR_STATE_RSP_WAIT) {
LL_ASSERT(conn_upd_curr == conn);

/* reset mutex */
conn_upd_curr = NULL;

/* Procedure complete */
conn->llcp_conn_param.ack =
conn->llcp_conn_param.req;
conn->llcp_conn_param.ack = conn->llcp_conn_param.req;

/* Stop procedure timeout */
conn->procedure_expire = 0U;

/* update to next ticks offsets */
if (lll->role) {
conn->slave.ticks_to_offset =
conn->llcp_conn_param.ticks_to_offset_next;
}
}

/* skip event generation if not cmd initiated */

0 comments on commit 8a4c131

Please sign in to comment.
You can’t perform that action at this time.