Bluetooth: Controller: Fix conn param req ack/req reset
llcp.conn_param.ack was reset on tx of conn param rsp, however this should only be done once the expected conn update ind is received and sets the cu.ack flag to indicate cu procedure 'takes over'. Signed-off-by: Erik Brockhoff <erbr@oticon.com> Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
This commit is contained in:
parent
8676ff01ec
commit
f41b3d7879
2 changed files with 9 additions and 4 deletions
|
@ -3537,8 +3537,10 @@ static inline void event_conn_param_rsp(struct ll_conn *conn)
|
||||||
|
|
||||||
ctrl_tx_enqueue(conn, tx);
|
ctrl_tx_enqueue(conn, tx);
|
||||||
|
|
||||||
/* procedure request acked */
|
/* Wait for connection update to be initiated by
|
||||||
conn->llcp_conn_param.ack = conn->llcp_conn_param.req;
|
* peer central device
|
||||||
|
*/
|
||||||
|
conn->llcp_conn_param.state = LLCP_CPR_STATE_UPD_WAIT;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void event_conn_param_app_req(struct ll_conn *conn)
|
static inline void event_conn_param_app_req(struct ll_conn *conn)
|
||||||
|
@ -3608,6 +3610,7 @@ static inline void event_conn_param_prep(struct ll_conn *conn,
|
||||||
|
|
||||||
case LLCP_CPR_STATE_APP_WAIT:
|
case LLCP_CPR_STATE_APP_WAIT:
|
||||||
case LLCP_CPR_STATE_RSP_WAIT:
|
case LLCP_CPR_STATE_RSP_WAIT:
|
||||||
|
case LLCP_CPR_STATE_UPD_WAIT:
|
||||||
case LLCP_CPR_STATE_UPD:
|
case LLCP_CPR_STATE_UPD:
|
||||||
/* Do nothing */
|
/* Do nothing */
|
||||||
break;
|
break;
|
||||||
|
@ -4342,7 +4345,8 @@ static uint8_t conn_upd_recv(struct ll_conn *conn, memq_link_t *link,
|
||||||
|
|
||||||
#if defined(CONFIG_BT_CTLR_CONN_PARAM_REQ)
|
#if defined(CONFIG_BT_CTLR_CONN_PARAM_REQ)
|
||||||
if ((conn->llcp_conn_param.req != conn->llcp_conn_param.ack) &&
|
if ((conn->llcp_conn_param.req != conn->llcp_conn_param.ack) &&
|
||||||
(conn->llcp_conn_param.state == LLCP_CPR_STATE_RSP_WAIT)) {
|
((conn->llcp_conn_param.state == LLCP_CPR_STATE_RSP_WAIT) ||
|
||||||
|
(conn->llcp_conn_param.state == LLCP_CPR_STATE_UPD_WAIT))) {
|
||||||
conn->llcp_conn_param.ack = conn->llcp_conn_param.req;
|
conn->llcp_conn_param.ack = conn->llcp_conn_param.req;
|
||||||
}
|
}
|
||||||
#endif /* CONFIG_BT_CTLR_CONN_PARAM_REQ */
|
#endif /* CONFIG_BT_CTLR_CONN_PARAM_REQ */
|
||||||
|
|
|
@ -229,10 +229,11 @@ struct ll_conn {
|
||||||
LLCP_CPR_STATE_APP_REQ,
|
LLCP_CPR_STATE_APP_REQ,
|
||||||
LLCP_CPR_STATE_APP_WAIT,
|
LLCP_CPR_STATE_APP_WAIT,
|
||||||
LLCP_CPR_STATE_RSP_WAIT,
|
LLCP_CPR_STATE_RSP_WAIT,
|
||||||
|
LLCP_CPR_STATE_UPD_WAIT,
|
||||||
LLCP_CPR_STATE_UPD,
|
LLCP_CPR_STATE_UPD,
|
||||||
LLCP_CPR_STATE_OFFS_REQ,
|
LLCP_CPR_STATE_OFFS_REQ,
|
||||||
LLCP_CPR_STATE_OFFS_RDY,
|
LLCP_CPR_STATE_OFFS_RDY,
|
||||||
} state:3 __packed;
|
} state:4 __packed;
|
||||||
uint8_t cmd:1;
|
uint8_t cmd:1;
|
||||||
uint8_t disabled:1;
|
uint8_t disabled:1;
|
||||||
uint8_t status;
|
uint8_t status;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue