diff --git a/drivers/at86rf215/Makefile.dep b/drivers/at86rf215/Makefile.dep index 3c75425d6a..2810697566 100644 --- a/drivers/at86rf215/Makefile.dep +++ b/drivers/at86rf215/Makefile.dep @@ -24,6 +24,12 @@ FEATURES_REQUIRED += periph_gpio FEATURES_REQUIRED += periph_gpio_irq FEATURES_REQUIRED += periph_spi +ifneq (,$(filter gnrc,$(USEMODULE))) + ifeq (,$(filter gnrc_netif_pktq,$(USEMODULE))) + USEMODULE += at86rf215_blocking_send + endif +endif + USEMODULE += xtimer USEMODULE += ieee802154 USEMODULE += netdev_ieee802154 diff --git a/drivers/at86rf215/at86rf215.c b/drivers/at86rf215/at86rf215.c index b8c1cf84fb..f962d77ff7 100644 --- a/drivers/at86rf215/at86rf215.c +++ b/drivers/at86rf215/at86rf215.c @@ -260,6 +260,10 @@ static void _block_while_busy(at86rf215_t *dev) static void at86rf215_block_while_busy(at86rf215_t *dev) { + if (!IS_ACTIVE(MODULE_AT86RF215_BLOCKING_SEND)) { + return; + } + if (_tx_ongoing(dev)) { DEBUG("[at86rf215] Block while TXing\n"); _block_while_busy(dev); @@ -272,7 +276,12 @@ int at86rf215_tx_prepare(at86rf215_t *dev) return -EAGAIN; } - at86rf215_block_while_busy(dev); + if (!IS_ACTIVE(MODULE_AT86RF215_BLOCKING_SEND) && _tx_ongoing(dev)) { + return -EBUSY; + } else { + at86rf215_block_while_busy(dev); + } + dev->tx_frame_len = IEEE802154_FCS_LEN; return 0;