Skip to content

Commit

Permalink
tests: added test app for the at86rf2xx driver
Browse files Browse the repository at this point in the history
  • Loading branch information
haukepetersen committed Apr 27, 2015
1 parent 3f88f1d commit 9390c86
Show file tree
Hide file tree
Showing 3 changed files with 229 additions and 0 deletions.
81 changes: 81 additions & 0 deletions tests/driver_at86rf2xx/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
APPLICATION = driver_at86rf2xx
include ../Makefile.tests_common

FEATURES_REQUIRED = periph_spi periph_gpio

BOARD_INSUFFICIENT_RAM := stm32f0discovery
BOARD_BLACKLIST := nucleo-f334
# nucleo-f334: not enough GPIO pins defined

ifneq (,$(filter saml21-xpro,$(BOARD)))
DRIVER ?= ng_at86rf212b
export ATRF_SPI ?= SPI_0
export ATRF_CS ?= EXT1_SPI_SS
export ATRF_INT ?= EXT1_P09
export ATRF_RESET ?= EXT1_P07
export ATRF_SLEEP ?= EXT1_P10
export ATRF_SPI_SPEED ?= SPI_SPEED_1MHZ
endif
ifneq (,$(filter iot-lab_M3,$(BOARD)))
DRIVER ?= ng_at86rf231
export ATRF_SPI ?= SPI_0
export ATRF_CS ?= GPIO_11
export ATRF_INT ?= GPIO_12
export ATRF_RESET ?= GPIO_13
export ATRF_SLEEP ?= GPIO_14
endif
ifneq (,$(filter samr21-xpro,$(BOARD)))
DRIVER ?= ng_at86rf233
export ATRF_SPI ?= SPI_0
export ATRF_CS ?= GPIO_4
export ATRF_INT ?= GPIO_5
export ATRF_RESET ?= GPIO_6
export ATRF_SLEEP ?= GPIO_7
export ATRF_SPI_SPEED ?= SPI_SPEED_1MHZ
endif

ifneq (,$(DRIVER))
USEMODULE += $(DRIVER)
else
USEMODULE += ng_at86rf231 # default to ng_at86rf231
endif
USEMODULE += ng_netbase
USEMODULE += ng_nomac
USEMODULE += ng_pktdump
USEMODULE += uart0
USEMODULE += shell
USEMODULE += shell_commands
USEMODULE += ps

CFLAGS += -DDEVELHELP

ifneq (,$(ATRF_SPI))
CFLAGS += -DATRF_SPI=$(ATRF_SPI)
else
CFLAGS += -DATRF_SPI=SPI_0 # set default
endif
ifneq (,$(ATRF_CS))
CFLAGS += -DATRF_CS=$(ATRF_CS)
else
CFLAGS += -DATRF_CS=GPIO_0 # set default
endif
ifneq (,$(ATRF_INT))
CFLAGS += -DATRF_INT=$(ATRF_INT)
else
CFLAGS += -DATRF_INT=GPIO_1 # set default
endif
ifneq (,$(ATRF_SLEEP))
CFLAGS += -DATRF_SLEEP=$(ATRF_SLEEP)
else
CFLAGS += -DATRF_SLEEP=GPIO_2 # set default
endif
ifneq (,$(ATRF_RESET))
CFLAGS += -DATRF_RESET=$(ATRF_RESET)
else
CFLAGS += -DATRF_RESET=GPIO_3 # set default
endif
ifneq (,$(ATRF_SPI_SPEED))
CFLAGS += -DATRF_SPI_SPEED=$(ATRF_SPI_SPEED)
endif

include $(RIOTBASE)/Makefile.include
16 changes: 16 additions & 0 deletions tests/driver_at86rf2xx/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# About
This is a manual test application for the AT86RF2xx radio driver

For running this test, you need to connect/configure the following pins of your
radio device:
- SPI MISO
- SPI MOSI
- SPI CLK
- CS (ship select)
- RESET
- SLEEP
- INT (external interrupt)

