diff --git a/subsys/bluetooth/controller/ll_sw/ull_llcp_common.c b/subsys/bluetooth/controller/ll_sw/ull_llcp_common.c index 15e5b663e02..4c0ad69c0b8 100644 --- a/subsys/bluetooth/controller/ll_sw/ull_llcp_common.c +++ b/subsys/bluetooth/controller/ll_sw/ull_llcp_common.c @@ -758,7 +758,7 @@ static void rp_comm_tx(struct ll_conn *conn, struct proc_ctx *ctx) } if (!err_code) { - llcp_pdu_encode_cte_rsp(pdu); + llcp_pdu_encode_cte_rsp(conn, 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 4f1a725d8db..f817a4ddb97 100644 --- a/subsys/bluetooth/controller/ll_sw/ull_llcp_internal.h +++ b/subsys/bluetooth/controller/ll_sw/ull_llcp_internal.h @@ -584,7 +584,7 @@ void llcp_ntf_encode_length_change(struct ll_conn *conn, void llcp_pdu_encode_cte_req(struct proc_ctx *ctx, struct pdu_data *pdu); void llcp_ntf_encode_cte_req(struct ll_conn *conn, struct pdu_data *pdu); void llcp_pdu_decode_cte_req(struct ll_conn *conn, struct pdu_data *pdu); -void llcp_pdu_encode_cte_rsp(struct pdu_data *pdu); +void llcp_pdu_encode_cte_rsp(struct ll_conn *conn, struct pdu_data *pdu); #endif /* CONFIG_BT_CTLR_DF_CONN_CTE_REQ */ #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 60f0a0e7328..6864e8e538c 100644 --- a/subsys/bluetooth/controller/ll_sw/ull_llcp_pdu.c +++ b/subsys/bluetooth/controller/ll_sw/ull_llcp_pdu.c @@ -743,11 +743,18 @@ void llcp_pdu_decode_cte_req(struct ll_conn *conn, struct pdu_data *pdu) conn->llcp.cte_req.cte_type = pdu->llctrl.cte_req.cte_type_req; } -void llcp_pdu_encode_cte_rsp(struct pdu_data *pdu) +void llcp_pdu_encode_cte_rsp(struct ll_conn *conn, struct pdu_data *pdu) { pdu->ll_id = PDU_DATA_LLID_CTRL; pdu->len = - offsetof(struct pdu_data_llctrl, cte_rsp) + sizeof(struct pdu_data_llctrl_cte_rsp); + offsetof(struct pdu_data_llctrl, cte_rsp) + sizeof(struct pdu_data_llctrl_cte_rsp); pdu->llctrl.opcode = PDU_DATA_LLCTRL_TYPE_CTE_RSP; + + /* Set content of a PDU header first byte, that is not changed by LLL */ + 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; } #endif /* CONFIG_BT_CTLR_DF_CONN_CTE_REQ */