mirror of
https://github.com/apache/nuttx.git
synced 2026-05-19 11:53:25 +08:00
PktRadio: Add a loopback driver for testing on the simulator.
This commit is contained in:
@@ -829,6 +829,12 @@ pashello
|
||||
|
||||
Configures to use apps/examples/pashello.
|
||||
|
||||
pktradio
|
||||
|
||||
This configuration is identical to the 'sixlowpan configuration
|
||||
described below EXCEPT that is uses the genericl packet radio
|
||||
loopback network device.
|
||||
|
||||
sixlowpan
|
||||
|
||||
This configuration was intended only for unit-level testing of the
|
||||
@@ -841,6 +847,8 @@ sixlowpan
|
||||
packets on output to the loopback device and correctly decodes the
|
||||
returned packet.
|
||||
|
||||
See also the 'pktradio' configuration.
|
||||
|
||||
touchscreen
|
||||
|
||||
This configuration uses the simple touchscreen test at
|
||||
|
||||
@@ -0,0 +1,106 @@
|
||||
# CONFIG_MMCSD_MMCSUPPORT is not set
|
||||
# CONFIG_MMCSD_SPI is not set
|
||||
# CONFIG_NET_ETHERNET is not set
|
||||
# CONFIG_NET_IPv4 is not set
|
||||
# CONFIG_NET_UDP_CHECKSUMS is not set
|
||||
# CONFIG_NSH_CMDOPT_DF_H is not set
|
||||
# CONFIG_SIM_NETDEV is not set
|
||||
CONFIG_ARCH_BOARD_SIM=y
|
||||
CONFIG_ARCH_BOARD="sim"
|
||||
CONFIG_ARCH_SIM=y
|
||||
CONFIG_ARCH_STACKDUMP=y
|
||||
CONFIG_ARCH="sim"
|
||||
CONFIG_AT24XX_ADDR=0x57
|
||||
CONFIG_AT24XX_EXTENDED=y
|
||||
CONFIG_AT24XX_EXTSIZE=160
|
||||
CONFIG_AT24XX_SIZE=2
|
||||
CONFIG_BOARD_LOOPSPERMSEC=51262
|
||||
CONFIG_BOARDCTL_POWEROFF=y
|
||||
CONFIG_BUILTIN_PROXY_STACKSIZE=2048
|
||||
CONFIG_BUILTIN=y
|
||||
CONFIG_DEBUG_SYMBOLS=y
|
||||
CONFIG_DISABLE_POLL=y
|
||||
CONFIG_DRIVERS_WIRELESS=y
|
||||
CONFIG_EXAMPLES_NETTEST_SERVER_PORTNO=61616
|
||||
CONFIG_EXAMPLES_NETTEST_SERVERIPv6ADDR_1=0xfe80
|
||||
CONFIG_EXAMPLES_NETTEST_SERVERIPv6ADDR_6=0x00ff
|
||||
CONFIG_EXAMPLES_NETTEST_SERVERIPv6ADDR_7=0xfe00
|
||||
CONFIG_EXAMPLES_NETTEST_SERVERIPv6ADDR_8=0xcda9
|
||||
CONFIG_EXAMPLES_NETTEST_STACKSIZE1=4096
|
||||
CONFIG_EXAMPLES_NETTEST=y
|
||||
CONFIG_EXAMPLES_NSH=y
|
||||
CONFIG_EXAMPLES_UDPBLASTER_HOSTIPv6_1=0xfe80
|
||||
CONFIG_EXAMPLES_UDPBLASTER_HOSTIPv6_6=0x00ff
|
||||
CONFIG_EXAMPLES_UDPBLASTER_HOSTIPv6_7=0xfe00
|
||||
CONFIG_EXAMPLES_UDPBLASTER_HOSTIPv6_8=0x1034
|
||||
CONFIG_EXAMPLES_UDPBLASTER_STACKSIZE=8192
|
||||
CONFIG_EXAMPLES_UDPBLASTER_TARGETIPv6_1=0xfe80
|
||||
CONFIG_EXAMPLES_UDPBLASTER_TARGETIPv6_6=0x00ff
|
||||
CONFIG_EXAMPLES_UDPBLASTER_TARGETIPv6_7=0xfe00
|
||||
CONFIG_EXAMPLES_UDPBLASTER_TARGETIPv6_8=0xa9cd
|
||||
CONFIG_EXAMPLES_UDPBLASTER=y
|
||||
CONFIG_EXPERIMENTAL=y
|
||||
CONFIG_FAT_LCNAMES=y
|
||||
CONFIG_FAT_LFN=y
|
||||
CONFIG_FS_FAT=y
|
||||
CONFIG_FS_PROCFS=y
|
||||
CONFIG_I2C_DRIVER=y
|
||||
CONFIG_IDLETHREAD_STACKSIZE=4096
|
||||
CONFIG_IOB_BUFSIZE=128
|
||||
CONFIG_IOB_NBUFFERS=48
|
||||
CONFIG_MAX_TASKS=16
|
||||
CONFIG_MAX_WDOGPARMS=2
|
||||
CONFIG_MMCSD_MULTIBLOCK_DISABLE=y
|
||||
CONFIG_MMCSD=y
|
||||
CONFIG_MTD_AT24XX=y
|
||||
CONFIG_MTD_AT25=y
|
||||
CONFIG_MTD_CONFIG=y
|
||||
CONFIG_MTD=y
|
||||
CONFIG_NET_6LOWPAN_TCP_RECVWNDO=102
|
||||
CONFIG_NET_6LOWPAN=y
|
||||
CONFIG_NET_BROADCAST=y
|
||||
CONFIG_NET_HOSTNAME="SAMV71-XULT"
|
||||
CONFIG_NET_IPv6=y
|
||||
CONFIG_NET_SOCKOPTS=y
|
||||
CONFIG_NET_STATISTICS=y
|
||||
CONFIG_NET_TCP_WRITE_BUFFERS=y
|
||||
CONFIG_NET_TCP=y
|
||||
CONFIG_NET_TCPBACKLOG=y
|
||||
CONFIG_NET_UDP=y
|
||||
CONFIG_NET=y
|
||||
CONFIG_NETDB_DNSCLIENT=y
|
||||
CONFIG_NETDEV_MULTINIC=y
|
||||
CONFIG_NETDEV_PHY_IOCTL=y
|
||||
CONFIG_NETDEV_STATISTICS=y
|
||||
CONFIG_NETDEV_TELNET=y
|
||||
CONFIG_NETDEVICES=y
|
||||
CONFIG_NFILE_DESCRIPTORS=8
|
||||
CONFIG_NFILE_STREAMS=8
|
||||
CONFIG_NSH_ARCHINIT=y
|
||||
CONFIG_NSH_BUILTIN_APPS=y
|
||||
CONFIG_NSH_FILEIOSIZE=512
|
||||
CONFIG_NSH_LINELEN=64
|
||||
CONFIG_NSH_NOMAC=y
|
||||
CONFIG_NSH_READLINE=y
|
||||
CONFIG_PKTRADIO_LOOPBACK=y
|
||||
CONFIG_POSIX_SPAWN_PROXY_STACKSIZE=2048
|
||||
CONFIG_PREALLOC_MQ_MSGS=4
|
||||
CONFIG_PREALLOC_TIMERS=4
|
||||
CONFIG_PTHREAD_STACK_DEFAULT=4096
|
||||
CONFIG_RAM_SIZE=393216
|
||||
CONFIG_RAM_START=0x20400000
|
||||
CONFIG_RAW_BINARY=y
|
||||
CONFIG_RR_INTERVAL=200
|
||||
CONFIG_SCHED_HPWORK=y
|
||||
CONFIG_SCHED_HPWORKSTACKSIZE=4096
|
||||
CONFIG_SCHED_WAITPID=y
|
||||
CONFIG_SDCLONE_DISABLE=y
|
||||
CONFIG_STANDARD_SERIAL=y
|
||||
CONFIG_START_DAY=10
|
||||
CONFIG_START_MONTH=3
|
||||
CONFIG_START_YEAR=2014
|
||||
CONFIG_TASK_SPAWN_DEFAULT_STACKSIZE=4096
|
||||
CONFIG_USER_ENTRYPOINT="nsh_main"
|
||||
CONFIG_USERMAIN_STACKSIZE=8192
|
||||
CONFIG_WIRELESS_PKTRADIO=y
|
||||
CONFIG_WIRELESS=y
|
||||
@@ -47,6 +47,7 @@
|
||||
#include <nuttx/board.h>
|
||||
#include <nuttx/clock.h>
|
||||
#include <nuttx/timers/oneshot.h>
|
||||
#include <nuttx/wireless/pktradio.h>
|
||||
#include <nuttx/wireless/ieee802154/ieee802154_loopback.h>
|
||||
|
||||
#include "up_internal.h"
|
||||
@@ -150,5 +151,15 @@ int sim_bringup(void)
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_PKTRADIO_LOOPBACK
|
||||
/* Initialize and register the IEEE802.15.4 MAC network loop device */
|
||||
|
||||
ret = pktradio_loopback();
|
||||
if (ret < 0)
|
||||
{
|
||||
_err("ERROR: pktradio_loopback() failed: %d\n", ret);
|
||||
}
|
||||
#endif
|
||||
|
||||
return OK;
|
||||
}
|
||||
|
||||
@@ -159,5 +159,25 @@ FAR struct pktradio_metadata_s *pktradio_metadata_allocate(void);
|
||||
|
||||
void pktradio_metadata_free(FAR struct pktradio_metadata_s *metadata);
|
||||
|
||||
/****************************************************************************
|
||||
* Name: pktradio_loopback
|
||||
*
|
||||
* Description:
|
||||
* Initialize and register the Ieee802.15.4 MAC loopback network driver.
|
||||
*
|
||||
* Parameters:
|
||||
* None
|
||||
*
|
||||
* Returned Value:
|
||||
* OK on success; Negated errno on failure.
|
||||
*
|
||||
* Assumptions:
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
#ifdef CONFIG_PKTRADIO_LOOPBACK
|
||||
int pktradio_loopback(void);
|
||||
#endif
|
||||
|
||||
#endif /* CONFIG_WIRELESS_PKTRADIO */
|
||||
#endif /* __INCLUDE_NUTTX_WIRELESS_PKTRADIO_H */
|
||||
|
||||
@@ -51,7 +51,7 @@
|
||||
****************************************************************************/
|
||||
|
||||
/******************************************************************************
|
||||
* Name: neibhbor_dump_address
|
||||
* Name: neighbor_dump_address
|
||||
*
|
||||
* Description:
|
||||
* Dump a data buffer to the SYSLOG.
|
||||
@@ -65,7 +65,7 @@
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
static void neibhbor_dump_address(FAR const uint8_t *buffer, unsigned int buflen)
|
||||
static void neighbor_dump_address(FAR const uint8_t *buffer, unsigned int buflen)
|
||||
{
|
||||
char outbuf[16*3 + 9]; /* 6-byte header header + 16 hex bytes +
|
||||
* 2 space separator + NUL termination */
|
||||
@@ -143,7 +143,7 @@ void neighbor_dumpentry(FAR const char *msg,
|
||||
if (neighbor->ne_addr.u.na_lltype == NET_LL_ETHERNET)
|
||||
#endif
|
||||
{
|
||||
neibhbor_dump_address(neighbor->ne_addr.u.na_ethernet.ether_addr_octet,
|
||||
neighbor_dump_address(neighbor->ne_addr.u.na_ethernet.ether_addr_octet,
|
||||
neighbor->ne_addr.na_llsize);
|
||||
}
|
||||
#endif
|
||||
@@ -153,7 +153,7 @@ void neighbor_dumpentry(FAR const char *msg,
|
||||
else
|
||||
#endif
|
||||
{
|
||||
neibhbor_dump_address(neighbor->ne_addr.u.na_sixlowpan.nm_addr,
|
||||
neighbor_dump_address(neighbor->ne_addr.u.na_sixlowpan.nm_addr,
|
||||
neighbor->ne_addr.na_llsize);
|
||||
}
|
||||
#endif /* CONFIG_NET_6LOWPAN */
|
||||
|
||||
@@ -106,7 +106,7 @@ struct lo_driver_s
|
||||
|
||||
/* This holds the information visible to the NuttX network */
|
||||
|
||||
struct sixlowpan_driver_s lo_ieee; /* Interface understood by the network */
|
||||
struct sixlowpan_driver_s lo_radio; /* Interface understood by the network */
|
||||
};
|
||||
|
||||
/****************************************************************************
|
||||
@@ -153,12 +153,10 @@ static int lo_ifup(FAR struct net_driver_s *dev);
|
||||
static int lo_ifdown(FAR struct net_driver_s *dev);
|
||||
static void lo_txavail_work(FAR void *arg);
|
||||
static int lo_txavail(FAR struct net_driver_s *dev);
|
||||
#if defined(CONFIG_NET_IGMP) || defined(CONFIG_NET_ICMPv6)
|
||||
static int lo_addmac(FAR struct net_driver_s *dev, FAR const uint8_t *mac);
|
||||
#ifdef CONFIG_NET_IGMP
|
||||
static int lo_addmac(FAR struct net_driver_s *dev, FAR const uint8_t *mac);
|
||||
static int lo_rmmac(FAR struct net_driver_s *dev, FAR const uint8_t *mac);
|
||||
#endif
|
||||
#endif
|
||||
#ifdef CONFIG_NETDEV_IOCTL
|
||||
static int lo_ioctl(FAR struct net_driver_s *dev, int cmd,
|
||||
unsigned long arg);
|
||||
@@ -323,7 +321,7 @@ static int lo_loopback(FAR struct net_driver_s *dev)
|
||||
|
||||
/* Increment statistics */
|
||||
|
||||
NETDEV_RXPACKETS(&priv->lo_ieee.r_dev);
|
||||
NETDEV_RXPACKETS(&priv->lo_radio.r_dev);
|
||||
|
||||
/* Remove the IOB from the queue */
|
||||
|
||||
@@ -343,17 +341,17 @@ static int lo_loopback(FAR struct net_driver_s *dev)
|
||||
ninfo("Send frame %p to the network: Offset=%u Length=%u\n",
|
||||
iob, iob->io_offset, iob->io_len);
|
||||
|
||||
ret = sixlowpan_input(&priv->lo_ieee, iob, (FAR void *)&ind);
|
||||
ret = sixlowpan_input(&priv->lo_radio, iob, (FAR void *)&ind);
|
||||
|
||||
/* Increment statistics */
|
||||
|
||||
NETDEV_TXPACKETS(&priv->lo_ieee.r_dev);
|
||||
NETDEV_TXPACKETS(&priv->lo_radio.r_dev);
|
||||
|
||||
if (ret < 0)
|
||||
{
|
||||
nerr("ERROR: sixlowpan_input returned %d\n", ret);
|
||||
NETDEV_TXERRORS(&priv->lo_ieee.r_dev);
|
||||
NETDEV_ERRORS(&priv->lo_ieee.r_dev);
|
||||
NETDEV_TXERRORS(&priv->lo_radio.r_dev);
|
||||
NETDEV_ERRORS(&priv->lo_radio.r_dev);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -384,7 +382,7 @@ static void lo_loopback_work(FAR void *arg)
|
||||
/* Perform the loopback */
|
||||
|
||||
net_lock();
|
||||
(void)lo_loopback(&priv->lo_ieee.r_dev);
|
||||
(void)lo_loopback(&priv->lo_radio.r_dev);
|
||||
net_unlock();
|
||||
}
|
||||
|
||||
@@ -412,7 +410,7 @@ static void lo_poll_work(FAR void *arg)
|
||||
/* Perform the poll */
|
||||
|
||||
net_lock();
|
||||
(void)devif_timer(&priv->lo_ieee.r_dev, lo_loopback);
|
||||
(void)devif_timer(&priv->lo_radio.r_dev, lo_loopback);
|
||||
|
||||
/* Setup the watchdog poll timer again */
|
||||
|
||||
@@ -566,7 +564,7 @@ static void lo_txavail_work(FAR void *arg)
|
||||
{
|
||||
/* If so, then poll the network for new XMIT data */
|
||||
|
||||
(void)devif_poll(&priv->lo_ieee.r_dev, lo_loopback);
|
||||
(void)devif_poll(&priv->lo_radio.r_dev, lo_loopback);
|
||||
}
|
||||
|
||||
net_unlock();
|
||||
@@ -636,7 +634,7 @@ static int lo_txavail(FAR struct net_driver_s *dev)
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
#if defined(CONFIG_NET_IGMP) || defined(CONFIG_NET_ICMPv6)
|
||||
#ifdef CONFIG_NET_IGMP
|
||||
static int lo_addmac(FAR struct net_driver_s *dev, FAR const uint8_t *mac)
|
||||
{
|
||||
#ifdef CONFIG_NET_6LOWPAN_EXTENDEDADDR
|
||||
@@ -854,7 +852,7 @@ static int lo_req_data(FAR struct sixlowpan_driver_s *netdev,
|
||||
{
|
||||
/* Increment statistics */
|
||||
|
||||
NETDEV_RXPACKETS(&priv->lo_ieee.r_dev);
|
||||
NETDEV_RXPACKETS(&priv->lo_radio.r_dev);
|
||||
|
||||
/* Remove the IOB from the queue */
|
||||
|
||||
@@ -953,7 +951,7 @@ int ieee8021514_loopback(void)
|
||||
|
||||
memset(priv, 0, sizeof(struct lo_driver_s));
|
||||
|
||||
radio = &priv->lo_ieee;
|
||||
radio = &priv->lo_radio;
|
||||
dev = &radio->r_dev;
|
||||
dev->d_ifup = lo_ifup; /* I/F up (new IP address) callback */
|
||||
dev->d_ifdown = lo_ifdown; /* I/F down callback */
|
||||
@@ -987,12 +985,12 @@ int ieee8021514_loopback(void)
|
||||
* performed.
|
||||
*/
|
||||
|
||||
(void)netdev_register(&priv->lo_ieee.r_dev, NET_LL_IEEE802154);
|
||||
(void)netdev_register(&priv->lo_radio.r_dev, NET_LL_IEEE802154);
|
||||
|
||||
/* Put the network in the UP state */
|
||||
|
||||
dev->d_flags = IFF_UP;
|
||||
return lo_ifup(&priv->lo_ieee.r_dev);
|
||||
return lo_ifup(&priv->lo_radio.r_dev);
|
||||
}
|
||||
|
||||
#endif /* CONFIG_IEEE802154_LOOPBACK */
|
||||
|
||||
@@ -172,14 +172,12 @@ static int macnet_ifdown(FAR struct net_driver_s *dev);
|
||||
static void macnet_txavail_work(FAR void *arg);
|
||||
static int macnet_txavail(FAR struct net_driver_s *dev);
|
||||
|
||||
#if defined(CONFIG_NET_IGMP) || defined(CONFIG_NET_ICMPv6)
|
||||
#ifdef CONFIG_NET_IGMP
|
||||
static int macnet_addmac(FAR struct net_driver_s *dev,
|
||||
FAR const uint8_t *mac);
|
||||
#ifdef CONFIG_NET_IGMP
|
||||
static int macnet_rmmac(FAR struct net_driver_s *dev,
|
||||
FAR const uint8_t *mac);
|
||||
#endif
|
||||
#endif
|
||||
#ifdef CONFIG_NETDEV_IOCTL
|
||||
static int macnet_ioctl(FAR struct net_driver_s *dev, int cmd,
|
||||
unsigned long arg);
|
||||
@@ -742,7 +740,7 @@ static int macnet_txavail(FAR struct net_driver_s *dev)
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
#if defined(CONFIG_NET_IGMP) || defined(CONFIG_NET_ICMPv6)
|
||||
#ifdef CONFIG_NET_IGMP
|
||||
static int macnet_addmac(FAR struct net_driver_s *dev, FAR const uint8_t *mac)
|
||||
{
|
||||
FAR struct macnet_driver_s *priv = (FAR struct macnet_driver_s *)dev->d_private;
|
||||
|
||||
@@ -32,4 +32,12 @@ config PKTRADIO_NRXMETA
|
||||
This specifies the total number of preallocated meta data structures
|
||||
must be allocated with each incoming packet.
|
||||
|
||||
config PKTRADIO_LOOPBACK
|
||||
bool "PktRadio 6LoWPAN Loopback"
|
||||
default n
|
||||
depends on NET_6LOWPAN && NET_IPv6
|
||||
select ARCH_HAVE_NETDEV_STATISTICS
|
||||
---help---
|
||||
Add support for the PktRadio 6LoWPAN Loopback test device.
|
||||
|
||||
endif # WIRELESS_PKTRADIO
|
||||
|
||||
@@ -39,6 +39,10 @@ ifeq ($(CONFIG_WIRELESS_PKTRADIO),y)
|
||||
|
||||
CSRCS += pktradio_metadata.c
|
||||
|
||||
ifeq ($(CONFIG_PKTRADIO_LOOPBACK),y)
|
||||
CSRCS += pktradio_loopback.c
|
||||
endif
|
||||
|
||||
DEPPATH += --dep-path pktradio
|
||||
VPATH += :pktradio
|
||||
CFLAGS += ${shell $(INCDIR) $(INCDIROPT) "$(CC)" $(TOPDIR)$(DELIM)wireless$(DELIM)pktradio}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user