drivers/ieee802154: Added RAW mode support to nRF5 radio driver

Change-Id: Ib327032458d5098f0ee4f01ae719f23a856901c1
Signed-off-by: Wojciech Bober <wojciech.bober@nordicsemi.no>
This commit is contained in:
Wojciech Bober 2017-02-22 11:25:39 +01:00 committed by Jukka Rissanen
commit 162f25bc30
4 changed files with 38 additions and 7 deletions

View file

@ -1,12 +1,30 @@
# Kconfig.nrf5 - Nordic Semiconductor nRF5 802.15.4 configuration options # Kconfig.nrf5 - Nordic Semiconductor nRF5 802.15.4 configuration options
# #
menuconfig IEEE802154_NRF5 choice IEEE802154_NRF5_DRIVER_SUPPORT
bool "nRF52 series IEEE 802.15.4 Driver support" prompt "nRF52 series IEEE 802.15.4 Driver support"
depends on NETWORKING && SOC_NRF52840 depends on NETWORKING && SOC_NRF52840
default IEEE802154_NRF5_DISABLED
config IEEE802154_NRF5_DISABLED
bool "Driver disabled"
config IEEE802154_NRF5
bool "Regular mode"
select NET_L2_IEEE802154 select NET_L2_IEEE802154
select HAS_NORDIC_DRIVERS select HAS_NORDIC_DRIVERS
default n
config IEEE802154_NRF5_RAW
bool "RAW mode"
select NET_L2_RAW_CHANNEL
select HAS_NORDIC_DRIVERS
help
Enable IEEE802154_CC2520 driver with RAW channel
The CC2520 driver with RAW channel allows to export radio interface
over USB making an USB 802.15.4 dongle.
endchoice
if IEEE802154_NRF5 || IEEE802154_NRF5_RAW if IEEE802154_NRF5 || IEEE802154_NRF5_RAW

View file

@ -4,3 +4,4 @@ obj-$(CONFIG_IEEE802154_UPIPE) += ieee802154_uart_pipe.o
obj-$(CONFIG_IEEE802154_MCR20A) += ieee802154_mcr20a.o obj-$(CONFIG_IEEE802154_MCR20A) += ieee802154_mcr20a.o
obj-$(CONFIG_IEEE802154_MCR20A_RAW) += ieee802154_mcr20a.o obj-$(CONFIG_IEEE802154_MCR20A_RAW) += ieee802154_mcr20a.o
obj-$(CONFIG_IEEE802154_NRF5) += ieee802154_nrf5.o obj-$(CONFIG_IEEE802154_NRF5) += ieee802154_nrf5.o
obj-$(CONFIG_IEEE802154_NRF5_RAW) += ieee802154_nrf5.o

View file

@ -77,6 +77,13 @@ static void nrf5_rx_thread(void *arg1, void *arg2, void *arg3)
goto out; goto out;
} }
#if defined(CONFIG_IEEE802154_NRF5_RAW)
/**
* Reserve 1 byte for length
*/
net_nbuf_set_ll_reserve(buf, 1);
#endif
pkt_buf = net_nbuf_get_frag(buf, K_NO_WAIT); pkt_buf = net_nbuf_get_frag(buf, K_NO_WAIT);
if (!pkt_buf) { if (!pkt_buf) {
SYS_LOG_ERR("No pkt_buf available"); SYS_LOG_ERR("No pkt_buf available");
@ -85,10 +92,15 @@ static void nrf5_rx_thread(void *arg1, void *arg2, void *arg3)
net_buf_frag_insert(buf, pkt_buf); net_buf_frag_insert(buf, pkt_buf);
/* rx_mpdu contains length, psdu, [fcs], lqi /* rx_mpdu contains length, psdu, fcs|lqi
* FCS filed (2 bytes) is not present if CRC is enabled * The last 2 bytes contain LQI or FCS, depending if
* automatic CRC handling is enabled or not, respectively.
*/ */
#if defined(CONFIG_IEEE802154_NRF5_RAW)
pkt_len = nrf5_radio->rx_psdu[0];
#else
pkt_len = nrf5_radio->rx_psdu[0] - NRF5_FCS_LENGTH; pkt_len = nrf5_radio->rx_psdu[0] - NRF5_FCS_LENGTH;
#endif
/* Skip length (first byte) and copy the payload */ /* Skip length (first byte) and copy the payload */
memcpy(pkt_buf->data, nrf5_radio->rx_psdu + 1, pkt_len); memcpy(pkt_buf->data, nrf5_radio->rx_psdu + 1, pkt_len);

View file

@ -1,6 +1,6 @@
obj-$(CONFIG_IEEE802154_NRF5) += nrf_drv_radio802154.o ifeq ($(or $(CONFIG_IEEE802154_NRF5),$(CONFIG_IEEE802154_NRF5_RAW)),y)
obj-y += nrf_drv_radio802154.o
ifeq ($(CONFIG_IEEE802154_NRF5),y)
# A common prefix used for placing radio buffer in a named # A common prefix used for placing radio buffer in a named
# memory section. # memory section.
KBUILD_CFLAGS += -DRADIO_SECTION_PREFIX="\".top_of_image_ram\"" KBUILD_CFLAGS += -DRADIO_SECTION_PREFIX="\".top_of_image_ram\""