diff --git a/drivers/include/xbee.h b/drivers/include/xbee.h index 94a863ad0259cf297894593ed9f3efa5757157ee..29ed80f60561440e973a9688d98b4bc4f6e23174 100644 --- a/drivers/include/xbee.h +++ b/drivers/include/xbee.h @@ -155,6 +155,18 @@ extern const ng_netdev_driver_t xbee_driver; int xbee_init(xbee_t *dev, uart_t uart, uint32_t baudrate, gpio_t sleep_pin, gpio_t status_pin); +/** + * @brief auto_init struct holding Xbee device initalization params + */ +typedef struct xbee_params { + uart_t uart; /**< UART interfaced the device is connected to */ + uint32_t baudrate; /**< baudrate to use */ + gpio_t sleep_pin; /**< GPIO pin that is connected to the SLEEP pin + set to GPIO_NUMOF if not used */ + gpio_t status_pin; /**< GPIO pin that is connected to the STATUS pin + set to GPIO_NUMOF if not used */ +} xbee_params_t; + #ifdef __cplusplus } #endif diff --git a/sys/auto_init/auto_init.c b/sys/auto_init/auto_init.c index b1b39b8c41d0d341fa334a018ee7c052700c6ca2..ae046b875a92006c8d4116ffd8553a7c7523245c 100644 --- a/sys/auto_init/auto_init.c +++ b/sys/auto_init/auto_init.c @@ -314,4 +314,9 @@ void auto_init(void) extern void auto_init_ng_at86rf2xx(void); auto_init_ng_at86rf2xx(); #endif + +#ifdef MODULE_XBEE + extern void auto_init_xbee(void); + auto_init_xbee(); +#endif } diff --git a/sys/auto_init/netif/auto_init_xbee.c b/sys/auto_init/netif/auto_init_xbee.c new file mode 100644 index 0000000000000000000000000000000000000000..0c8798e2d5ad58c7c90f1971c61a609efc0d1475 --- /dev/null +++ b/sys/auto_init/netif/auto_init_xbee.c @@ -0,0 +1,71 @@ +/* + * Copyright (C) 2015 Kaspar Schleiser <kaspar@schleiser.de> + * + * 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 auto_init_ng_netif + * @{ + * + * @file + * @brief Auto initialization for XBee network interfaces + * + * @author Kaspar Schleiser <kaspar@schleiser.de> + */ + +#ifdef MODULE_XBEE + +#include "board.h" +#include "net/ng_nomac.h" +#include "net/ng_netbase.h" + +#include "xbee.h" +#include "xbee_params.h" + +#define ENABLE_DEBUG (0) +#include "debug.h" + +#define XBEE_NUM (sizeof(xbee_params)/sizeof(xbee_params_t)) + +static xbee_t xbee_devs[XBEE_NUM]; + +/** + * @brief Define stack parameters for the MAC layer thread + * @{ + */ +#define XBEE_MAC_STACKSIZE (KERNEL_CONF_STACKSIZE_DEFAULT) +#define XBEE_MAC_PRIO (PRIORITY_MAIN - 3) + +/** + * @brief Stacks for the MAC layer threads + */ +static char _nomac_stacks[XBEE_MAC_STACKSIZE][XBEE_NUM]; + +void auto_init_xbee(void) +{ + for (int i = 0; i < XBEE_NUM; i++) { + DEBUG("Initializing XBee radio at UART_%i\n", i); + const xbee_params_t *p = &xbee_params[i]; + int res = xbee_init(&xbee_devs[i], + p->uart, + p->baudrate, + p->sleep_pin, + p->status_pin); + + if (res < 0) { + DEBUG("Error initializing XBee radio device!"); + } + else { + ng_nomac_init(_nomac_stacks[i], + XBEE_MAC_STACKSIZE, XBEE_MAC_PRIO, "xbee", + (ng_netdev_t *)&xbee_devs[i]); + } + } +} + +#endif /* MODULE_XBEE */ +/** @} */ diff --git a/tests/driver_xbee/Makefile b/tests/driver_xbee/Makefile index 936c490161730f9ad6a489363e1b2c4d8934f8af..14c32603d7a84b45d13e7ad6221128571d12b382 100644 --- a/tests/driver_xbee/Makefile +++ b/tests/driver_xbee/Makefile @@ -18,6 +18,7 @@ endif USEMODULE += xbee USEMODULE += ng_netif +USEMODULE += auto_init_ng_netif USEMODULE += ng_nomac USEMODULE += ng_pktdump USEMODULE += shell @@ -30,4 +31,9 @@ else CFLAGS += -DXBEE_UART=UART_0 endif +# add current directory to the include path. Putting it in CFLAGS will make +# it go to the beginning, before the standard includes. +# That way xbee_params.h get's included and auto configuration can pick it up. +CFLAGS += -I$(CURDIR) + include $(RIOTBASE)/Makefile.include diff --git a/tests/driver_xbee/auto_init_ng_netif/Makefile b/tests/driver_xbee/auto_init_ng_netif/Makefile deleted file mode 100644 index 48422e909a47d7cd428d10fa73825060ccc8d8c2..0000000000000000000000000000000000000000 --- a/tests/driver_xbee/auto_init_ng_netif/Makefile +++ /dev/null @@ -1 +0,0 @@ -include $(RIOTBASE)/Makefile.base diff --git a/tests/driver_xbee/auto_init_ng_netif/netif_app.c b/tests/driver_xbee/auto_init_ng_netif/netif_app.c deleted file mode 100644 index c78bccc2173864bdfc8a898cf5064e0e2725e7b6..0000000000000000000000000000000000000000 --- a/tests/driver_xbee/auto_init_ng_netif/netif_app.c +++ /dev/null @@ -1,77 +0,0 @@ -/* - * 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 Xbee device initialization - * - * @author Hauke Petersen <hauke.petersen@fu-berlin.de> - * - * @} - */ - -#include <stdio.h> - -#include "kernel.h" -#include "xbee.h" -#include "net/ng_nomac.h" -#include "net/ng_netbase.h" - -/* make sure an UART to device is defined in the Makefile */ -#ifndef XBEE_UART -#error "XBEE_UART not defined" -#endif - -/** - * @brief This is the default baudrate the Xbee modules are programmed to - * when you buy them - */ -#define XBEE_BAUDRATE (9600U) - -/** - * @brief MAC layer stack configuration - * @{ - */ -#define STACKSIZE (KERNEL_CONF_STACKSIZE_DEFAULT) -#define PRIO (0) -/** @} */ - -/** - * @brief The Xbee device descriptor - */ -static xbee_t dev; - -/** - * @brief Stack for the nomac thread - */ -static char nomac_stack[STACKSIZE]; - - -void auto_init_ng_netif(void) -{ - int res; - kernel_pid_t iface; - - /* setup Xbee device */ - printf("Initializing the Xbee S1 device UART_%i... \n", XBEE_UART); - res = xbee_init(&dev, XBEE_UART, XBEE_BAUDRATE, GPIO_NUMOF, GPIO_NUMOF); - if (res < 0) { - puts("Error initializing xbee device driver"); - return; - } - /* start MAC layer */ - iface = ng_nomac_init(nomac_stack, sizeof(nomac_stack), PRIO, "xbee", - (ng_netdev_t *)(&dev)); - if (iface <= KERNEL_PID_UNDEF) { - puts("Error initializing MAC layer"); - return; - } -} diff --git a/tests/driver_xbee/xbee_params.h b/tests/driver_xbee/xbee_params.h new file mode 100644 index 0000000000000000000000000000000000000000..01c03d135b7e489f3cd2ca70760a867ad35a1e9a --- /dev/null +++ b/tests/driver_xbee/xbee_params.h @@ -0,0 +1,38 @@ +/* + * Copyright (C) 2015 Kaspar Schleiser <kaspar@schleiser.de> + * + * 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 xbee driver parameters example, used by auto_init_ng_netif + * + * @author Kaspar Schleiser <kaspar@schleiser.de> + */ + +#ifndef XBEE_PARAMS_H +#define XBEE_PARAMS_H + +#ifdef __cplusplus +extern "C" { +#endif + +static xbee_params_t xbee_params[] = { + { .uart = XBEE_UART, + .baudrate = 9600U, + .sleep_pin = GPIO_NUMOF, + .status_pin = GPIO_NUMOF + }, +}; + +#ifdef __cplusplus +} +#endif +#endif /* XBEE_PARAMS_H */ +/** @} */