drivers: ieee802154: add option to retransmit a frame
Use the nrf_802154_retransmit_csma_ca_raw and nrf_802154_retransmit_at_raw API to retry the frame transmission after a failed attempt. The retry must be performed only in response to a nrf_802154_transmit_failed event. Signed-off-by: Rafał Kuźnia <rafal.kuznia@nordicsemi.no>
This commit is contained in:
parent
d24f6dd79e
commit
9070190bc6
1 changed files with 23 additions and 6 deletions
|
@ -433,11 +433,19 @@ static bool nrf5_tx_at(struct net_pkt *pkt, bool cca)
|
|||
uint32_t tx_at = net_pkt_txtime(pkt) / NSEC_PER_USEC;
|
||||
bool ret;
|
||||
|
||||
if (net_pkt_ieee802154_frame_retry(pkt) == false) {
|
||||
ret = nrf_802154_transmit_raw_at(nrf5_data.tx_psdu,
|
||||
cca,
|
||||
tx_at - TXTIME_OFFSET_US,
|
||||
TXTIME_OFFSET_US,
|
||||
nrf_802154_channel_get());
|
||||
} else {
|
||||
ret = nrf_802154_retransmit_raw_at(nrf5_data.tx_psdu,
|
||||
cca,
|
||||
tx_at - TXTIME_OFFSET_US,
|
||||
TXTIME_OFFSET_US,
|
||||
nrf_802154_channel_get());
|
||||
}
|
||||
if (nrf5_data.event_handler) {
|
||||
LOG_WRN("TX_STARTED event will be triggered without delay");
|
||||
}
|
||||
|
@ -445,6 +453,15 @@ static bool nrf5_tx_at(struct net_pkt *pkt, bool cca)
|
|||
}
|
||||
#endif /* CONFIG_NET_PKT_TXTIME */
|
||||
|
||||
static void nrf5_tx_csma_ca(struct net_pkt *pkt, uint8_t *payload)
|
||||
{
|
||||
if (net_pkt_ieee802154_frame_retry(pkt) == false) {
|
||||
nrf_802154_transmit_csma_ca_raw(payload);
|
||||
} else {
|
||||
nrf_802154_retransmit_csma_ca_raw(payload);
|
||||
}
|
||||
}
|
||||
|
||||
static int nrf5_tx(const struct device *dev,
|
||||
enum ieee802154_tx_mode mode,
|
||||
struct net_pkt *pkt,
|
||||
|
@ -471,7 +488,7 @@ static int nrf5_tx(const struct device *dev,
|
|||
ret = nrf_802154_transmit_raw(nrf5_radio->tx_psdu, true);
|
||||
break;
|
||||
case IEEE802154_TX_MODE_CSMA_CA:
|
||||
nrf_802154_transmit_csma_ca_raw(nrf5_radio->tx_psdu);
|
||||
nrf5_tx_csma_ca(pkt, nrf5_radio->tx_psdu);
|
||||
break;
|
||||
/* This function cannot be used in the serialized version yet. */
|
||||
#if defined(CONFIG_NET_PKT_TXTIME) && !defined(CONFIG_NRF_802154_SER_HOST)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue