Skip to content
Snippets Groups Projects
Commit a89b3822 authored by Kaspar Schleiser's avatar Kaspar Schleiser
Browse files

drivers: xbee: adapt to new auto_init_ng_netif scheme

parent 3c00ff0c
No related branches found
No related tags found
No related merge requests found
......@@ -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
......
......@@ -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
}
/*
* 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 */
/** @} */
......@@ -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
include $(RIOTBASE)/Makefile.base
/*
* 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;
}
}
/*
* 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 */
/** @} */
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment