/* * 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 Xbee S1 network device driver * * @author Hauke Petersen * * @} */ #include #include "board.h" #include "kernel.h" #include "shell.h" #include "shell_commands.h" #include "xbee.h" #include "net/ng_netbase.h" #include "net/ng_nomac.h" #include "net/ng_pktdump.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 Buffer size used by the shell */ #define SHELL_BUFSIZE (64U) /** * @brief The Xbee device descriptor */ static xbee_t dev; /** * @brief Stack for the nomac thread */ static char nomac_stack[KERNEL_CONF_STACKSIZE_DEFAULT]; /** * @brief Stack for the pktdump thread */ static char dump_stack[KERNEL_CONF_STACKSIZE_MAIN]; /** * @brief Read chars from STDIO */ int shell_read(void) { return (int)getchar(); } /** * @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("Xbee S1 device driver test"); printf("Initializing the Xbee S1 device UART_%i... \n", XBEE_UART); /* initialize network module(s) */ ng_netif_init(); /* initialize and register pktdump */ dump.pid = ng_pktdump_init(dump_stack, sizeof(dump_stack), PRIORITY_MAIN - 2, "dump"); if (dump.pid <= KERNEL_PID_UNDEF) { puts("Error starting pktdump thread"); return -1; } dump.demux_ctx = NG_NETREG_DEMUX_CTX_ALL; ng_netreg_register(NG_NETTYPE_UNDEF, &dump); /* setup Xbee device */ res = xbee_init(&dev, XBEE_UART, XBEE_BAUDRATE, GPIO_NUMOF, GPIO_NUMOF); if (res < 0) { puts("Error initializing xbee device driver"); return -1; } /* start MAC layer */ iface = ng_nomac_init(nomac_stack, sizeof(nomac_stack), PRIORITY_MAIN - 3, "xbee_l2", (ng_netdev_t *)&dev); if (iface <= KERNEL_PID_UNDEF) { puts("Error initializing MAC layer"); return -1; } /* start the shell */ shell_init(&shell, NULL, SHELL_BUFSIZE, shell_read, shell_put); shell_run(&shell); return 0; }