Bluetooth: controller: consider host ctrl feature bits in feat exchange
Host controlled feature bits were not considered in feature exchange procedure. This is fixed. Signed-off-by: Erik Brockhoff <erbr@oticon.com>
This commit is contained in:
parent
c5ab922f50
commit
2f61771948
5 changed files with 41 additions and 6 deletions
|
@ -529,7 +529,7 @@ void ull_llcp_init(struct ll_conn *conn)
|
|||
|
||||
/* Reset the feature exchange fields */
|
||||
memset(&conn->llcp.fex, 0, sizeof(conn->llcp.fex));
|
||||
conn->llcp.fex.features_used = LL_FEAT;
|
||||
conn->llcp.fex.features_used = ll_feat_get();
|
||||
|
||||
#if defined(CONFIG_BT_CTLR_LE_ENC)
|
||||
/* Reset encryption related state */
|
||||
|
|
|
@ -133,13 +133,13 @@ void llcp_pdu_encode_feature_req(struct ll_conn *conn, struct pdu_data *pdu)
|
|||
#endif /* CONFIG_BT_CTLR_PER_INIT_FEAT_XCHG && CONFIG_BT_PERIPHERAL */
|
||||
|
||||
p = &pdu->llctrl.feature_req;
|
||||
sys_put_le64(LL_FEAT, p->features);
|
||||
sys_put_le64(ll_feat_get(), p->features);
|
||||
}
|
||||
|
||||
void llcp_pdu_encode_feature_rsp(struct ll_conn *conn, struct pdu_data *pdu)
|
||||
{
|
||||
struct pdu_data_llctrl_feature_rsp *p;
|
||||
uint64_t feature_rsp = LL_FEAT;
|
||||
uint64_t feature_rsp = ll_feat_get();
|
||||
|
||||
pdu->ll_id = PDU_DATA_LLID_CTRL;
|
||||
pdu->len = PDU_DATA_LLCTRL_LEN(feature_rsp);
|
||||
|
@ -173,7 +173,7 @@ void llcp_pdu_decode_feature_req(struct ll_conn *conn, struct pdu_data *pdu)
|
|||
uint64_t featureset;
|
||||
|
||||
feature_filter(pdu->llctrl.feature_req.features, &featureset);
|
||||
conn->llcp.fex.features_used = LL_FEAT & featureset;
|
||||
conn->llcp.fex.features_used = ll_feat_get() & featureset;
|
||||
|
||||
featureset &= (FEAT_FILT_OCTET0 | conn->llcp.fex.features_used);
|
||||
conn->llcp.fex.features_peer = featureset;
|
||||
|
@ -186,7 +186,7 @@ void llcp_pdu_decode_feature_rsp(struct ll_conn *conn, struct pdu_data *pdu)
|
|||
uint64_t featureset;
|
||||
|
||||
feature_filter(pdu->llctrl.feature_rsp.features, &featureset);
|
||||
conn->llcp.fex.features_used = LL_FEAT & featureset;
|
||||
conn->llcp.fex.features_used = ll_feat_get() & featureset;
|
||||
|
||||
conn->llcp.fex.features_peer = featureset;
|
||||
conn->llcp.fex.valid = 1;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue