From 518f645779676c9d0d5e985c335b0ef909c5f2db Mon Sep 17 00:00:00 2001 From: Martine Lenders Date: Mon, 1 Feb 2016 14:31:54 +0100 Subject: [PATCH] emb6: provide minimal HAL wrapper --- Makefile.dep | 1 + pkg/emb6/Makefile.include | 8 +- pkg/emb6/contrib/Makefile | 3 + pkg/emb6/contrib/board_conf.c | 34 ++++++ pkg/emb6/contrib/target.c | 213 ++++++++++++++++++++++++++++++++++ pkg/emb6/include/board_conf.h | 46 ++++++++ 6 files changed, 304 insertions(+), 1 deletion(-) create mode 100644 pkg/emb6/contrib/Makefile create mode 100644 pkg/emb6/contrib/board_conf.c create mode 100644 pkg/emb6/contrib/target.c create mode 100644 pkg/emb6/include/board_conf.h diff --git a/Makefile.dep b/Makefile.dep index 89f4d4125f..153c14b66d 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 505f6e2698..ef653e1a6d 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 0000000000..600b0c807b --- /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 0000000000..4096341f3d --- /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 + */ + +#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 0000000000..ac256b4d67 --- /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 + */ + +#include + +#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 0000000000..56c7656188 --- /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 + */ + +#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_ */ +/** @} */ +/** @} */