diff --git a/Makefile.dep b/Makefile.dep index 89f4d4125f0dfe21f3f45965900ec35aff196861..153c14b66dce24bc47cc2eb7bccf15a0e95c34b7 100644 --- a/Makefile.dep +++ b/Makefile.dep @@ -365,6 +365,7 @@ ifneq (,$(filter emb6,$(USEMODULE))) USEPKG += emb6 USEMODULE += emb6_bsp USEMODULE += emb6_common + USEMODULE += emb6_contrib USEMODULE += emb6_ipv6 USEMODULE += emb6_ipv6_multicast USEMODULE += emb6_llsec diff --git a/pkg/emb6/Makefile.include b/pkg/emb6/Makefile.include index 505f6e26989b67371c85edce178e36ae05ff66dd..ef653e1a6d7f65522966c8f995cfc9578df81e7b 100644 --- a/pkg/emb6/Makefile.include +++ b/pkg/emb6/Makefile.include @@ -1,7 +1,9 @@ PKG_BUILDDIR ?= $(BINDIRBASE)/pkg/$(BOARD)/emb6 EMB6_DIR := $(PKG_BUILDDIR) +EMB6_CONTRIB := $(RIOTBASE)/pkg/emb6/contrib -INCLUDES += -I$(EMB6_DIR)/target +INCLUDES += -I$(PKG_BUILDDIR)/target +INCLUDES += -I$(RIOTBASE)/pkg/emb6/include ifeq (,$(filter emb6_router,$(USEMODULE))) CFLAGS += -DEMB6_CONF_ROUTER=FALSE @@ -16,6 +18,10 @@ ifneq (,$(filter emb6_common,$(USEMODULE))) INCLUDES += -I$(EMB6_DIR)/emb6 endif +ifneq (,$(filter emb6_contrib,$(USEMODULE))) + DIRS += $(EMB6_CONTRIB) +endif + ifneq (,$(filter emb6_ipv6,$(USEMODULE))) DIRS += $(EMB6_DIR)/emb6/src/net/ipv6 INCLUDES += -I$(EMB6_DIR)/emb6/inc/net/ipv6 diff --git a/pkg/emb6/contrib/Makefile b/pkg/emb6/contrib/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..600b0c807bb1c68b3910ffdad113e45d2cc77c28 --- /dev/null +++ b/pkg/emb6/contrib/Makefile @@ -0,0 +1,3 @@ +MODULE = emb6_contrib + +include $(RIOTBASE)/Makefile.base diff --git a/pkg/emb6/contrib/board_conf.c b/pkg/emb6/contrib/board_conf.c new file mode 100644 index 0000000000000000000000000000000000000000..4096341f3deceb5d695932b58f14ab689e720613 --- /dev/null +++ b/pkg/emb6/contrib/board_conf.c @@ -0,0 +1,34 @@ +/* + * Copyright (C) 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. + */ + +/** + * @{ + * + * @file + * @author Martine Lenders <mlenders@inf.fu-berlin.de> + */ + +#include "etimer.h" +#include "board_conf.h" + +#define ENABLE_DEBUG (0) +#include "debug.h" + +uint8_t board_conf(s_ns_t *ps_nStack) +{ + if (ps_nStack != NULL) { + etimer_init(); + return ps_nStack->inif->init(ps_nStack); + } + else { + DEBUG("Network stack pointer is NULL"); + return 0; + } +} + +/** @} */ diff --git a/pkg/emb6/contrib/target.c b/pkg/emb6/contrib/target.c new file mode 100644 index 0000000000000000000000000000000000000000..ac256b4d670fa95672f9673b09d221ad4e3d778d --- /dev/null +++ b/pkg/emb6/contrib/target.c @@ -0,0 +1,213 @@ +/* + * Copyright (C) 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. + */ + +/** + * @{ + * + * @file + * @author Martine Lenders <mlenders@inf.fu-berlin.de> + */ + +#include <inttypes.h> + +#include "cpu.h" +#include "led.h" +#include "mutex.h" +#include "periph/gpio.h" +#include "periph/hwrng.h" +#include "xtimer.h" + +#include "target.h" +#include "bsp.h" + +static mutex_t critical_mutex = MUTEX_INIT; + +void hal_enterCritical(void) +{ + mutex_lock(&critical_mutex); +} + +void hal_exitCritical(void) +{ + mutex_unlock(&critical_mutex); +} + +int8_t hal_init(void) +{ + /* Should have happened long before emb6 started, so nothing to do */ + return 1; +} + +uint8_t hal_getrand(void) +{ +#if RANDOM_NUMOF + uint8_t res; + hwnrg_read((char *)&res, sizeof(res)); + return res; +#elif defined(MODULE_RANDOM) + return (uint8_t)(genrand_uint32() % UINT8_MAX); +#else + return 4; /* keeping the meme alive ;-) */ +#endif +} + +void hal_ledOn(uint16_t ui_led) +{ + switch (ui_led) { + case E_BSP_LED_RED: + LED0_ON; + break; + case E_BSP_LED_YELLOW: + LED1_ON; + break; + case E_BSP_LED_GREEN: + LED2_ON; + break; + default: + break; + } +} + +void hal_ledOff(uint16_t ui_led) +{ + switch (ui_led) { + case E_BSP_LED_RED: + LED0_OFF; + break; + case E_BSP_LED_YELLOW: + LED1_OFF; + break; + case E_BSP_LED_GREEN: + LED2_OFF; + break; + default: + break; + } +} + +uint8_t hal_extIntInit(en_targetExtInt_t e_extInt, pfn_intCallb_t pfn_intCallback) +{ + /* RIOT does this in netdev2 initialization so nothing to do here. */ + return 0; +} + +void hal_delay_us(uint32_t i_delay) +{ + xtimer_usleep(i_delay); +} + +uint8_t hal_gpioPinInit(uint8_t c_pin, uint8_t c_dir, uint8_t c_initState) +{ + /* Only used in board init code => not needed */ + (void)c_pin; + (void)c_dir; + (void)c_initState; + return 0; +} + +void *hal_ctrlPinInit(en_targetExtPin_t e_pinType) +{ + (void)e_pinType; + return NULL; +} + +void hal_pinSet(void *p_pin) +{ + /* Only used in board/driver-related code code => not needed */ +} + +void hal_pinClr(void *p_pin) +{ + /* Only used in board/driver-related code code => not needed */ +} + +uint8_t hal_pinGet(void *p_pin) +{ + /* Only used in board/driver-related code code => not needed */ + return 0; +} + +void *hal_spiInit(void) +{ + /* Only used in board/driver-related code code => not needed */ + return 0; +} + +/*----------------------------------------------------------------------------*/ +/** \brief This function selects slave with which we will work + * \param p_spi Pointer to spi description entity + * \param action true or false + * + * \return 0 if failed, 1 id ok + */ +/*---------------------------------------------------------------------------*/ +uint8_t hal_spiSlaveSel(void *p_spi, bool action) +{ + /* Only used in board/driver-related code code => not needed */ + return 0; +} + +uint8_t hal_spiTransceive( uint8_t *txData, uint8_t *p_reg) +{ + /* Only used in board/driver-related code code => not needed */ + return 0; +} + +uint8_t hal_spiRead(uint8_t *p_reg, uint16_t i_length) +{ + /* Only used in board/driver-related code code => not needed */ + return 0; +} + + +/*----------------------------------------------------------------------------*/ +/** \brief This function writes a new value via given SPI interface + * registers. + * + * + * \param value Pointer to a value. + * \param i_length Length of a data to be received + */ +/*----------------------------------------------------------------------------*/ +void hal_spiWrite(uint8_t *value, uint16_t i_length) +{ + /* Only used in board/driver-related code code => not needed */ +} + +void hal_watchdogReset(void) +{ + /* WDT and tick-less scheduling don't make much sense */ +} + +void hal_watchdogStart(void) +{ + /* WDT and tick-less scheduling don't make much sense */ +} + +void hal_watchdogStop(void) +{ + /* WDT and tick-less scheduling don't make much sense */ +} + +clock_time_t hal_getTick(void) +{ + return (clock_time_t)xtimer_now(); +} + +clock_time_t hal_getSec(void) +{ + return (clock_time_t)xtimer_now() / SEC_IN_USEC; +} + + +clock_time_t hal_getTRes(void) +{ + return SEC_IN_USEC; +} + +/** @} */ diff --git a/pkg/emb6/include/board_conf.h b/pkg/emb6/include/board_conf.h new file mode 100644 index 0000000000000000000000000000000000000000..56c765618874e2714b9641de25a2c93bae1f0aaf --- /dev/null +++ b/pkg/emb6/include/board_conf.h @@ -0,0 +1,46 @@ +/* + * Copyright (C) 2016 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. + */ + +/** + * @defgroup emb6 emb6 network stack + * @ingroup pkg + * @brief + * @{ + * + * @file + * @brief "Board" configuration for emb6 + * + * @author Martine Lenders <mlenders@inf.fu-berlin.de> + */ + +#ifndef EMB6_BOARD_CONF_H_ +#define EMB6_BOARD_CONF_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include "emb6.h" + +/** + * @brief emb6 board configuration function + * + * @param[in] ps_nStack pointer to global netstack struct + * + * @return success 1 + * @return failure 0 + */ +uint8_t board_conf(s_ns_t *ps_nStack); + +#ifdef __cplusplus +} +#endif + +#endif /* EMB6_BOARD_CONF_H_ */ +/** @} */ +/** @} */