diff --git a/subsys/bluetooth/controller/ll_sw/ull_conn_types.h b/subsys/bluetooth/controller/ll_sw/ull_conn_types.h index 52de6ce5109..115df2e9d31 100644 --- a/subsys/bluetooth/controller/ll_sw/ull_conn_types.h +++ b/subsys/bluetooth/controller/ll_sw/ull_conn_types.h @@ -425,9 +425,6 @@ struct llcp_struct { } cte_req; #endif /* CONFIG_BT_CTLR_DF_CONN_CTE_REQ */ #if defined(CONFIG_BT_CTLR_DF_CONN_CTE_RSP) - /* TODO (ppryga): Consided move of the type of structure to ull_df_types.h or - * lll_df_types.h. To have single definition of the type and share it wish LLL. - */ struct llcp_df_rsp_cfg { uint8_t is_enabled; uint8_t cte_types; diff --git a/subsys/bluetooth/controller/ll_sw/ull_llcp_common.c b/subsys/bluetooth/controller/ll_sw/ull_llcp_common.c index 12dddd31ae4..b151a1b7b14 100644 --- a/subsys/bluetooth/controller/ll_sw/ull_llcp_common.c +++ b/subsys/bluetooth/controller/ll_sw/ull_llcp_common.c @@ -694,7 +694,7 @@ static void rp_comm_rx_decode(struct ll_conn *conn, struct proc_ctx *ctx, struct #endif /* CONFIG_BT_CTLR_DATA_LENGTH */ #if defined(CONFIG_BT_CTLR_DF_CONN_CTE_RSP) case PDU_DATA_LLCTRL_TYPE_CTE_REQ: - llcp_pdu_decode_cte_req(conn, pdu); + llcp_pdu_decode_cte_req(ctx, pdu); break; #endif /* CONFIG_BT_CTLR_DF_CONN_CTE_RSP */ default: @@ -753,13 +753,13 @@ static void rp_comm_tx(struct ll_conn *conn, struct proc_ctx *ctx) err_code = BT_HCI_ERR_INVALID_LL_PARAM; } #endif /* CONFIG_BT_PHY_UPDATE */ - if (!(conn->llcp.cte_rsp.cte_types & BIT(conn->llcp.cte_req.cte_type)) && - conn->llcp.cte_rsp.max_cte_len < conn->llcp.cte_req.min_cte_len) { + if (!(conn->llcp.cte_rsp.cte_types & BIT(ctx->data.cte_remote_req.cte_type)) || + conn->llcp.cte_rsp.max_cte_len < ctx->data.cte_remote_req.min_cte_len) { err_code = BT_HCI_ERR_UNSUPP_LL_PARAM_VAL; } if (!err_code) { - llcp_pdu_encode_cte_rsp(conn, pdu); + llcp_pdu_encode_cte_rsp(ctx, pdu); ctx->rx_opcode = PDU_DATA_LLCTRL_TYPE_CTE_RSP; } else { llcp_pdu_encode_reject_ext_ind(pdu, PDU_DATA_LLCTRL_TYPE_CTE_REQ, err_code); diff --git a/subsys/bluetooth/controller/ll_sw/ull_llcp_internal.h b/subsys/bluetooth/controller/ll_sw/ull_llcp_internal.h index 951dcef294e..36960946209 100644 --- a/subsys/bluetooth/controller/ll_sw/ull_llcp_internal.h +++ b/subsys/bluetooth/controller/ll_sw/ull_llcp_internal.h @@ -221,6 +221,15 @@ struct proc_ctx { uint8_t min_len:5; } cte_req; #endif /* CONFIG_BT_CTLR_DF_CONN_CTE_REQ */ + +#if defined(CONFIG_BT_CTLR_DF_CONN_CTE_RSP) + /* Use by CTE Response Procedure */ + struct llcp_df_cte_remote_req { + uint8_t cte_type; + uint8_t min_cte_len; + } cte_remote_req; +#endif /* CONFIG_BT_CTLR_DF_CONN_CTE_RSP */ + } data; struct { @@ -589,8 +598,8 @@ void llcp_ntf_encode_cte_req(struct ll_conn *conn, struct pdu_data *pdu); /* * Constant Tone Response Procedure Helper */ -void llcp_pdu_decode_cte_req(struct ll_conn *conn, struct pdu_data *pdu); -void llcp_pdu_encode_cte_rsp(struct ll_conn *conn, struct pdu_data *pdu); +void llcp_pdu_decode_cte_req(struct proc_ctx *ctx, struct pdu_data *pdu); +void llcp_pdu_encode_cte_rsp(const struct proc_ctx *ctx, struct pdu_data *pdu); #endif /* CONFIG_BT_CTLR_DF_CONN_CTE_RSP */ #ifdef ZTEST_UNITTEST diff --git a/subsys/bluetooth/controller/ll_sw/ull_llcp_pdu.c b/subsys/bluetooth/controller/ll_sw/ull_llcp_pdu.c index 1d6be39cd8d..224c4ae9b4d 100644 --- a/subsys/bluetooth/controller/ll_sw/ull_llcp_pdu.c +++ b/subsys/bluetooth/controller/ll_sw/ull_llcp_pdu.c @@ -739,13 +739,13 @@ void llcp_ntf_encode_cte_req(struct ll_conn *conn, struct pdu_data *pdu) #endif /* CONFIG_BT_CTLR_DF_CONN_CTE_REQ */ #if defined(CONFIG_BT_CTLR_DF_CONN_CTE_RSP) -void llcp_pdu_decode_cte_req(struct ll_conn *conn, struct pdu_data *pdu) +void llcp_pdu_decode_cte_req(struct proc_ctx *ctx, struct pdu_data *pdu) { - conn->llcp.cte_req.min_cte_len = pdu->llctrl.cte_req.min_cte_len_req; - conn->llcp.cte_req.cte_type = pdu->llctrl.cte_req.cte_type_req; + ctx->data.cte_remote_req.min_cte_len = pdu->llctrl.cte_req.min_cte_len_req; + ctx->data.cte_remote_req.cte_type = pdu->llctrl.cte_req.cte_type_req; } -void llcp_pdu_encode_cte_rsp(struct ll_conn *conn, struct pdu_data *pdu) +void llcp_pdu_encode_cte_rsp(const struct proc_ctx *ctx, struct pdu_data *pdu) { pdu->ll_id = PDU_DATA_LLID_CTRL; pdu->len = @@ -756,7 +756,7 @@ void llcp_pdu_encode_cte_rsp(struct ll_conn *conn, struct pdu_data *pdu) pdu->cp = 1U; pdu->rfu = 0U; - pdu->cte_info.time = conn->llcp.cte_req.min_cte_len; - pdu->cte_info.type = conn->llcp.cte_req.cte_type; + pdu->cte_info.time = ctx->data.cte_remote_req.min_cte_len; + pdu->cte_info.type = ctx->data.cte_remote_req.cte_type; } #endif /* CONFIG_BT_CTLR_DF_CONN_CTE_RSP */