diff --git a/drivers/Makefile.dep b/drivers/Makefile.dep index 4cad00bd128b9d8f7d929a9d7648b8758733eb6a..1ea87060730e594d21ac9e02ba4020af645cacff 100644 --- a/drivers/Makefile.dep +++ b/drivers/Makefile.dep @@ -267,6 +267,7 @@ ifneq (,$(filter sx127%,$(USEMODULE))) FEATURES_REQUIRED += periph_spi USEMODULE += xtimer USEMODULE += sx127x + USEMODULE += netif endif ifneq (,$(filter tcs37727,$(USEMODULE))) diff --git a/sys/auto_init/auto_init.c b/sys/auto_init/auto_init.c index 198aa358e3518b516394e905234bc34253bcaf98..c482210bf5e159981486e9344744ae74dec3923a 100644 --- a/sys/auto_init/auto_init.c +++ b/sys/auto_init/auto_init.c @@ -230,6 +230,11 @@ void auto_init(void) auto_init_w5100(); #endif +#ifdef MODULE_SX127X + extern void auto_init_sx127x(void); + auto_init_sx127x(); +#endif + #endif /* MODULE_AUTO_INIT_GNRC_NETIF */ #ifdef MODULE_GNRC_UHCPC diff --git a/sys/auto_init/netif/auto_init_sx127x.c b/sys/auto_init/netif/auto_init_sx127x.c new file mode 100644 index 0000000000000000000000000000000000000000..7abf9961a47e0dcd63b123a142d0771ae22f8fe7 --- /dev/null +++ b/sys/auto_init/netif/auto_init_sx127x.c @@ -0,0 +1,67 @@ +/* + * Copyright (C) 2017 Inria + * + * 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_gnrc_netif + * @{ + * + * @file + * @brief Auto initialization for SX1272/SX1276 LoRa interfaces + * + * @author Alexandre Abadie <alexandre.abadie@inria.fr> + */ + +#ifdef MODULE_SX127X + +#include "log.h" +#include "board.h" +#include "net/gnrc/netif/raw.h" +#include "net/gnrc.h" + +#include "sx127x.h" +#include "sx127x_params.h" + +/** + * @brief Calculate the number of configured SX127x devices + */ +#define SX127X_NUMOF (sizeof(sx127x_params) / sizeof(sx127x_params_t)) + +/** + * @brief Define stack parameters for the MAC layer thread + */ +#define SX127X_STACKSIZE (THREAD_STACKSIZE_DEFAULT) +#ifndef SX127X_PRIO +#define SX127X_PRIO (GNRC_NETIF_PRIO) +#endif + +/** + * @brief Allocate memory for device descriptors, stacks, and GNRC adaption + */ +static sx127x_t sx127x_devs[SX127X_NUMOF]; +static char sx127x_stacks[SX127X_NUMOF][SX127X_STACKSIZE]; + +void auto_init_sx127x(void) +{ + for (unsigned i = 0; i < SX127X_NUMOF; ++i) { +#if defined(MODULE_SX1272) + LOG_DEBUG("[auto_init_netif] initializing sx1272 #%u\n", i); +#else /* MODULE_SX1276 */ + LOG_DEBUG("[auto_init_netif] initializing sx1276 #%u\n", i); +#endif + + sx127x_setup(&sx127x_devs[i], &sx127x_params[i]); + gnrc_netif_raw_create(sx127x_stacks[i], SX127X_STACKSIZE, SX127X_PRIO, + "sx127x", (netdev_t *)&sx127x_devs[i]); + } +} + +#else +typedef int dont_be_pedantic; +#endif /* MODULE_SX127X */ +/** @} */