Bluetooth: controller: Handle Rej Ext Ind for Length Req PDU
Added implementation to handle an incoming Reject Ext Ind PDU in response to a sent Length Req PDU. Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
This commit is contained in:
parent
a2a364bac4
commit
c6dd9d5ef6
1 changed files with 50 additions and 1 deletions
|
@ -1498,6 +1498,48 @@ isr_rx_conn_pkt_ctrl_rej_conn_upd(struct radio_pdu_node_rx *radio_pdu_node_rx,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(CONFIG_BLUETOOTH_CONTROLLER_DATA_LENGTH)
|
||||||
|
static inline void
|
||||||
|
isr_rx_conn_pkt_ctrl_rej_dle(struct radio_pdu_node_rx *radio_pdu_node_rx,
|
||||||
|
u8_t *rx_enqueue)
|
||||||
|
{
|
||||||
|
struct pdu_data_llctrl_reject_ext_ind *rej_ext_ind;
|
||||||
|
struct pdu_data *pdu_data_rx;
|
||||||
|
|
||||||
|
pdu_data_rx = (struct pdu_data *)radio_pdu_node_rx->pdu_data;
|
||||||
|
rej_ext_ind = (struct pdu_data_llctrl_reject_ext_ind *)
|
||||||
|
&pdu_data_rx->payload.llctrl.ctrldata.reject_ext_ind;
|
||||||
|
if (rej_ext_ind->reject_opcode == PDU_DATA_LLCTRL_TYPE_LENGTH_REQ) {
|
||||||
|
struct pdu_data_llctrl_length_req_rsp *lr;
|
||||||
|
|
||||||
|
/* Procedure complete */
|
||||||
|
_radio.conn_curr->llcp_length.ack =
|
||||||
|
_radio.conn_curr->llcp_length.req;
|
||||||
|
_radio.conn_curr->procedure_expire = 0;
|
||||||
|
|
||||||
|
/* Resume data packet tx */
|
||||||
|
_radio.conn_curr->pause_tx = 0;
|
||||||
|
|
||||||
|
/* prepare length rsp structure */
|
||||||
|
pdu_data_rx->len = offsetof(struct pdu_data_llctrl,
|
||||||
|
ctrldata) +
|
||||||
|
sizeof(struct pdu_data_llctrl_length_req_rsp);
|
||||||
|
pdu_data_rx->payload.llctrl.opcode =
|
||||||
|
PDU_DATA_LLCTRL_TYPE_LENGTH_RSP;
|
||||||
|
|
||||||
|
lr = (struct pdu_data_llctrl_length_req_rsp *)
|
||||||
|
&pdu_data_rx->payload.llctrl.ctrldata.length_req;
|
||||||
|
lr->max_rx_octets = _radio.conn_curr->max_rx_octets;
|
||||||
|
lr->max_rx_time = ((_radio.conn_curr->max_rx_octets + 14) << 3);
|
||||||
|
lr->max_tx_octets = _radio.conn_curr->max_tx_octets;
|
||||||
|
lr->max_tx_time = ((_radio.conn_curr->max_tx_octets + 14) << 3);
|
||||||
|
|
||||||
|
/* enqueue a length rsp */
|
||||||
|
*rx_enqueue = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif /* CONFIG_BLUETOOTH_CONTROLLER_DATA_LENGTH */
|
||||||
|
|
||||||
#if defined(CONFIG_BLUETOOTH_CONTROLLER_PHY)
|
#if defined(CONFIG_BLUETOOTH_CONTROLLER_PHY)
|
||||||
static inline void
|
static inline void
|
||||||
isr_rx_conn_pkt_ctrl_rej_phy_upd(struct radio_pdu_node_rx *radio_pdu_node_rx,
|
isr_rx_conn_pkt_ctrl_rej_phy_upd(struct radio_pdu_node_rx *radio_pdu_node_rx,
|
||||||
|
@ -1563,6 +1605,13 @@ isr_rx_conn_pkt_ctrl_rej(struct radio_pdu_node_rx *radio_pdu_node_rx,
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(CONFIG_BLUETOOTH_CONTROLLER_DATA_LENGTH)
|
||||||
|
} else if (_radio.conn_curr->llcp_length.ack !=
|
||||||
|
_radio.conn_curr->llcp_length.req) {
|
||||||
|
isr_rx_conn_pkt_ctrl_rej_dle(radio_pdu_node_rx,
|
||||||
|
rx_enqueue);
|
||||||
|
#endif /* CONFIG_BLUETOOTH_CONTROLLER_DATA_LENGTH */
|
||||||
|
|
||||||
#if defined(CONFIG_BLUETOOTH_CONTROLLER_PHY)
|
#if defined(CONFIG_BLUETOOTH_CONTROLLER_PHY)
|
||||||
} else if (_radio.conn_curr->llcp_phy.ack !=
|
} else if (_radio.conn_curr->llcp_phy.ack !=
|
||||||
_radio.conn_curr->llcp_phy.req) {
|
_radio.conn_curr->llcp_phy.req) {
|
||||||
|
@ -5970,7 +6019,7 @@ static inline void event_len_prep(struct connection *conn)
|
||||||
node_rx->hdr.handle = conn->handle;
|
node_rx->hdr.handle = conn->handle;
|
||||||
node_rx->hdr.type = NODE_RX_TYPE_DC_PDU;
|
node_rx->hdr.type = NODE_RX_TYPE_DC_PDU;
|
||||||
|
|
||||||
/* prepare version ind structure */
|
/* prepare length rsp structure */
|
||||||
pdu_ctrl_rx = (struct pdu_data *) node_rx->pdu_data;
|
pdu_ctrl_rx = (struct pdu_data *) node_rx->pdu_data;
|
||||||
pdu_ctrl_rx->ll_id = PDU_DATA_LLID_CTRL;
|
pdu_ctrl_rx->ll_id = PDU_DATA_LLID_CTRL;
|
||||||
pdu_ctrl_rx->len = offsetof(struct pdu_data_llctrl,
|
pdu_ctrl_rx->len = offsetof(struct pdu_data_llctrl,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue