wireless/ieee802154: Lots of little fixes and changes to get everything to build
This commit is contained in:
parent
c5e636ad84
commit
9e760dcf6a
@ -67,10 +67,6 @@
|
||||
# error Wireless support requires CONFIG_DRIVERS_WIRELESS
|
||||
#endif
|
||||
|
||||
#ifndef CONFIG_IEEE802154_DEV
|
||||
# error IEEE802.15.4 radio character device required (CONFIG_IEEE802154_DEV)
|
||||
#endif
|
||||
|
||||
#if !defined(CONFIG_CLICKER2_STM32_MB1_BEE) && \
|
||||
!defined(CONFIG_CLICKER2_STM32_MB2_BEE)
|
||||
# error Only the Mikroe BEE board is supported
|
||||
|
@ -56,6 +56,8 @@
|
||||
#include <nuttx/fs/fs.h>
|
||||
#include <nuttx/spi/spi.h>
|
||||
|
||||
#include <nuttx/drivers/iob.h>
|
||||
|
||||
#include <nuttx/wireless/ieee802154/mrf24j40.h>
|
||||
#include <nuttx/wireless/ieee802154/ieee802154_radio.h>
|
||||
#include <nuttx/wireless/ieee802154/ieee802154_mac.h>
|
||||
@ -221,8 +223,7 @@ static int mrf24j40_bind(FAR struct ieee802154_radio_s *radio,
|
||||
FAR struct ieee802154_radiocb_s *radiocb);
|
||||
static int mrf24j40_ioctl(FAR struct ieee802154_radio_s *radio, int cmd,
|
||||
unsigned long arg);
|
||||
static int mrf24j40_rxenable(FAR struct ieee802154_radio_s *radio,
|
||||
bool state, FAR struct ieee802154_packet_s *packet);
|
||||
static int mrf24j40_rxenable(FAR struct ieee802154_radio_s *radio);
|
||||
static int mrf24j40_transmit(FAR struct ieee802154_radio_s *radio,
|
||||
FAR uint8_t *buf, uint16_t buf_len);
|
||||
static int mrf24j40_txnotify_csma(FAR struct ieee802154_radio_s *radio);
|
||||
@ -324,7 +325,7 @@ static int mrf24j40_txnotify_csma(FAR struct ieee802154_radio_s *radio)
|
||||
static void mrf24j40_dopoll_csma(FAR void *arg)
|
||||
{
|
||||
FAR struct mrf24j40_radio_s *dev = (FAR struct mrf24j40_radio_s *)arg;
|
||||
int ret = 0;
|
||||
int len = 0;
|
||||
|
||||
/* Need to get exlusive access to the device so that we can use the copy
|
||||
* buffer.
|
||||
@ -338,9 +339,9 @@ static void mrf24j40_dopoll_csma(FAR void *arg)
|
||||
{
|
||||
/* need to somehow allow for a handle to be passed */
|
||||
|
||||
ret = dev->radiocb->poll_csma(dev->radiocb, &dev->csma_desc.pub,
|
||||
len = dev->radiocb->poll_csma(dev->radiocb, &dev->csma_desc.pub,
|
||||
&dev->tx_buf[0]);
|
||||
if (ret > 0)
|
||||
if (len > 0)
|
||||
{
|
||||
/* Now the txdesc is in use */
|
||||
|
||||
@ -348,8 +349,7 @@ static void mrf24j40_dopoll_csma(FAR void *arg)
|
||||
|
||||
/* Setup the transaction on the device in the CSMA FIFO */
|
||||
|
||||
mrf24j40_csma_setup(dev, &dev->tx_buf[0],
|
||||
dev->csma_desc.pub.psdu_length);
|
||||
mrf24j40_csma_setup(dev, &dev->tx_buf[0], len);
|
||||
}
|
||||
}
|
||||
|
||||
@ -419,7 +419,7 @@ static void mrf24j40_dopoll_gts(FAR void *arg)
|
||||
{
|
||||
FAR struct mrf24j40_radio_s *dev = (FAR struct mrf24j40_radio_s *)arg;
|
||||
int gts = 0;
|
||||
int ret = 0;
|
||||
int len = 0;
|
||||
|
||||
/* Need to get exclusive access to the device so that we can use the copy
|
||||
* buffer.
|
||||
@ -431,9 +431,9 @@ static void mrf24j40_dopoll_gts(FAR void *arg)
|
||||
{
|
||||
if (!dev->gts_desc[gts].busy)
|
||||
{
|
||||
ret = dev->radiocb->poll_gts(dev->radiocb, &dev->gts_desc[gts].pub,
|
||||
len = dev->radiocb->poll_gts(dev->radiocb, &dev->gts_desc[gts].pub,
|
||||
&dev->tx_buf[0]);
|
||||
if (ret > 0)
|
||||
if (len > 0)
|
||||
{
|
||||
/* Now the txdesc is in use */
|
||||
|
||||
@ -441,8 +441,7 @@ static void mrf24j40_dopoll_gts(FAR void *arg)
|
||||
|
||||
/* Setup the transaction on the device in the open GTS FIFO */
|
||||
|
||||
mrf24j40_gts_setup(dev, gts, &dev->tx_buf[0],
|
||||
dev->gts_desc[gts].pub.psdu_length);
|
||||
mrf24j40_gts_setup(dev, gts, &dev->tx_buf[0], len);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1583,27 +1582,18 @@ static void mrf24j40_irqwork_txgts(FAR struct mrf24j40_radio_s *dev,
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
static int mrf24j40_rxenable(FAR struct ieee802154_radio_s *radio, bool state,
|
||||
FAR struct ieee802154_packet_s *packet)
|
||||
static int mrf24j40_rxenable(FAR struct ieee802154_radio_s *radio)
|
||||
{
|
||||
FAR struct mrf24j40_radio_s *dev = (FAR struct mrf24j40_radio_s *)radio;
|
||||
uint8_t reg;
|
||||
|
||||
if (state)
|
||||
{
|
||||
mrf24j40_pacontrol(dev, MRF24J40_PA_AUTO);
|
||||
radio->rxbuf = packet;
|
||||
|
||||
/* Enable rx int */
|
||||
|
||||
reg = mrf24j40_getreg(dev->spi, MRF24J40_INTCON);
|
||||
reg &= ~MRF24J40_INTCON_RXIE;
|
||||
mrf24j40_setreg(dev->spi, MRF24J40_INTCON, reg);
|
||||
}
|
||||
else
|
||||
{
|
||||
radio->rxbuf = NULL;
|
||||
}
|
||||
|
||||
return OK;
|
||||
}
|
||||
@ -1619,7 +1609,7 @@ static int mrf24j40_rxenable(FAR struct ieee802154_radio_s *radio, bool state,
|
||||
static void mrf24j40_irqwork_rx(FAR struct mrf24j40_radio_s *dev)
|
||||
{
|
||||
FAR struct iob_s *iob;
|
||||
struct ieee802154_txdesc_s rxdesc;
|
||||
struct ieee802154_rxdesc_s rxdesc;
|
||||
uint32_t addr;
|
||||
uint32_t index;
|
||||
uint8_t reg;
|
||||
@ -1636,7 +1626,6 @@ static void mrf24j40_irqwork_rx(FAR struct mrf24j40_radio_s *dev)
|
||||
|
||||
mrf24j40_setreg(dev->spi, MRF24J40_BBREG1, MRF24J40_BBREG1_RXDECINV);
|
||||
|
||||
|
||||
/* Allocate an IOB to put the packet in */
|
||||
|
||||
iob = iob_alloc(true);
|
||||
@ -1675,7 +1664,8 @@ static void mrf24j40_irqwork_rx(FAR struct mrf24j40_radio_s *dev)
|
||||
|
||||
/* Callback the receiver in the next highest layer */
|
||||
|
||||
dev->radiocb->rx_frame(dev->radiocb, &rxdesc, iob);
|
||||
dev->radiocb->rxframe(dev->radiocb,
|
||||
(FAR const struct ieee802154_rxdesc_s *)&rxdesc, iob);
|
||||
|
||||
/* Enable reception of next packet by flushing the fifo.
|
||||
* This is an MRF24J40 errata (no. 1).
|
||||
@ -1831,16 +1821,6 @@ FAR struct ieee802154_radio_s *mrf24j40_init(FAR struct spi_dev_s *spi,
|
||||
|
||||
dev->radio.ops = &mrf24j40_devops;
|
||||
|
||||
/* Initialize semaphores */
|
||||
|
||||
sem_init(&dev->radio.rxsem, 0, 0);
|
||||
|
||||
/* These semaphores are all used for signaling and, hence, should
|
||||
* not have priority inheritance enabled.
|
||||
*/
|
||||
|
||||
sem_setprotocol(&dev->radio.rxsem, SEM_PRIO_NONE);
|
||||
|
||||
dev->lower = lower;
|
||||
dev->spi = spi;
|
||||
|
||||
|
@ -55,6 +55,8 @@
|
||||
# include <net/if.h>
|
||||
#endif
|
||||
|
||||
#include <nuttx/wireless/ieee802154/ieee802154_radio.h>
|
||||
|
||||
#include <nuttx/fs/ioctl.h>
|
||||
|
||||
/****************************************************************************
|
||||
@ -553,45 +555,7 @@ struct ieee802154_data_req_s
|
||||
|
||||
struct ieee802154_data_conf_s
|
||||
{
|
||||
uint8_t msdu_handle; /* Handle assoc. with MSDU */
|
||||
|
||||
/* The time, in symbols, at which the data were transmitted */
|
||||
|
||||
uint32_t timestamp;
|
||||
|
||||
enum ieee802154_status_e status; /* The status of the MSDU transmission */
|
||||
|
||||
#ifdef CONFIG_IEEE802154_RANGING
|
||||
bool rng_rcvd; /* Ranging indicated by MSDU */
|
||||
|
||||
/* A count of the time units corresponding to an RMARKER at the antenna at
|
||||
* the beginning of the ranging exchange
|
||||
*/
|
||||
|
||||
uint32_t rng_counter_start;
|
||||
|
||||
/* A count of the time units corresponding to an RMARKER at the antenna at
|
||||
* end of the ranging exchange
|
||||
*/
|
||||
|
||||
uint32_t rng_counter_stop;
|
||||
|
||||
/* A count of the time units in a message exchange over which the tracking
|
||||
* offset was measured
|
||||
*/
|
||||
|
||||
uint34_t rng_tracking_interval;
|
||||
|
||||
/* A count of the time units slipped or advanced by the radio tracking
|
||||
* system over the course of the entire tracking interval
|
||||
*/
|
||||
|
||||
uint32_t rng_offset;
|
||||
|
||||
/* The Figure of Merit (FoM) characterizing the ranging measurement */
|
||||
|
||||
uint8_t rng_fom;
|
||||
#endif
|
||||
IEEE802154_TXDESC_FIELDS
|
||||
};
|
||||
|
||||
/*****************************************************************************
|
||||
@ -1111,7 +1075,6 @@ struct ieee802154_rxenable_conf_s
|
||||
|
||||
struct ieee802154_scan_req_s
|
||||
{
|
||||
|
||||
enum ieee802154_scantype_e type;
|
||||
uint8_t duration;
|
||||
uint8_t ch_page;
|
||||
@ -1406,13 +1369,13 @@ enum ieee802154_macnotify_e
|
||||
|
||||
struct ieee802154_maccb_s
|
||||
{
|
||||
CODE void (*mlme_notify) (FAR struct ieee802154_maccb_s *maccb,
|
||||
CODE void (*mlme_notify) (FAR const struct ieee802154_maccb_s *maccb,
|
||||
enum ieee802154_macnotify_e notif,
|
||||
FAR union ieee802154_mlme_notify_u *arg);
|
||||
FAR const union ieee802154_mlme_notify_u *arg);
|
||||
|
||||
CODE void (*mcps_notify) (FAR struct ieee802154_maccb_s *maccb,
|
||||
CODE void (*mcps_notify) (FAR const struct ieee802154_maccb_s *maccb,
|
||||
enum ieee802154_macnotify_e notif,
|
||||
FAR union ieee802154_mcps_notify_u *arg);
|
||||
FAR const union ieee802154_mcps_notify_u *arg);
|
||||
};
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
@ -158,12 +158,30 @@ struct ieee802154_netradio_s
|
||||
|
||||
/* IEEE802.15.4 Radio Interface Operations **********************************/
|
||||
|
||||
/* This is a work-around to allow the MAC upper layer have a struct with
|
||||
* identical members but with a different name. */
|
||||
|
||||
#ifdef CONFIG_IEEE802154_RANGING
|
||||
#define IEEE802154_TXDESC_FIELDS \
|
||||
uint8_t handle; \
|
||||
uint32_t timestamp; \
|
||||
uint8_t status;
|
||||
#else
|
||||
#define IEEE802154_TXDESC_FIELDS \
|
||||
uint8_t handle; \
|
||||
uint32_t timestamp; \
|
||||
uint8_t status;
|
||||
bool rng_rcvd; \
|
||||
uint32_t rng_counter_start; \
|
||||
uint32_t rng_counter_stop; \
|
||||
uint32_t rng_tracking_interval; \
|
||||
uint32_t rng_offset;\
|
||||
uint8_t rng_fom;
|
||||
#endif
|
||||
|
||||
struct ieee802154_txdesc_s
|
||||
{
|
||||
uint8_t psdu_handle; /* The psdu handle identifying the transaction */
|
||||
uint16_t psdu_length; /* The length of the PSDU */
|
||||
uint8_t status; /* The status of the transaction. This is set by the
|
||||
* radio layer prior to calling txdone_csma */
|
||||
IEEE802154_TXDESC_FIELDS
|
||||
|
||||
/* TODO: Add slotting information for GTS transactions */
|
||||
};
|
||||
@ -176,13 +194,13 @@ struct ieee802154_rxdesc_s
|
||||
|
||||
struct ieee802154_radiocb_s
|
||||
{
|
||||
CODE int (*poll_csma) (FAR struct ieee802154_radiocb_s *radiocb,
|
||||
CODE int (*poll_csma) (FAR const struct ieee802154_radiocb_s *radiocb,
|
||||
FAR struct ieee802154_txdesc_s *tx_desc, FAR uint8_t *buf);
|
||||
CODE int (*poll_gts) (FAR struct ieee802154_radiocb_s *radiocb,
|
||||
CODE int (*poll_gts) (FAR const struct ieee802154_radiocb_s *radiocb,
|
||||
FAR struct ieee802154_txdesc_s *tx_desc, FAR uint8_t *buf);
|
||||
CODE int (*txdone) (FAR struct ieee802154_radiocb_s *radiocb,
|
||||
CODE void (*txdone) (FAR const struct ieee802154_radiocb_s *radiocb,
|
||||
FAR const struct ieee802154_txdesc_s *tx_desc);
|
||||
CODE int (*rx_frame) (FAR struct ieee802154_radiocb_s *radiocb,
|
||||
CODE void (*rxframe) (FAR const struct ieee802154_radiocb_s *radiocb,
|
||||
FAR const struct ieee8021254_rxdesc_s *rx_desc,
|
||||
FAR struct iob_s *frame);
|
||||
};
|
||||
@ -195,8 +213,7 @@ struct ieee802154_radioops_s
|
||||
FAR struct ieee802154_radiocb_s *radiocb);
|
||||
CODE int (*ioctl)(FAR struct ieee802154_radio_s *radio, int cmd,
|
||||
unsigned long arg);
|
||||
CODE int (*rxenable)(FAR struct ieee802154_radio_s *radio, bool state,
|
||||
FAR struct ieee802154_packet_s *packet);
|
||||
CODE int (*rxenable)(FAR struct ieee802154_radio_s *radio);
|
||||
CODE int (*txnotify_csma)(FAR struct ieee802154_radio_s *radio);
|
||||
CODE int (*txnotify_gts)(FAR struct ieee802154_radio_s *radio);
|
||||
};
|
||||
|
@ -6,13 +6,14 @@
|
||||
config WIRELESS_IEEE802154
|
||||
bool "IEEE 802.15.4 Wireless Support"
|
||||
default n
|
||||
select DRIVERS_IOB
|
||||
---help---
|
||||
Enables support for the IEEE 802.14.5 Wireless library.
|
||||
|
||||
if WIRELESS_IEEE802154
|
||||
|
||||
config IEEE802154_MAC
|
||||
bool "Generic Media Access Control layer for 802.15.4 radios"
|
||||
menuconfig IEEE802154_MAC
|
||||
bool "Generic Media Access Control (MAC) layer for 802.15.4 radios"
|
||||
default n
|
||||
depends on WIRELESS_IEEE802154
|
||||
---help---
|
||||
@ -21,6 +22,8 @@ config IEEE802154_MAC
|
||||
such as 6lowpan. It is not required to use 802.15.4 radios,
|
||||
but is strongly suggested to ensure exchange of valid frames.
|
||||
|
||||
if IEEE802154_MAC
|
||||
|
||||
config IEEE802154_MAC_DEV
|
||||
bool "Character driver for IEEE 802.15.4 MAC layer"
|
||||
default n
|
||||
@ -29,6 +32,34 @@ config IEEE802154_MAC_DEV
|
||||
Enable the device driver to expose the IEEE 802.15.4 MAC layer
|
||||
access to user space as IOCTLs
|
||||
|
||||
choice
|
||||
prompt "IEEE 802.15.4 work queue"
|
||||
default MAC802154_LPWORK if SCHED_LPWORK
|
||||
default MAC802154_HPWORK if !SCHED_LPWORK && SCHED_HPWORK
|
||||
depends on SCHED_WORKQUEUE
|
||||
---help---
|
||||
Work queue support is required to use the IEEE 802.15.4 MAC layer.
|
||||
If the low priority work queue is available, then it should be used by
|
||||
the driver.
|
||||
|
||||
config MAC802154_HPWORK
|
||||
bool "High priority"
|
||||
depends on SCHED_HPWORK
|
||||
|
||||
config MAC802154_LPWORK
|
||||
bool "Low priority"
|
||||
depends on SCHED_LPWORK
|
||||
|
||||
endchoice # Work queue
|
||||
|
||||
config IEEE802154_NTXDESC
|
||||
int "Number or TX descriptors"
|
||||
default 3
|
||||
---help---
|
||||
Configured number of Tx descriptors. Default: 3
|
||||
|
||||
endif # IEEE802154_MAC
|
||||
|
||||
config IEEE802154_DEV
|
||||
bool "Debug character driver for ieee802.15.4 radio interfaces"
|
||||
default n
|
||||
|
@ -46,7 +46,10 @@
|
||||
#include <string.h>
|
||||
|
||||
#include <nuttx/kmalloc.h>
|
||||
#include <nuttx/wireless/ieee802154/ieee802154_radio.h>
|
||||
#include <nuttx/wqueue.h>
|
||||
|
||||
#include <nuttx/drivers/iob.h>
|
||||
|
||||
#include <nuttx/wireless/ieee802154/ieee802154_mac.h>
|
||||
|
||||
#include "mac802154.h"
|
||||
@ -54,6 +57,25 @@
|
||||
/****************************************************************************
|
||||
* Pre-processor Definitions
|
||||
****************************************************************************/
|
||||
/* Configuration ************************************************************/
|
||||
/* If processing is not done at the interrupt level, then work queue support
|
||||
* is required.
|
||||
*/
|
||||
|
||||
#if !defined(CONFIG_SCHED_WORKQUEUE)
|
||||
# error Work queue support is required in this configuration (CONFIG_SCHED_WORKQUEUE)
|
||||
#else
|
||||
|
||||
/* Use the low priority work queue if possible */
|
||||
|
||||
# if defined(CONFIG_MAC802154_HPWORK)
|
||||
# define MAC802154_WORK HPWORK
|
||||
# elif defined(CONFIG_MAC802154_LPWORK)
|
||||
# define MAC802154_WORK LPWORK
|
||||
# else
|
||||
# error Neither CONFIG_MAC802154_HPWORK nor CONFIG_MAC802154_LPWORK defined
|
||||
# endif
|
||||
#endif
|
||||
|
||||
/****************************************************************************
|
||||
* Private Types
|
||||
@ -128,9 +150,12 @@ struct ieee802154_privmac_s
|
||||
FAR struct mac802154_trans_s *indirect_head;
|
||||
FAR struct mac802154_trans_s *indirect_tail;
|
||||
|
||||
FAR struct ieee802154_txdesc_s *txhead; /* Next TX descriptor to handle */
|
||||
FAR struct ieee802154_txdesc_s *txtail; /* Location to push TX descriptor */
|
||||
struct ieee802154_txdesc_s txtable[CONFIG_IEEE802154_NTXDESC];
|
||||
uint8_t txdesc_count;
|
||||
struct ieee802154_txdesc_s txdesc[CONFIG_IEEE802154_NTXDESC];
|
||||
|
||||
/* Support a singly linked list of frames received */
|
||||
FAR struct iob_s *rxframes_head;
|
||||
FAR struct iob_s *rxframes_tail;
|
||||
|
||||
/* MAC PIB attributes, grouped to save memory */
|
||||
|
||||
@ -254,6 +279,9 @@ struct ieee802154_privmac_s
|
||||
static inline int mac802154_takesem(sem_t *sem);
|
||||
#define mac802154_givesem(s) sem_post(s);
|
||||
|
||||
static void mac802154_txdone_worker(FAR void *arg);
|
||||
static void mac802154_rxframe_worker(FAR void *arg);
|
||||
|
||||
/* Internal Functions */
|
||||
|
||||
static int mac802154_defaultmib(FAR struct ieee802154_privmac_s *priv);
|
||||
@ -261,16 +289,20 @@ static int mac802154_applymib(FAR struct ieee802154_privmac_s *priv);
|
||||
|
||||
/* IEEE 802.15.4 PHY Interface OPs */
|
||||
|
||||
static int mac802154_poll_csma(FAR struct ieee802154_radiocb_s *radiocb,
|
||||
static int mac802154_poll_csma(FAR const struct ieee802154_radiocb_s *radiocb,
|
||||
FAR struct ieee802154_txdesc_s *tx_desc,
|
||||
FAR uint8_t *buf);
|
||||
|
||||
static int mac802154_poll_gts(FAR struct ieee802154_radiocb_s *radiocb,
|
||||
static int mac802154_poll_gts(FAR const struct ieee802154_radiocb_s *radiocb,
|
||||
FAR struct ieee802154_txdesc_s *tx_desc,
|
||||
FAR uint8_t *buf);
|
||||
|
||||
static int mac802154_txdone(FAR struct ieee802154_radiocb_s *radiocb,
|
||||
FAR struct ieee802154_txdesc_s *tx_desc);
|
||||
static void mac802154_txdone(FAR const struct ieee802154_radiocb_s *radiocb,
|
||||
FAR const struct ieee802154_txdesc_s *tx_desc);
|
||||
|
||||
static void mac802154_rxframe(FAR const struct ieee802154_radiocb_s *radiocb,
|
||||
FAR struct ieee802154_rxdesc_s *rx_desc,
|
||||
FAR struct iob_s *frame);
|
||||
|
||||
/****************************************************************************
|
||||
* Private Data
|
||||
@ -346,7 +378,7 @@ static int mac802154_applymib(FAR struct ieee802154_privmac_s *priv)
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
static int mac802154_poll_csma(FAR struct ieee802154_radiocb_s *radiocb,
|
||||
static int mac802154_poll_csma(FAR const struct ieee802154_radiocb_s *radiocb,
|
||||
FAR struct ieee802154_txdesc_s *tx_desc,
|
||||
FAR uint8_t *buf)
|
||||
{
|
||||
@ -377,8 +409,7 @@ static int mac802154_poll_csma(FAR struct ieee802154_radiocb_s *radiocb,
|
||||
|
||||
/* Setup the transmit descriptor */
|
||||
|
||||
tx_desc->psdu_handle = trans->msdu_handle;
|
||||
tx_desc->psdu_length = trans->mhr_len + trans->d_len;
|
||||
tx_desc->handle = trans->msdu_handle;
|
||||
|
||||
/* Copy the frame into the buffer */
|
||||
|
||||
@ -392,7 +423,7 @@ static int mac802154_poll_csma(FAR struct ieee802154_radiocb_s *radiocb,
|
||||
*/
|
||||
|
||||
sem_post(&trans->sem);
|
||||
return tx_desc->psdu_length;
|
||||
return (trans->mhr_len + trans->d_len);
|
||||
}
|
||||
|
||||
mac802154_givesem(&priv->exclsem);
|
||||
@ -410,7 +441,7 @@ static int mac802154_poll_csma(FAR struct ieee802154_radiocb_s *radiocb,
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
static int mac802154_poll_gts(FAR struct ieee802154_radiocb_s *radiocb,
|
||||
static int mac802154_poll_gts(FAR const struct ieee802154_radiocb_s *radiocb,
|
||||
FAR struct ieee802154_txdesc_s *tx_desc,
|
||||
FAR uint8_t *buf)
|
||||
{
|
||||
@ -449,14 +480,12 @@ static int mac802154_poll_gts(FAR struct ieee802154_radiocb_s *radiocb,
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
static int mac802154_txdone(FAR struct ieee802154_radiocb_s *radiocb,
|
||||
static void mac802154_txdone(FAR const struct ieee802154_radiocb_s *radiocb,
|
||||
FAR const struct ieee802154_txdesc_s *tx_desc)
|
||||
{
|
||||
FAR struct mac802154_radiocb_s *cb =
|
||||
(FAR struct mac802154_radiocb_s *)radiocb;
|
||||
FAR struct ieee802154_privmac_s *priv;
|
||||
FAR struct ieee802154_txdesc_s *desc;
|
||||
int ret = 0;
|
||||
|
||||
DEBUGASSERT(cb != NULL && cb->priv != NULL);
|
||||
priv = cb->priv;
|
||||
@ -467,23 +496,20 @@ static int mac802154_txdone(FAR struct ieee802154_radiocb_s *radiocb,
|
||||
|
||||
while (mac802154_takesem(&priv->exclsem) != 0);
|
||||
|
||||
/* Allocate a tx_desc */
|
||||
/* Check to see if there is an available tx descriptor slot. If there is
|
||||
* not we simply drop the notification */
|
||||
|
||||
desc = kmm_zalloc(sizeof(struct ieee802154_txdesc_s));
|
||||
if (desc == NULL)
|
||||
if (priv->txdesc_count < CONFIG_IEEE802154_NTXDESC)
|
||||
{
|
||||
mac802154_givesem(&priv->exclsem);
|
||||
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
/* Copy the txdesc over and link it into our list */
|
||||
|
||||
memcpy(desc, tx_desc, sizeof(ieee802154_txdesc_s));
|
||||
|
||||
/* Link the descriptor */
|
||||
|
||||
#warning Missing Logic!
|
||||
memcpy(&priv->txdesc[priv->txdesc_count++], tx_desc,
|
||||
sizeof(struct ieee802154_txdesc_s));
|
||||
}
|
||||
else
|
||||
{
|
||||
wlinfo("MAC802154: No room for TX Desc.\n");
|
||||
}
|
||||
|
||||
mac802154_givesem(&priv->exclsem);
|
||||
|
||||
@ -492,7 +518,7 @@ static int mac802154_txdone(FAR struct ieee802154_radiocb_s *radiocb,
|
||||
if (work_available(&priv->tx_work))
|
||||
{
|
||||
work_queue(MAC802154_WORK, &priv->tx_work, mac802154_txdone_worker,
|
||||
(FAR void *)dev, 0);
|
||||
(FAR void *)priv, 0);
|
||||
}
|
||||
}
|
||||
|
||||
@ -508,8 +534,30 @@ static int mac802154_txdone(FAR struct ieee802154_radiocb_s *radiocb,
|
||||
|
||||
static void mac802154_txdone_worker(FAR void *arg)
|
||||
{
|
||||
FAR struct ieee802154_privmanc_s *priv =
|
||||
(FAR struct ieee802154_privmanc_s *)arg;
|
||||
FAR struct ieee802154_privmac_s *priv =
|
||||
(FAR struct ieee802154_privmac_s *)arg;
|
||||
int i = 0;
|
||||
|
||||
/* Get exclusive access to the driver structure. We don't care about any
|
||||
* signals so if we see one, just go back to trying to get access again.
|
||||
*/
|
||||
|
||||
while (mac802154_takesem(&priv->exclsem) != 0);
|
||||
|
||||
/* For each pending TX descriptor, send an application callback */
|
||||
|
||||
for (i = 0; i < priv->txdesc_count; i++)
|
||||
{
|
||||
priv->cb->mcps_notify(priv->cb, IEEE802154_NOTIFY_CONF_DATA,
|
||||
(FAR const union ieee802154_mcps_notify_u *) &priv->txdesc[i]);
|
||||
}
|
||||
|
||||
/* We've handled all the descriptors and no further desc could have been added
|
||||
* since we have the struct locked */
|
||||
|
||||
priv->txdesc_count = 0;
|
||||
|
||||
mac802154_givesem(&priv->exclsem);
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
@ -526,15 +574,14 @@ static void mac802154_txdone_worker(FAR void *arg)
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
static void mac802154_rxframe(FAR struct ieee802154_radiocb_s *radiocb,
|
||||
static void mac802154_rxframe(FAR const struct ieee802154_radiocb_s *radiocb,
|
||||
FAR struct ieee802154_rxdesc_s *rx_desc,
|
||||
FAR struct iob_s *frame)
|
||||
{
|
||||
FAR struct mac802154_radiocb_s *cb =
|
||||
(FAR struct mac802154_radiocb_s *)radiocb;
|
||||
FAR struct ieee802154_privmac_s *priv;
|
||||
FAR struct ieee802154_txdesc_s *desc;
|
||||
int ret = 0;
|
||||
FAR struct ieee802154_rxdesc_s *desc;
|
||||
|
||||
DEBUGASSERT(cb != NULL && cb->priv != NULL);
|
||||
priv = cb->priv;
|
||||
@ -549,8 +596,8 @@ static void mac802154_rxframe(FAR struct ieee802154_radiocb_s *radiocb,
|
||||
|
||||
/* Push the iob onto the tail of the frame list for processing */
|
||||
|
||||
priv->rxframes_tail->io_flink = iob;
|
||||
priv->rxframes_tail = iob;
|
||||
priv->rxframes_tail->io_flink = frame;
|
||||
priv->rxframes_tail = frame;
|
||||
|
||||
mac802154_givesem(&priv->exclsem);
|
||||
|
||||
@ -642,6 +689,7 @@ MACHANDLE mac802154_create(FAR struct ieee802154_radio_s *radiodev)
|
||||
radiocb->poll_csma = mac802154_poll_csma;
|
||||
radiocb->poll_gts = mac802154_poll_gts;
|
||||
radiocb->txdone = mac802154_txdone;
|
||||
radiocb->rxframe = mac802154_rxframe;
|
||||
|
||||
/* Bind our callback structure */
|
||||
|
||||
@ -981,7 +1029,7 @@ int mac802154_req_data(MACHANDLE mac, FAR struct ieee802154_data_req_s *req)
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
int mac802154_req_purge(MACHANDLE mac, uint8_t handle)
|
||||
int mac802154_req_purge(MACHANDLE mac, FAR struct ieee802154_purge_req_s *req)
|
||||
{
|
||||
FAR struct ieee802154_privmac_s *priv =
|
||||
(FAR struct ieee802154_privmac_s *)mac;
|
||||
@ -1060,7 +1108,7 @@ int mac802154_req_disassociate(MACHANDLE mac,
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
int mac802154_req_get(MACHANDLE mac, enum ieee802154_pib_attr_e attr)
|
||||
int mac802154_req_get(MACHANDLE mac, FAR struct ieee802154_get_req_s *req)
|
||||
{
|
||||
FAR struct ieee802154_privmac_s *priv =
|
||||
(FAR struct ieee802154_privmac_s *)mac;
|
||||
@ -1078,7 +1126,7 @@ int mac802154_req_get(MACHANDLE mac, enum ieee802154_pib_attr_e attr)
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
int mac802154_req_gts(MACHANDLE mac, FAR uint8_t *characteristics)
|
||||
int mac802154_req_gts(MACHANDLE mac, FAR struct ieee802154_gts_req_s *req)
|
||||
{
|
||||
FAR struct ieee802154_privmac_s *priv =
|
||||
(FAR struct ieee802154_privmac_s *)mac;
|
||||
@ -1095,7 +1143,7 @@ int mac802154_req_gts(MACHANDLE mac, FAR uint8_t *characteristics)
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
int mac802154_req_reset(MACHANDLE mac, bool setdefaults)
|
||||
int mac802154_req_reset(MACHANDLE mac, FAR struct ieee802154_reset_req_s *req)
|
||||
{
|
||||
FAR struct ieee802154_privmac_s * priv =
|
||||
(FAR struct ieee802154_privmac_s *) mac;
|
||||
@ -1113,8 +1161,8 @@ int mac802154_req_reset(MACHANDLE mac, bool setdefaults)
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
int mac802154_req_rxenable(MACHANDLE mac, bool deferrable, int ontime,
|
||||
int duration)
|
||||
int mac802154_req_rxenable(MACHANDLE mac,
|
||||
FAR struct ieee802154_rxenable_req_s *req)
|
||||
{
|
||||
FAR struct ieee802154_privmac_s * priv =
|
||||
(FAR struct ieee802154_privmac_s *)mac;
|
||||
@ -1136,8 +1184,7 @@ int mac802154_req_rxenable(MACHANDLE mac, bool deferrable, int ontime,
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
int mac802154_req_scan(MACHANDLE mac, uint8_t type, uint32_t channels,
|
||||
int duration)
|
||||
int mac802154_req_scan(MACHANDLE mac, FAR struct ieee802154_scan_req_s *req)
|
||||
{
|
||||
FAR struct ieee802154_privmac_s *priv =
|
||||
(FAR struct ieee802154_privmac_s *)mac;
|
||||
@ -1154,8 +1201,7 @@ int mac802154_req_scan(MACHANDLE mac, uint8_t type, uint32_t channels,
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
int mac802154_req_set(MACHANDLE mac, int attribute, FAR uint8_t *value,
|
||||
int valuelen)
|
||||
int mac802154_req_set(MACHANDLE mac, FAR struct ieee802154_set_req_s *req)
|
||||
{
|
||||
FAR struct ieee802154_privmac_s *priv =
|
||||
(FAR struct ieee802154_privmac_s *)mac;
|
||||
@ -1172,9 +1218,7 @@ int mac802154_req_set(MACHANDLE mac, int attribute, FAR uint8_t *value,
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
int mac802154_req_start(MACHANDLE mac, uint16_t panid, int channel,
|
||||
uint8_t bo, uint8_t fo, bool coord, bool batext,
|
||||
bool realign)
|
||||
int mac802154_req_start(MACHANDLE mac, FAR struct ieee802154_start_req_s *req)
|
||||
{
|
||||
FAR struct ieee802154_privmac_s *priv =
|
||||
(FAR struct ieee802154_privmac_s *)mac;
|
||||
@ -1192,7 +1236,7 @@ int mac802154_req_start(MACHANDLE mac, uint16_t panid, int channel,
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
int mac802154_req_sync(MACHANDLE mac, int channel, bool track)
|
||||
int mac802154_req_sync(MACHANDLE mac, FAR struct ieee802154_sync_req_s *req)
|
||||
{
|
||||
FAR struct ieee802154_privmac_s *priv =
|
||||
(FAR struct ieee802154_privmac_s *)mac;
|
||||
@ -1210,7 +1254,7 @@ int mac802154_req_sync(MACHANDLE mac, int channel, bool track)
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
int mac802154_req_poll(MACHANDLE mac, FAR uint8_t *coordaddr)
|
||||
int mac802154_req_poll(MACHANDLE mac, FAR struct ieee802154_poll_req_s *req)
|
||||
{
|
||||
FAR struct ieee802154_privmac_s *priv =
|
||||
(FAR struct ieee802154_privmac_s *)mac;
|
||||
@ -1226,8 +1270,8 @@ int mac802154_req_poll(MACHANDLE mac, FAR uint8_t *coordaddr)
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
int mac802154_rsp_associate(MACHANDLE mac, uint8_t eadr, uint16_t saddr,
|
||||
int status)
|
||||
int mac802154_rsp_associate(MACHANDLE mac,
|
||||
FAR struct ieee802154_assoc_resp_s *resp)
|
||||
{
|
||||
FAR struct ieee802154_privmac_s *priv =
|
||||
(FAR struct ieee802154_privmac_s *)mac;
|
||||
@ -1243,8 +1287,8 @@ int mac802154_rsp_associate(MACHANDLE mac, uint8_t eadr, uint16_t saddr,
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
int mac802154_rsp_orphan(MACHANDLE mac, FAR uint8_t *orphanaddr,
|
||||
uint16_t saddr, bool associated)
|
||||
int mac802154_rsp_orphan(MACHANDLE mac,
|
||||
FAR struct ieee802154_orphan_resp_s *resp)
|
||||
{
|
||||
FAR struct ieee802154_privmac_s *priv =
|
||||
(FAR struct ieee802154_privmac_s *)mac;
|
||||
|
@ -120,7 +120,7 @@ int mac802154_req_data(MACHANDLE mac, FAR struct ieee802154_data_req_s *req);
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
int mac802154_req_purge(MACHANDLE mac, uint8_t handle);
|
||||
int mac802154_req_purge(MACHANDLE mac, FAR struct ieee802154_purge_req_s *req);
|
||||
|
||||
/****************************************************************************
|
||||
* Name: mac802154_req_associate
|
||||
@ -162,7 +162,7 @@ int mac802154_req_disassociate(MACHANDLE mac,
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
int mac802154_req_get(MACHANDLE mac, enum ieee802154_pib_attr_e attr);
|
||||
int mac802154_req_get(MACHANDLE mac, FAR struct ieee802154_get_req_s *req);
|
||||
|
||||
/****************************************************************************
|
||||
* Name: mac802154_req_gts
|
||||
@ -175,7 +175,7 @@ int mac802154_req_get(MACHANDLE mac, enum ieee802154_pib_attr_e attr);
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
int mac802154_req_gts(MACHANDLE mac, FAR uint8_t *characteristics);
|
||||
int mac802154_req_gts(MACHANDLE mac, FAR struct ieee802154_gts_req_s *req);
|
||||
|
||||
/****************************************************************************
|
||||
* Name: mac802154_req_reset
|
||||
@ -187,7 +187,7 @@ int mac802154_req_gts(MACHANDLE mac, FAR uint8_t *characteristics);
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
int mac802154_req_reset(MACHANDLE mac, bool setdefaults);
|
||||
int mac802154_req_reset(MACHANDLE mac, FAR struct ieee802154_reset_req_s *req);
|
||||
|
||||
/****************************************************************************
|
||||
* Name: mac802154_req_rxenable
|
||||
@ -200,8 +200,8 @@ int mac802154_req_reset(MACHANDLE mac, bool setdefaults);
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
int mac802154_req_rxenable(MACHANDLE mac, bool deferrable, int ontime,
|
||||
int duration);
|
||||
int mac802154_req_rxenable(MACHANDLE mac,
|
||||
FAR struct ieee802154_rxenable_req_s *req);
|
||||
|
||||
/****************************************************************************
|
||||
* Name: mac802154_req_scan
|
||||
@ -218,8 +218,7 @@ int mac802154_req_rxenable(MACHANDLE mac, bool deferrable, int ontime,
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
int mac802154_req_scan(MACHANDLE mac, uint8_t type, uint32_t channels,
|
||||
int duration);
|
||||
int mac802154_req_scan(MACHANDLE mac, FAR struct ieee802154_scan_req_s *req);
|
||||
|
||||
/****************************************************************************
|
||||
* Name: mac802154_req_set
|
||||
@ -231,8 +230,7 @@ int mac802154_req_scan(MACHANDLE mac, uint8_t type, uint32_t channels,
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
int mac802154_req_set(MACHANDLE mac, int attribute, FAR uint8_t *value,
|
||||
int valuelen);
|
||||
int mac802154_req_set(MACHANDLE mac, FAR struct ieee802154_set_req_s *req);
|
||||
|
||||
/****************************************************************************
|
||||
* Name: mac802154_req_start
|
||||
@ -244,9 +242,7 @@ int mac802154_req_set(MACHANDLE mac, int attribute, FAR uint8_t *value,
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
int mac802154_req_start(MACHANDLE mac, uint16_t panid, int channel,
|
||||
uint8_t bo, uint8_t fo, bool coord, bool batext,
|
||||
bool realign);
|
||||
int mac802154_req_start(MACHANDLE mac, FAR struct ieee802154_start_req_s *req);
|
||||
|
||||
/****************************************************************************
|
||||
* Name: mac802154_req_sync
|
||||
@ -259,7 +255,7 @@ int mac802154_req_start(MACHANDLE mac, uint16_t panid, int channel,
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
int mac802154_req_sync(MACHANDLE mac, int channel, bool track);
|
||||
int mac802154_req_sync(MACHANDLE mac, FAR struct ieee802154_sync_req_s *req);
|
||||
|
||||
/****************************************************************************
|
||||
* Name: mac802154_req_poll
|
||||
@ -272,7 +268,7 @@ int mac802154_req_sync(MACHANDLE mac, int channel, bool track);
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
int mac802154_req_poll(MACHANDLE mac, FAR uint8_t *coordaddr);
|
||||
int mac802154_req_poll(MACHANDLE mac, FAR struct ieee802154_poll_req_s *req);
|
||||
|
||||
/****************************************************************************
|
||||
* Name: mac802154_rsp_associate
|
||||
@ -283,8 +279,8 @@ int mac802154_req_poll(MACHANDLE mac, FAR uint8_t *coordaddr);
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
int mac802154_rsp_associate(MACHANDLE mac, uint8_t eadr, uint16_t saddr,
|
||||
int status);
|
||||
int mac802154_rsp_associate(MACHANDLE mac,
|
||||
FAR struct ieee802154_assoc_resp_s *resp);
|
||||
|
||||
/****************************************************************************
|
||||
* Name: mac802154_rsp_orphan
|
||||
@ -295,8 +291,8 @@ int mac802154_rsp_associate(MACHANDLE mac, uint8_t eadr, uint16_t saddr,
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
int mac802154_rsp_orphan(MACHANDLE mac, FAR uint8_t *orphanaddr,
|
||||
uint16_t saddr, bool associated);
|
||||
int mac802154_rsp_orphan(MACHANDLE mac,
|
||||
FAR struct ieee802154_orphan_resp_s *resp);
|
||||
|
||||
#undef EXTERN
|
||||
#ifdef __cplusplus
|
||||
|
@ -139,6 +139,14 @@ struct mac802154_chardevice_s
|
||||
static inline int mac802154dev_takesem(sem_t *sem);
|
||||
#define mac802154dev_givesem(s) sem_post(s);
|
||||
|
||||
static void mac802154dev_mlme_notify(FAR const struct ieee802154_maccb_s *maccb,
|
||||
enum ieee802154_macnotify_e notif,
|
||||
FAR const union ieee802154_mlme_notify_u *arg);
|
||||
|
||||
static void mac802154dev_mcps_notify(FAR const struct ieee802154_maccb_s *maccb,
|
||||
enum ieee802154_macnotify_e notif,
|
||||
FAR const union ieee802154_mcps_notify_u *arg);
|
||||
|
||||
static int mac802154dev_open(FAR struct file *filep);
|
||||
static int mac802154dev_close(FAR struct file *filep);
|
||||
static ssize_t mac802154dev_read(FAR struct file *filep, FAR char *buffer,
|
||||
@ -151,7 +159,7 @@ static int mac802154dev_ioctl(FAR struct file *filep, int cmd,
|
||||
/* MAC callback helpers */
|
||||
|
||||
static void mac802154dev_conf_data(FAR struct mac802154_chardevice_s *dev,
|
||||
FAR struct ieee802154_data_conf_s *conf);
|
||||
FAR const struct ieee802154_data_conf_s *conf);
|
||||
|
||||
/****************************************************************************
|
||||
* Private Data
|
||||
@ -591,9 +599,9 @@ static int mac802154dev_ioctl(FAR struct file *filep, int cmd,
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void mac802154dev_mlme_notify(FAR struct ieee802154_maccb_s *maccb,
|
||||
static void mac802154dev_mlme_notify(FAR const struct ieee802154_maccb_s *maccb,
|
||||
enum ieee802154_macnotify_e notif,
|
||||
FAR union ieee802154_mlme_notify_u *arg)
|
||||
FAR const union ieee802154_mlme_notify_u *arg)
|
||||
{
|
||||
FAR struct mac802154dev_callback_s *cb =
|
||||
(FAR struct mac802154dev_callback_s *)maccb;
|
||||
@ -610,9 +618,9 @@ static void mac802154dev_mlme_notify(FAR struct ieee802154_maccb_s *maccb,
|
||||
}
|
||||
}
|
||||
|
||||
static void mac802154dev_mcps_notify(FAR struct ieee802154_maccb_s *maccb,
|
||||
static void mac802154dev_mcps_notify(FAR const struct ieee802154_maccb_s *maccb,
|
||||
enum ieee802154_macnotify_e notif,
|
||||
FAR union ieee802154_mcps_notify_u *arg)
|
||||
FAR const union ieee802154_mcps_notify_u *arg)
|
||||
{
|
||||
FAR struct mac802154dev_callback_s *cb =
|
||||
(FAR struct mac802154dev_callback_s *)maccb;
|
||||
@ -634,7 +642,7 @@ static void mac802154dev_mcps_notify(FAR struct ieee802154_maccb_s *maccb,
|
||||
}
|
||||
|
||||
static void mac802154dev_conf_data(FAR struct mac802154_chardevice_s *dev,
|
||||
FAR struct ieee802154_data_conf_s *conf)
|
||||
FAR const struct ieee802154_data_conf_s *conf)
|
||||
{
|
||||
FAR struct mac802154dev_dwait_s *curr;
|
||||
FAR struct mac802154dev_dwait_s *prev;
|
||||
@ -647,7 +655,7 @@ static void mac802154dev_conf_data(FAR struct mac802154_chardevice_s *dev,
|
||||
/* Search to see if there is a dwait pending for this transaction */
|
||||
|
||||
for (prev = NULL, curr = dev->md_dwait;
|
||||
curr && curr->mw_handle != conf->msdu_handle;
|
||||
curr && curr->mw_handle != conf->handle;
|
||||
prev = curr, curr = curr->mw_flink);
|
||||
|
||||
/* If a dwait is found */
|
||||
@ -669,7 +677,7 @@ static void mac802154dev_conf_data(FAR struct mac802154_chardevice_s *dev,
|
||||
|
||||
/* Copy the transmission status into the dwait struct */
|
||||
|
||||
curr->mw_status = conf->msdu_handle;
|
||||
curr->mw_status = conf->status;
|
||||
|
||||
/* Wake the thread waiting for the data transmission */
|
||||
|
||||
|
@ -254,13 +254,13 @@ static ssize_t radio802154dev_read(FAR struct file *filep, FAR char *buffer, siz
|
||||
goto done;
|
||||
}
|
||||
|
||||
ret = dev->child->ops->rxenable(dev->child, 1, buf);
|
||||
#warning Receive needs to be redone!
|
||||
#if 0
|
||||
ret = dev->child->ops->rxenable(dev->child, 1, buf);
|
||||
if (ret < 0)
|
||||
{
|
||||
goto done;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* if no packet is received, this will produce -EAGAIN
|
||||
* The user is responsible for sleeping until sth arrives
|
||||
@ -282,6 +282,8 @@ static ssize_t radio802154dev_read(FAR struct file *filep, FAR char *buffer, siz
|
||||
dev->child->ops->rxenable(dev->child, 0, NULL);
|
||||
ret = buf->len;
|
||||
|
||||
#endif
|
||||
|
||||
done:
|
||||
return ret;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user