From 7fc042e2a9bd6edf848dbfa7448463d06d207a26 Mon Sep 17 00:00:00 2001 From: Benjamin Valentin Date: Fri, 4 Sep 2020 18:54:26 +0200 Subject: [PATCH] drivers/at86rf215: use non-blocking send if gnrc_netif_pktq is active --- drivers/at86rf215/Makefile.dep | 6 ++++++ drivers/at86rf215/at86rf215.c | 11 ++++++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/drivers/at86rf215/Makefile.dep b/drivers/at86rf215/Makefile.dep index 72c703e6cb..64c0ed1e4c 100644 --- a/drivers/at86rf215/Makefile.dep +++ b/drivers/at86rf215/Makefile.dep @@ -19,6 +19,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 += netif USEMODULE += ieee802154 diff --git a/drivers/at86rf215/at86rf215.c b/drivers/at86rf215/at86rf215.c index 70ba21a1be..16feb02f8e 100644 --- a/drivers/at86rf215/at86rf215.c +++ b/drivers/at86rf215/at86rf215.c @@ -254,6 +254,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); @@ -266,7 +270,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;