# Usage
For testing the radio driver you can use the netif and txtsnd shell commands
that are included in this application.
132 changes: 132 additions & 0 deletions tests/driver_at86rf2xx/main.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,132 @@
/*
* Copyright (C) 2015 Freie Universität Berlin
*
* This file is subject to the terms and conditions of the GNU Lesser
* General Public License v2.1. See the file LICENSE in the top level
* directory for more details.
*/

/**
* @ingroup tests
* @{
*
* @file
* @brief Test application for AT86RF2xx network device driver
*
* @author Hauke Petersen <[email protected]>
*
* @}
*/

#include <stdio.h>

#include "board.h"
#include "kernel.h"
#include "shell.h"
#include "shell_commands.h"
#include "posix_io.h"
#include "board_uart0.h"
#include "ng_at86rf2xx.h"
#include "net/ng_netbase.h"
#include "net/ng_nomac.h"
#include "net/ng_pktdump.h"

/* make sure the SPI port and the needed GPIO pins are defined */
#ifndef ATRF_SPI
#error "SPI not defined"
#endif
#ifndef ATRF_CS
#error "Chip select pin not defined"
#endif
#ifndef ATRF_INT
#error "Interrupt pin not defined"
#endif
#ifndef ATRF_SLEEP
#error "Sleep pin not defined"
#endif
#ifndef ATRF_RESET
#error "Reset pin not defined"
#endif
#ifndef ATRF_SPI_SPEED
#define ATRF_SPI_SPEED (SPI_SPEED_5MHZ)
#endif

/**
* @brief Buffer size used by the shell
*/
#define SHELL_BUFSIZE (64U)

/**
* @brief Allocate the AT86RF2xx device descriptor
*/
static ng_at86rf2xx_t dev;

/**
* @brief Stack for the nomac thread
*/
static char nomac_stack[KERNEL_CONF_STACKSIZE_MAIN];

/**
* @brief Read chars from STDIO
*/
int shell_read(void)
{
char c = 0;
(void) posix_read(uart0_handler_pid, &c, 1);
return c;
}

/**
* @brief Write chars to STDIO
*/
void shell_put(int c)
{
putchar((char)c);
}

/**
* @brief Maybe you are a golfer?!
*/
int main(void)
{
kernel_pid_t iface;
int res;
shell_t shell;
ng_netreg_entry_t dump;

puts("AT86RF2xx device driver test");
printf("Initializing the radio at SPI_%i... \n", ATRF_SPI);

/* register the pktdump thread */
puts("Register the packet dump thread for NG_NETTYPE_UNDEF packets");
dump.pid = ng_pktdump_getpid();
dump.demux_ctx = NG_NETREG_DEMUX_CTX_ALL;
ng_netreg_register(NG_NETTYPE_UNDEF, &dump);

/* initialize the AT86RF2xx device */
puts("Initialize the AT86RF2xx radio device");
res = ng_at86rf2xx_init(&dev, ATRF_SPI, ATRF_SPI_SPEED,
ATRF_CS, ATRF_INT,
ATRF_SLEEP, ATRF_RESET);
if (res < 0) {
puts("Error initializing AT86RF2xx radio device");
return -1;
}

/* start MAC layer */
puts("Starting the NOMAC layer on top of the driver");
iface = ng_nomac_init(nomac_stack, sizeof(nomac_stack), PRIORITY_MAIN - 3,
"at86rf2xx", (ng_netdev_t *)&dev);
if (iface <= KERNEL_PID_UNDEF) {
puts("Error initializing MAC layer");
return -1;
}

/* start the shell */
puts("Initialization successful - starting the shell now");
(void) posix_open(uart0_handler_pid, 0);
shell_init(&shell, NULL, SHELL_BUFSIZE, shell_read, shell_put);
shell_run(&shell);

return 0;
}

0 comments on commit 9390c86

Please sign in to comment.