From f4a8cba3715195a0b86d6c686b3bfe643db31dd1 Mon Sep 17 00:00:00 2001 From: Edvard Pettersen Date: Mon, 16 Jul 2018 16:39:19 +0200 Subject: [PATCH] Rehauled doxygen commenting and fixed TI drivers configuration --- arch/cpu/cc13xx-cc26xx/cc13xx-cc26xx-conf.h | 33 +- arch/cpu/cc13xx-cc26xx/doxygen-group.txt | 16 + .../rf-settings/cc26x0/ble-settings.c | 2 +- .../simplelink/cc13xx-cc26xx/contiki-conf.h | 20 +- .../cc13xx-cc26xx/launchpad/board-conf.h | 37 +- .../launchpad/board-peripherals.h | 18 +- .../launchpad/button-sensor-arch.c | 44 +- .../launchpad/cc1310/CC1310_LAUNCHXL.c | 111 +++-- .../launchpad/cc1310/CC1310_LAUNCHXL.h | 14 +- .../launchpad/cc1312r1/CC1312R1_LAUNCHXL.c | 111 +++-- .../launchpad/cc1312r1/CC1312R1_LAUNCHXL.h | 14 +- .../launchpad/cc1350-4/CC1350_LAUNCHXL_433.c | 103 ++-- .../launchpad/cc1350-4/CC1350_LAUNCHXL_433.h | 2 + .../launchpad/cc1350/CC1350_LAUNCHXL.c | 109 ++-- .../launchpad/cc1350/CC1350_LAUNCHXL.h | 14 +- .../launchpad/cc1352p-2/CC1352P_2_LAUNCHXL.c | 113 +++-- .../launchpad/cc1352p-2/CC1352P_2_LAUNCHXL.h | 20 +- .../launchpad/cc1352p-4/CC1352P_4_LAUNCHXL.c | 113 +++-- .../launchpad/cc1352p-4/CC1352P_4_LAUNCHXL.h | 20 +- .../launchpad/cc1352p1/CC1352P1_LAUNCHXL.c | 113 +++-- .../launchpad/cc1352p1/CC1352P1_LAUNCHXL.h | 16 +- .../launchpad/cc1352r1/CC1352R1_LAUNCHXL.c | 65 ++- .../launchpad/cc1352r1/CC1352R1_LAUNCHXL.h | 16 +- .../launchpad/cc2650/CC2650_LAUNCHXL.c | 107 ++-- .../launchpad/cc2650/CC2650_LAUNCHXL.h | 14 +- .../launchpad/cc26x2r1/CC26X2R1_LAUNCHXL.c | 67 ++- .../launchpad/cc26x2r1/CC26X2R1_LAUNCHXL.h | 16 +- .../cc13xx-cc26xx/launchpad/leds-arch.c | 12 +- .../simplelink/cc13xx-cc26xx/platform.c | 107 ++-- .../sensortag/Makefile.sensortag | 2 +- .../cc13xx-cc26xx/sensortag/bmp-280-sensor.c | 96 ++-- .../cc13xx-cc26xx/sensortag/bmp-280-sensor.h | 17 +- .../cc13xx-cc26xx/sensortag/board-conf.h | 40 +- .../sensortag/board-peripherals.h | 27 +- .../sensortag/button-sensor-arch.c | 56 ++- .../cc13xx-cc26xx/sensortag/buzzer.c | 14 +- .../cc13xx-cc26xx/sensortag/buzzer.h | 23 +- .../sensortag/cc1350/CC1350STK.c | 119 +++-- .../sensortag/cc1350/CC1350STK.h | 14 + .../sensortag/cc1350/leds-arch.c | 11 +- .../sensortag/cc1350/leds-arch.h | 22 +- .../sensortag/cc2650/CC2650STK.c | 121 +++-- .../sensortag/cc2650/CC2650STK.h | 15 + .../sensortag/cc2650/leds-arch.c | 12 +- .../sensortag/cc2650/leds-arch.h | 22 +- .../cc13xx-cc26xx/sensortag/ext-flash.c | 468 ------------------ .../cc13xx-cc26xx/sensortag/ext-flash.h | 116 ----- .../cc13xx-cc26xx/sensortag/hdc-1000-sensor.c | 142 +++--- .../cc13xx-cc26xx/sensortag/hdc-1000-sensor.h | 23 +- .../cc13xx-cc26xx/sensortag/mpu-9250-sensor.c | 158 +++--- .../cc13xx-cc26xx/sensortag/mpu-9250-sensor.h | 89 ++-- .../cc13xx-cc26xx/sensortag/opt-3001-sensor.c | 211 +++++--- .../cc13xx-cc26xx/sensortag/opt-3001-sensor.h | 46 +- .../sensortag/sensortag-sensors.c | 10 +- .../cc13xx-cc26xx/sensortag/tmp-007-sensor.c | 166 ++++--- .../cc13xx-cc26xx/sensortag/tmp-007-sensor.h | 52 +- .../cc13xx-cc26xx/srf06/als-sensor.c | 13 +- .../cc13xx-cc26xx/srf06/als-sensor.h | 9 +- .../cc13xx-cc26xx/srf06/board-conf.h | 39 +- .../cc13xx-cc26xx/srf06/board-peripherals.h | 20 +- .../cc13xx-cc26xx/srf06/button-sensor-arch.c | 85 ++-- .../cc13xx-cc26xx/srf06/cc13x0/CC1350DK_7XD.c | 102 +++- .../cc13xx-cc26xx/srf06/cc13x0/CC1350DK_7XD.h | 12 +- .../srf06/cc13x0/Makefile.cc13x0 | 2 +- .../cc13xx-cc26xx/srf06/cc26x0/CC2650DK_7ID.c | 103 +++- .../cc13xx-cc26xx/srf06/cc26x0/CC2650DK_7ID.h | 12 +- .../cc13xx-cc26xx/srf06/leds-arch.c | 19 +- .../cc13xx-cc26xx/srf06/srf06-sensors.c | 7 +- 68 files changed, 2252 insertions(+), 1710 deletions(-) create mode 100644 arch/cpu/cc13xx-cc26xx/doxygen-group.txt delete mode 100644 arch/platform/simplelink/cc13xx-cc26xx/sensortag/ext-flash.c delete mode 100644 arch/platform/simplelink/cc13xx-cc26xx/sensortag/ext-flash.h diff --git a/arch/cpu/cc13xx-cc26xx/cc13xx-cc26xx-conf.h b/arch/cpu/cc13xx-cc26xx/cc13xx-cc26xx-conf.h index 47aba1d9b..365b1e27a 100644 --- a/arch/cpu/cc13xx-cc26xx/cc13xx-cc26xx-conf.h +++ b/arch/cpu/cc13xx-cc26xx/cc13xx-cc26xx-conf.h @@ -220,7 +220,7 @@ #endif #ifndef TI_UART_CONF_UART1_ENABLE -#define TI_UART_CONF_UART1_ENABLE 1 +#define TI_UART_CONF_UART1_ENABLE 0 #endif #ifndef TI_UART_CONF_BAUD_RATE @@ -237,7 +237,7 @@ #endif #ifndef TI_SPI_CONF_SPI1_ENABLE -#define TI_SPI_CONF_SPI1_ENABLE 1 +#define TI_SPI_CONF_SPI1_ENABLE 0 #endif /* I2C */ @@ -245,6 +245,10 @@ #define TI_I2C_CONF_ENABLE 1 #endif +#ifndef TI_I2C_CONF_I2C0_ENABLE +#define TI_I2C_CONF_I2C0_ENABLE TI_I2C_CONF_ENABLE +#endif + /* NVS */ #ifndef TI_NVS_CONF_ENABLE #define TI_NVS_CONF_ENABLE 1 @@ -257,6 +261,31 @@ #ifndef TI_NVS_CONF_NVS_EXTERNAL_ENABLE #define TI_NVS_CONF_NVS_EXTERNAL_ENABLE TI_NVS_CONF_ENABLE #endif + +/* Display */ +#ifndef TI_DISPLAY_CONF_ENABLE +#define TI_DISPLAY_CONF_ENABLE 0 +#endif + +/* UART Display uses UART0 */ +#ifndef TI_DISPLAY_CONF_UART_ENABLE +#define TI_DISPLAY_CONF_UART_ENABLE TI_UART_CONF_UART0_ENABLE +#endif + +#ifndef TI_DISPLAY_CONF_USE_UART_ANSI +#define TI_DISPLAY_CONF_USE_UART_ANSI 0 +#endif + +/* LCD Display uses SPI0 */ +#ifndef TI_DISPLAY_CONF_LCD_ENABLE +#define TI_DISPLAY_CONF_LCD_ENABLE TI_SPI_CONF_SPI0_ENABLE +#endif + +/* SD card */ +#ifndef TI_SD_CONF_ENABLE +#define TI_SD_CONF_ENABLE 0 +#endif + /** @} */ /*---------------------------------------------------------------------------*/ /** diff --git a/arch/cpu/cc13xx-cc26xx/doxygen-group.txt b/arch/cpu/cc13xx-cc26xx/doxygen-group.txt new file mode 100644 index 000000000..ca6159c44 --- /dev/null +++ b/arch/cpu/cc13xx-cc26xx/doxygen-group.txt @@ -0,0 +1,16 @@ +/** + * \defgroup cc13xx-cc26xx-cpu The TI SimpleLink CC13xx and CC26xx SoC + * + * This group documents the TI CC13xx and CC26xx CPUs. The two CPU families are + * very similar, with the main difference being related to radio capability. + * + * Documentation in this group should be considered to be applicable to both + * families, unless explicitly stated otherwise. + * + * \ingroup cpu + */ + +/** + * \defgroup cc13xx-cc26xx-platform TI SimpleLink CC13xx/CC26xx platform + * \ingroup platform + */ diff --git a/arch/cpu/cc13xx-cc26xx/rf-settings/cc26x0/ble-settings.c b/arch/cpu/cc13xx-cc26xx/rf-settings/cc26x0/ble-settings.c index d803b0b60..048c9399d 100644 --- a/arch/cpu/cc13xx-cc26xx/rf-settings/cc26x0/ble-settings.c +++ b/arch/cpu/cc13xx-cc26xx/rf-settings/cc26x0/ble-settings.c @@ -50,7 +50,7 @@ #include /*---------------------------------------------------------------------------*/ -#include "ieee_settings.h" +#include "ble-settings.h" /*---------------------------------------------------------------------------*/ /* TI-RTOS RF Mode Object */ RF_Mode rf_ble_mode = diff --git a/arch/platform/simplelink/cc13xx-cc26xx/contiki-conf.h b/arch/platform/simplelink/cc13xx-cc26xx/contiki-conf.h index 69659c0b1..212f4fd48 100644 --- a/arch/platform/simplelink/cc13xx-cc26xx/contiki-conf.h +++ b/arch/platform/simplelink/cc13xx-cc26xx/contiki-conf.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, Texas Instruments Incorporated - http://www.ti.com/ + * Copyright (c) 2018, Texas Instruments Incorporated - http://www.ti.com/ * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -28,27 +28,33 @@ * OF THE POSSIBILITY OF SUCH DAMAGE. */ /** - * \addtogroup cc26xx-srf-tag + * \addtogroup cc13xx-cc26xx-platform * @{ * * \file - * Configuration for the srf06-cc26xx platform + * Configuration for the SimpleLink CC13xx/CC26xx platform. + * \author + * Edvard Pettersen */ /*---------------------------------------------------------------------------*/ #ifndef CONTIKI_CONF_H_ #define CONTIKI_CONF_H_ /*---------------------------------------------------------------------------*/ -#include - #include "board-conf.h" /*---------------------------------------------------------------------------*/ /* Include Project Specific conf */ #ifdef PROJECT_CONF_PATH #include PROJECT_CONF_PATH -#endif /* PROJECT_CONF_PATH */ +#endif /*---------------------------------------------------------------------------*/ /* Include CPU-related configuration */ #include "cc13xx-cc26xx-conf.h" /*---------------------------------------------------------------------------*/ +/* Must be included after cc13xx-cc26xx-conf.h */ +#include +/*---------------------------------------------------------------------------*/ #endif /* CONTIKI_CONF_H_ */ -/** @} */ +/*---------------------------------------------------------------------------*/ +/** + * @} + */ diff --git a/arch/platform/simplelink/cc13xx-cc26xx/launchpad/board-conf.h b/arch/platform/simplelink/cc13xx-cc26xx/launchpad/board-conf.h index 9a123bcf1..f700baa08 100644 --- a/arch/platform/simplelink/cc13xx-cc26xx/launchpad/board-conf.h +++ b/arch/platform/simplelink/cc13xx-cc26xx/launchpad/board-conf.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, Texas Instruments Incorporated - http://www.ti.com/ + * Copyright (c) 2018, Texas Instruments Incorporated - http://www.ti.com/ * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -27,27 +27,31 @@ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. */ -/*---------------------------------------------------------------------------*/ -/** \addtogroup cc26xx-srf-tag +/** + * \addtogroup cc13xx-cc26xx-platform * @{ * * \defgroup launchpad-peripherals LaunchPad peripherals * - * Defines related to LaunchPad peripherals. + * Defines related to configuring LaunchPad peripherals. All LaunchPads + * are identical to a very large extent. Everything documented within this + * group applies to both sensortags * * @{ * * \file - * Header file with definitions related to LaunchPad peripherals - * - * \note Do not include this file directly. + * Header file with definitions related to LaunchPad boards. + * \author + * Edvard Pettersen + * \note + * This file should not be included directly */ /*---------------------------------------------------------------------------*/ #ifndef BOARD_CONF_H_ #define BOARD_CONF_H_ /*---------------------------------------------------------------------------*/ /** - * \name LED configurations + * \name LED configurations for the dev/leds.h API. * * Those values are not meant to be modified by the user * @{ @@ -58,9 +62,26 @@ #define LEDS_CONF_GREEN 1 #define LEDS_CONF_ALL ((1 << LEDS_CONF_COUNT) - 1) +/** @} */ /*---------------------------------------------------------------------------*/ +/** + * \name Button configurations for the dev/button-hal.h API. + * + * Those values are not meant to be modified by the user + * @{ + */ #define BUTTON_HAL_ID_KEY_LEFT 0 #define BUTTON_HAL_ID_KEY_RIGHT 1 +/** @} */ +/*---------------------------------------------------------------------------*/ +/** + * \name LaunchPad does not have any sensors. + * + * Those values are not meant to be modified by the user + * @{ + */ +#define BOARD_CONF_HAS_SENSORS 0 +/** @} */ /*---------------------------------------------------------------------------*/ #endif /* BOARD_CONF_H_ */ /*---------------------------------------------------------------------------*/ diff --git a/arch/platform/simplelink/cc13xx-cc26xx/launchpad/board-peripherals.h b/arch/platform/simplelink/cc13xx-cc26xx/launchpad/board-peripherals.h index 9b45e3bc7..528ddb26f 100644 --- a/arch/platform/simplelink/cc13xx-cc26xx/launchpad/board-peripherals.h +++ b/arch/platform/simplelink/cc13xx-cc26xx/launchpad/board-peripherals.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, Texas Instruments Incorporated - http://www.ti.com/ + * Copyright (c) 2018, Texas Instruments Incorporated - http://www.ti.com/ * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -27,20 +27,22 @@ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. */ -/*---------------------------------------------------------------------------*/ -/** \addtogroup cc26xx-srf-tag +/** + * \addtogroup cc13xx-cc26xx-platform * @{ * * \defgroup launchpad-peripherals LaunchPad peripherals * - * Defines related to LaunchPad peripherals. + * Defines related to configuring LaunchPad peripherals. All + * LaunchPads are identical to a very large extent. Everything + * documented within this group applies to all LaunchPads. * * @{ * * \file - * Header file with definitions related to LaunchPad peripherals - * - * \note Do not include this file directly. + * Header file with definitions related to LaunchPad boards. + * \author + * Edvard Pettersen */ /*---------------------------------------------------------------------------*/ #ifndef BOARD_PERIPHERALS_H_ @@ -48,8 +50,6 @@ /*---------------------------------------------------------------------------*/ #include "board-conf.h" /*---------------------------------------------------------------------------*/ -#define BOARD_CONF_HAS_SENSORS 0 -/*---------------------------------------------------------------------------*/ #endif /* BOARD_PERIPHERALS_H_ */ /*---------------------------------------------------------------------------*/ /** diff --git a/arch/platform/simplelink/cc13xx-cc26xx/launchpad/button-sensor-arch.c b/arch/platform/simplelink/cc13xx-cc26xx/launchpad/button-sensor-arch.c index 073c620e6..239869616 100644 --- a/arch/platform/simplelink/cc13xx-cc26xx/launchpad/button-sensor-arch.c +++ b/arch/platform/simplelink/cc13xx-cc26xx/launchpad/button-sensor-arch.c @@ -27,37 +27,41 @@ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. */ -/*---------------------------------------------------------------------------*/ /** - * \addtogroup launchpad-button-sensor + * \addtogroup launchpad-peripherals * @{ * * \file - * Driver for LaunchPad buttons + * Button HAL definitions for the LaunchPad buttons. Common across + * all CC13xx/CC26xx LaunchPad boards. + * \author + * Edvard Pettersen */ /*---------------------------------------------------------------------------*/ #include "contiki.h" #include "dev/button-hal.h" - +/*---------------------------------------------------------------------------*/ #include /*---------------------------------------------------------------------------*/ -/* Key left button, AKA BTN-1 */ -BUTTON_HAL_BUTTON(key_left, /**< Name */ - "Key Left", /**< Description */ - Board_PIN_BTN1, /**< PIN */ - GPIO_HAL_PIN_CFG_INPUT_PULLUP | - GPIO_HAL_PIN_CFG_INPUT_HYSTERESIS, /**< Pull configuration */ - BUTTON_HAL_ID_KEY_LEFT, /**< Unique ID */ - true); /**< Negative logic */ +/* Key left button, AKA BTN-1. */ +BUTTON_HAL_BUTTON( + key_left, /**< Name */ + "Key Left", /**< Description */ + Board_PIN_BTN1, /**< Board PIN */ + GPIO_HAL_PIN_CFG_INPUT_PULLUP | + GPIO_HAL_PIN_CFG_INPUT_HYSTERESIS, /**< Pull configuration */ + BUTTON_HAL_ID_KEY_LEFT, /**< Unique ID */ + true); /**< Negative logic */ -/* Key right button, AKA BTN-2 */ -BUTTON_HAL_BUTTON(key_right, /**< Name */ - "Key Right", /**< Description */ - Board_PIN_BTN2, /**< PIN */ - GPIO_HAL_PIN_CFG_INPUT_PULLUP | - GPIO_HAL_PIN_CFG_INPUT_HYSTERESIS, /**< Pull configuration */ - BUTTON_HAL_ID_KEY_RIGHT, /**< Unique ID */ - true); /**< Negative logic */ +/* Key right button, AKA BTN-2. */ +BUTTON_HAL_BUTTON( + key_right, /**< Name */ + "Key Right", /**< Description */ + Board_PIN_BTN2, /**< Board PIN */ + GPIO_HAL_PIN_CFG_INPUT_PULLUP | + GPIO_HAL_PIN_CFG_INPUT_HYSTERESIS, /**< Pull configuration */ + BUTTON_HAL_ID_KEY_RIGHT, /**< Unique ID */ + true); /**< Negative logic */ /*---------------------------------------------------------------------------*/ BUTTON_HAL_BUTTONS(&key_left, &key_right); /*---------------------------------------------------------------------------*/ diff --git a/arch/platform/simplelink/cc13xx-cc26xx/launchpad/cc1310/CC1310_LAUNCHXL.c b/arch/platform/simplelink/cc13xx-cc26xx/launchpad/cc1310/CC1310_LAUNCHXL.c index d2601e3f2..df5454f5d 100644 --- a/arch/platform/simplelink/cc13xx-cc26xx/launchpad/cc1310/CC1310_LAUNCHXL.c +++ b/arch/platform/simplelink/cc13xx-cc26xx/launchpad/cc1310/CC1310_LAUNCHXL.c @@ -253,19 +253,21 @@ const CryptoCC26XX_Config CryptoCC26XX_config[CC1310_LAUNCHXL_CRYPTOCOUNT] = { #include #include +#if TI_DISPLAY_CONF_ENABLE + +#if TI_DISPLAY_CONF_UART_ENABLE + +#if !(TI_UART_CONF_UART0_ENABLE) +#error "Display UART driver requires UART0" +#endif + #ifndef BOARD_DISPLAY_UART_STRBUF_SIZE #define BOARD_DISPLAY_UART_STRBUF_SIZE 128 #endif -#ifndef BOARD_DISPLAY_SHARP_SIZE -#define BOARD_DISPLAY_SHARP_SIZE 96 -#endif +static char uartStringBuf[BOARD_DISPLAY_UART_STRBUF_SIZE]; DisplayUart_Object displayUartObject; -DisplaySharp_Object displaySharpObject; - -static char uartStringBuf[BOARD_DISPLAY_UART_STRBUF_SIZE]; -static uint_least8_t sharpDisplayBuf[BOARD_DISPLAY_SHARP_SIZE * BOARD_DISPLAY_SHARP_SIZE / 8]; const DisplayUart_HWAttrs displayUartHWAttrs = { .uartIdx = CC1310_LAUNCHXL_UART0, @@ -275,6 +277,22 @@ const DisplayUart_HWAttrs displayUartHWAttrs = { .strBufLen = BOARD_DISPLAY_UART_STRBUF_SIZE, }; +#endif /* TI_DISPLAY_CONF_UART_ENABLE */ + +#if TI_DISPLAY_CONF_LCD_ENABLE + +#if !(TI_SPI_CONF_SPI0_ENABLE) +#error "Display LCD driver requires SPI0" +#endif + +#ifndef BOARD_DISPLAY_SHARP_SIZE +#define BOARD_DISPLAY_SHARP_SIZE 96 +#endif + +static uint_least8_t sharpDisplayBuf[BOARD_DISPLAY_SHARP_SIZE * BOARD_DISPLAY_SHARP_SIZE / 8]; + +DisplaySharp_Object displaySharpObject; + const DisplaySharp_HWAttrsV1 displaySharpHWattrs = { .spiIndex = CC1310_LAUNCHXL_SPI0, .csPin = CC1310_LAUNCHXL_GPIO_LCD_CS, @@ -285,27 +303,18 @@ const DisplaySharp_HWAttrsV1 displaySharpHWattrs = { .displayBuf = sharpDisplayBuf, }; -#ifndef BOARD_DISPLAY_USE_UART -#define BOARD_DISPLAY_USE_UART 1 -#endif -#ifndef BOARD_DISPLAY_USE_UART_ANSI -#define BOARD_DISPLAY_USE_UART_ANSI 0 -#endif -#ifndef BOARD_DISPLAY_USE_LCD -#define BOARD_DISPLAY_USE_LCD 0 -#endif +#endif /* TI_DISPLAY_CONF_LCD_ENABLE */ /* * This #if/#else is needed to workaround a problem with the * IAR compiler. The IAR compiler doesn't like the empty array * initialization. (IAR Error[Pe1345]) */ -#if (BOARD_DISPLAY_USE_UART || BOARD_DISPLAY_USE_LCD) const Display_Config Display_config[] = { -#if (BOARD_DISPLAY_USE_UART) +#if TI_DISPLAY_CONF_UART_ENABLE { -# if (BOARD_DISPLAY_USE_UART_ANSI) +# if TI_DISPLAY_CONF_USE_UART_ANSI .fxnTablePtr = &DisplayUartAnsi_fxnTable, # else /* Default to minimal UART with no cursor placement */ .fxnTablePtr = &DisplayUartMin_fxnTable, @@ -314,7 +323,7 @@ const Display_Config Display_config[] = { .hwAttrs = &displayUartHWAttrs, }, #endif -#if (BOARD_DISPLAY_USE_LCD) +#if TI_DISPLAY_CONF_LCD_ENABLE { .fxnTablePtr = &DisplaySharp_fxnTable, .object = &displaySharpObject, @@ -330,7 +339,7 @@ const uint_least8_t Display_count = sizeof(Display_config) / sizeof(Display_Conf const Display_Config *Display_config = NULL; const uint_least8_t Display_count = 0; -#endif /* (BOARD_DISPLAY_USE_UART || BOARD_DISPLAY_USE_LCD) */ +#endif /* TI_DISPLAY_CONF_ENABLE */ /* * =============================== GPIO =============================== @@ -429,9 +438,12 @@ const GPTimerCC26XX_Config GPTimerCC26XX_config[CC1310_LAUNCHXL_GPTIMERPARTSCOUN #include #include +#if TI_I2C_CONF_ENABLE + I2CCC26XX_Object i2cCC26xxObjects[CC1310_LAUNCHXL_I2CCOUNT]; const I2CCC26XX_HWAttrsV1 i2cCC26xxHWAttrs[CC1310_LAUNCHXL_I2CCOUNT] = { +#if TI_I2C_CONF_I2C0_ENABLE { .baseAddr = I2C0_BASE, .powerMngrId = PowerCC26XX_PERIPH_I2C0, @@ -440,19 +452,24 @@ const I2CCC26XX_HWAttrsV1 i2cCC26xxHWAttrs[CC1310_LAUNCHXL_I2CCOUNT] = { .swiPriority = 0, .sdaPin = CC1310_LAUNCHXL_I2C0_SDA0, .sclPin = CC1310_LAUNCHXL_I2C0_SCL0, - } + }, +#endif }; const I2C_Config I2C_config[CC1310_LAUNCHXL_I2CCOUNT] = { +#if TI_I2C_CONF_I2C0_ENABLE { .fxnTablePtr = &I2CCC26XX_fxnTable, .object = &i2cCC26xxObjects[CC1310_LAUNCHXL_I2C0], .hwAttrs = &i2cCC26xxHWAttrs[CC1310_LAUNCHXL_I2C0] - } + }, +#endif }; const uint_least8_t I2C_count = CC1310_LAUNCHXL_I2CCOUNT; +#endif /* TI_I2C_CONF_ENABLE */ + /* * =============================== NVS =============================== */ @@ -464,7 +481,9 @@ const uint_least8_t I2C_count = CC1310_LAUNCHXL_I2CCOUNT; #define SECTORSIZE 0x1000 #define REGIONSIZE (SECTORSIZE * 4) -#ifndef Board_EXCLUDE_NVS_INTERNAL_FLASH +#if TI_NVS_CONF_ENABLE + +#if TI_NVS_CONF_NVS_INTERNAL_ENABLE /* * Reserve flash sectors for NVS driver use by placing an uninitialized byte @@ -514,9 +533,9 @@ const NVSCC26XX_HWAttrs nvsCC26xxHWAttrs[1] = { }, }; -#endif /* Board_EXCLUDE_NVS_INTERNAL_FLASH */ +#endif /* TI_NVS_CONF_NVS_INTERNAL_ENABLE */ -#ifndef Board_EXCLUDE_NVS_EXTERNAL_FLASH +#if TI_NVS_CONF_NVS_EXTERNAL_ENABLE #define SPISECTORSIZE 0x1000 #define SPIREGIONSIZE (SPISECTORSIZE * 32) @@ -542,18 +561,18 @@ const NVSSPI25X_HWAttrs nvsSPI25XHWAttrs[1] = { }, }; -#endif /* Board_EXCLUDE_NVS_EXTERNAL_FLASH */ +#endif /* TI_NVS_CONF_NVS_EXTERNAL_ENABLE */ /* NVS Region index 0 and 1 refer to NVS and NVS SPI respectively */ const NVS_Config NVS_config[CC1310_LAUNCHXL_NVSCOUNT] = { -#ifndef Board_EXCLUDE_NVS_INTERNAL_FLASH +#if TI_NVS_CONF_NVS_INTERNAL_ENABLE { .fxnTablePtr = &NVSCC26XX_fxnTable, .object = &nvsCC26xxObjects[0], .hwAttrs = &nvsCC26xxHWAttrs[0], }, #endif -#ifndef Board_EXCLUDE_NVS_EXTERNAL_FLASH +#if TI_NVS_CONF_NVS_EXTERNAL_ENABLE { .fxnTablePtr = &NVSSPI25X_fxnTable, .object = &nvsSPI25XObjects[0], @@ -564,6 +583,8 @@ const NVS_Config NVS_config[CC1310_LAUNCHXL_NVSCOUNT] = { const uint_least8_t NVS_count = CC1310_LAUNCHXL_NVSCOUNT; +#endif /* TI_NVS_CONF_ENABLE */ + /* * =============================== PIN =============================== */ @@ -658,6 +679,12 @@ const RFCC26XX_HWAttrsV2 RFCC26XX_hwAttrs = { #include #include +#if TI_SD_CONF_ENABLE + +#if !(TI_SPI_CONF_SPI0_ENABLE) +#error "SD driver requires SPI0 enabled" +#endif + SDSPI_Object sdspiObjects[CC1310_LAUNCHXL_SDCOUNT]; const SDSPI_HWAttrs sdspiHWAttrs[CC1310_LAUNCHXL_SDCOUNT] = { @@ -677,12 +704,16 @@ const SD_Config SD_config[CC1310_LAUNCHXL_SDCOUNT] = { const uint_least8_t SD_count = CC1310_LAUNCHXL_SDCOUNT; +#endif /* TI_SD_CONF_ENABLE */ + /* * =============================== SPI DMA =============================== */ #include #include +#if TI_SPI_CONF_ENABLE + SPICC26XXDMA_Object spiCC26XXDMAObjects[CC1310_LAUNCHXL_SPICOUNT]; /* @@ -691,6 +722,7 @@ SPICC26XXDMA_Object spiCC26XXDMAObjects[CC1310_LAUNCHXL_SPICOUNT]; * to satisfy the SDSPI driver requirement. */ const SPICC26XXDMA_HWAttrsV1 spiCC26XXDMAHWAttrs[CC1310_LAUNCHXL_SPICOUNT] = { +#if TI_SPI_CONF_SPI0_ENABLE { .baseAddr = SSI0_BASE, .intNum = INT_SSI0_COMB, @@ -706,6 +738,8 @@ const SPICC26XXDMA_HWAttrsV1 spiCC26XXDMAHWAttrs[CC1310_LAUNCHXL_SPICOUNT] = { .csnPin = CC1310_LAUNCHXL_SPI0_CSN, .minDmaTransferSize = 10 }, +#endif +#if TI_SPI_CONF_SPI1_ENABLE { .baseAddr = SSI1_BASE, .intNum = INT_SSI1_COMB, @@ -720,35 +754,45 @@ const SPICC26XXDMA_HWAttrsV1 spiCC26XXDMAHWAttrs[CC1310_LAUNCHXL_SPICOUNT] = { .clkPin = CC1310_LAUNCHXL_SPI1_CLK, .csnPin = CC1310_LAUNCHXL_SPI1_CSN, .minDmaTransferSize = 10 - } + }, +#endif }; const SPI_Config SPI_config[CC1310_LAUNCHXL_SPICOUNT] = { +#if TI_SPI_CONF_SPI0_ENABLE { .fxnTablePtr = &SPICC26XXDMA_fxnTable, .object = &spiCC26XXDMAObjects[CC1310_LAUNCHXL_SPI0], .hwAttrs = &spiCC26XXDMAHWAttrs[CC1310_LAUNCHXL_SPI0] }, +#endif +#if TI_SPI_CONF_SPI1_ENABLE { .fxnTablePtr = &SPICC26XXDMA_fxnTable, .object = &spiCC26XXDMAObjects[CC1310_LAUNCHXL_SPI1], .hwAttrs = &spiCC26XXDMAHWAttrs[CC1310_LAUNCHXL_SPI1] }, +#endif }; const uint_least8_t SPI_count = CC1310_LAUNCHXL_SPICOUNT; +#endif /* TI_SPI_CONF_ENABLE */ + /* * =============================== UART =============================== */ #include #include +#if TI_UART_CONF_ENABLE + UARTCC26XX_Object uartCC26XXObjects[CC1310_LAUNCHXL_UARTCOUNT]; uint8_t uartCC26XXRingBuffer[CC1310_LAUNCHXL_UARTCOUNT][32]; const UARTCC26XX_HWAttrsV2 uartCC26XXHWAttrs[CC1310_LAUNCHXL_UARTCOUNT] = { +#if TI_UART_CONF_UART0_ENABLE { .baseAddr = UART0_BASE, .powerMngrId = PowerCC26XX_PERIPH_UART0, @@ -764,19 +808,24 @@ const UARTCC26XX_HWAttrsV2 uartCC26XXHWAttrs[CC1310_LAUNCHXL_UARTCOUNT] = { .txIntFifoThr = UARTCC26XX_FIFO_THRESHOLD_1_8, .rxIntFifoThr = UARTCC26XX_FIFO_THRESHOLD_4_8, .errorFxn = NULL - } + }, +#endif }; const UART_Config UART_config[CC1310_LAUNCHXL_UARTCOUNT] = { +#if TI_UART_CONF_UART0_ENABLE { .fxnTablePtr = &UARTCC26XX_fxnTable, .object = &uartCC26XXObjects[CC1310_LAUNCHXL_UART0], .hwAttrs = &uartCC26XXHWAttrs[CC1310_LAUNCHXL_UART0] }, +#endif }; const uint_least8_t UART_count = CC1310_LAUNCHXL_UARTCOUNT; +#endif /* TI_UART_CONF_ENABLE */ + /* * =============================== UDMA =============================== */ diff --git a/arch/platform/simplelink/cc13xx-cc26xx/launchpad/cc1310/CC1310_LAUNCHXL.h b/arch/platform/simplelink/cc13xx-cc26xx/launchpad/cc1310/CC1310_LAUNCHXL.h index 6eb2364ee..51ff78942 100644 --- a/arch/platform/simplelink/cc13xx-cc26xx/launchpad/cc1310/CC1310_LAUNCHXL.h +++ b/arch/platform/simplelink/cc13xx-cc26xx/launchpad/cc1310/CC1310_LAUNCHXL.h @@ -49,6 +49,8 @@ extern "C" { #endif +#include "contiki-conf.h" + /* Includes */ #include #include @@ -267,7 +269,9 @@ typedef enum CC1310_LAUNCHXL_GPTimers { * @brief Enum of I2C names */ typedef enum CC1310_LAUNCHXL_I2CName { +#if TI_I2C_CONF_I2C0_ENABLE CC1310_LAUNCHXL_I2C0 = 0, +#endif CC1310_LAUNCHXL_I2CCOUNT } CC1310_LAUNCHXL_I2CName; @@ -277,10 +281,10 @@ typedef enum CC1310_LAUNCHXL_I2CName { * @brief Enum of NVS names */ typedef enum CC1310_LAUNCHXL_NVSName { -#ifndef Board_EXCLUDE_NVS_INTERNAL_FLASH +#if TI_NVS_CONF_NVS_INTERNAL_ENABLE CC1310_LAUNCHXL_NVSCC26XX0 = 0, #endif -#ifndef Board_EXCLUDE_NVS_EXTERNAL_FLASH +#if TI_NVS_CONF_NVS_EXTERNAL_ENABLE CC1310_LAUNCHXL_NVSSPI25X0, #endif @@ -319,8 +323,12 @@ typedef enum CC1310_LAUNCHXL_SDName { * @brief Enum of SPI names */ typedef enum CC1310_LAUNCHXL_SPIName { +#if TI_SPI_CONF_SPI0_ENABLE CC1310_LAUNCHXL_SPI0 = 0, +#endif +#if TI_SPI_CONF_SPI1_ENABLE CC1310_LAUNCHXL_SPI1, +#endif CC1310_LAUNCHXL_SPICOUNT } CC1310_LAUNCHXL_SPIName; @@ -330,7 +338,9 @@ typedef enum CC1310_LAUNCHXL_SPIName { * @brief Enum of UARTs */ typedef enum CC1310_LAUNCHXL_UARTName { +#if TI_UART_CONF_UART0_ENABLE CC1310_LAUNCHXL_UART0 = 0, +#endif CC1310_LAUNCHXL_UARTCOUNT } CC1310_LAUNCHXL_UARTName; diff --git a/arch/platform/simplelink/cc13xx-cc26xx/launchpad/cc1312r1/CC1312R1_LAUNCHXL.c b/arch/platform/simplelink/cc13xx-cc26xx/launchpad/cc1312r1/CC1312R1_LAUNCHXL.c index 9b0be9686..20372347e 100644 --- a/arch/platform/simplelink/cc13xx-cc26xx/launchpad/cc1312r1/CC1312R1_LAUNCHXL.c +++ b/arch/platform/simplelink/cc13xx-cc26xx/launchpad/cc1312r1/CC1312R1_LAUNCHXL.c @@ -374,19 +374,21 @@ const uint_least8_t AESECB_count = CC1312R1_LAUNCHXL_AESECBCOUNT; #include #include +#if TI_DISPLAY_CONF_ENABLE + +#if TI_DISPLAY_CONF_UART_ENABLE + +#if !(TI_UART_CONF_UART0_ENABLE) +#error "Display UART driver requires UART0" +#endif + #ifndef BOARD_DISPLAY_UART_STRBUF_SIZE #define BOARD_DISPLAY_UART_STRBUF_SIZE 128 #endif -#ifndef BOARD_DISPLAY_SHARP_SIZE -#define BOARD_DISPLAY_SHARP_SIZE 96 -#endif +static char uartStringBuf[BOARD_DISPLAY_UART_STRBUF_SIZE]; DisplayUart_Object displayUartObject; -DisplaySharp_Object displaySharpObject; - -static char uartStringBuf[BOARD_DISPLAY_UART_STRBUF_SIZE]; -static uint_least8_t sharpDisplayBuf[BOARD_DISPLAY_SHARP_SIZE * BOARD_DISPLAY_SHARP_SIZE / 8]; const DisplayUart_HWAttrs displayUartHWAttrs = { .uartIdx = CC1312R1_LAUNCHXL_UART0, @@ -396,6 +398,22 @@ const DisplayUart_HWAttrs displayUartHWAttrs = { .strBufLen = BOARD_DISPLAY_UART_STRBUF_SIZE, }; +#endif /* TI_DISPLAY_CONF_UART_ENABLE */ + +#if TI_DISPLAY_CONF_LCD_ENABLE + +#if !(TI_SPI_CONF_SPI0_ENABLE) +#error "Display LCD driver requires SPI0" +#endif + +#ifndef BOARD_DISPLAY_SHARP_SIZE +#define BOARD_DISPLAY_SHARP_SIZE 96 +#endif + +DisplaySharp_Object displaySharpObject; + +static uint_least8_t sharpDisplayBuf[BOARD_DISPLAY_SHARP_SIZE * BOARD_DISPLAY_SHARP_SIZE / 8]; + const DisplaySharp_HWAttrsV1 displaySharpHWattrs = { .spiIndex = CC1312R1_LAUNCHXL_SPI0, .csPin = CC1312R1_LAUNCHXL_GPIO_LCD_CS, @@ -406,27 +424,18 @@ const DisplaySharp_HWAttrsV1 displaySharpHWattrs = { .displayBuf = sharpDisplayBuf, }; -#ifndef BOARD_DISPLAY_USE_UART -#define BOARD_DISPLAY_USE_UART 1 -#endif -#ifndef BOARD_DISPLAY_USE_UART_ANSI -#define BOARD_DISPLAY_USE_UART_ANSI 0 -#endif -#ifndef BOARD_DISPLAY_USE_LCD -#define BOARD_DISPLAY_USE_LCD 0 -#endif +#endif /* TI_DISPLAY_CONF_LCD_ENABLE */ /* * This #if/#else is needed to workaround a problem with the * IAR compiler. The IAR compiler doesn't like the empty array * initialization. (IAR Error[Pe1345]) */ -#if (BOARD_DISPLAY_USE_UART || BOARD_DISPLAY_USE_LCD) const Display_Config Display_config[] = { -#if (BOARD_DISPLAY_USE_UART) +#if TI_DISPLAY_CONF_UART_ENABLE { -# if (BOARD_DISPLAY_USE_UART_ANSI) +# if TI_DISPLAY_CONF_USE_UART_ANSI .fxnTablePtr = &DisplayUartAnsi_fxnTable, # else /* Default to minimal UART with no cursor placement */ .fxnTablePtr = &DisplayUartMin_fxnTable, @@ -435,7 +444,7 @@ const Display_Config Display_config[] = { .hwAttrs = &displayUartHWAttrs, }, #endif -#if (BOARD_DISPLAY_USE_LCD) +#if TI_DISPLAY_CONF_LCD_ENABLE { .fxnTablePtr = &DisplaySharp_fxnTable, .object = &displaySharpObject, @@ -451,7 +460,7 @@ const uint_least8_t Display_count = sizeof(Display_config) / sizeof(Display_Conf const Display_Config *Display_config = NULL; const uint_least8_t Display_count = 0; -#endif /* (BOARD_DISPLAY_USE_UART || BOARD_DISPLAY_USE_LCD) */ +#endif /* TI_DISPLAY_CONF_ENABLE */ /* * =============================== GPIO =============================== @@ -550,9 +559,12 @@ const GPTimerCC26XX_Config GPTimerCC26XX_config[CC1312R1_LAUNCHXL_GPTIMERPARTSCO #include #include +#if TI_I2C_CONF_ENABLE + I2CCC26XX_Object i2cCC26xxObjects[CC1312R1_LAUNCHXL_I2CCOUNT]; const I2CCC26XX_HWAttrsV1 i2cCC26xxHWAttrs[CC1312R1_LAUNCHXL_I2CCOUNT] = { +#if TI_I2C_CONF_I2C0_ENABLE { .baseAddr = I2C0_BASE, .powerMngrId = PowerCC26XX_PERIPH_I2C0, @@ -561,19 +573,24 @@ const I2CCC26XX_HWAttrsV1 i2cCC26xxHWAttrs[CC1312R1_LAUNCHXL_I2CCOUNT] = { .swiPriority = 0, .sdaPin = CC1312R1_LAUNCHXL_I2C0_SDA0, .sclPin = CC1312R1_LAUNCHXL_I2C0_SCL0, - } + }, +#endif }; const I2C_Config I2C_config[CC1312R1_LAUNCHXL_I2CCOUNT] = { +#if TI_I2C_CONF_I2C0_ENABLE { .fxnTablePtr = &I2CCC26XX_fxnTable, .object = &i2cCC26xxObjects[CC1312R1_LAUNCHXL_I2C0], .hwAttrs = &i2cCC26xxHWAttrs[CC1312R1_LAUNCHXL_I2C0] - } + }, +#endif }; const uint_least8_t I2C_count = CC1312R1_LAUNCHXL_I2CCOUNT; +#endif /* TI_I2C_CONF_ENABLE */ + /* * =============================== NVS =============================== */ @@ -585,7 +602,9 @@ const uint_least8_t I2C_count = CC1312R1_LAUNCHXL_I2CCOUNT; #define SECTORSIZE 0x2000 #define REGIONSIZE (SECTORSIZE * 4) -#ifndef Board_EXCLUDE_NVS_INTERNAL_FLASH +#if TI_NVS_CONF_ENABLE + +#if TI_NVS_CONF_NVS_INTERNAL_ENABLE /* * Reserve flash sectors for NVS driver use by placing an uninitialized byte @@ -635,9 +654,9 @@ const NVSCC26XX_HWAttrs nvsCC26xxHWAttrs[1] = { }, }; -#endif /* Board_EXCLUDE_NVS_INTERNAL_FLASH */ +#endif /* TI_NVS_CONF_NVS_INTERNAL_ENABLE */ -#ifndef Board_EXCLUDE_NVS_EXTERNAL_FLASH +#if TI_NVS_CONF_NVS_EXTERNAL_ENABLE #define SPISECTORSIZE 0x1000 #define SPIREGIONSIZE (SPISECTORSIZE * 32) @@ -663,18 +682,18 @@ const NVSSPI25X_HWAttrs nvsSPI25XHWAttrs[1] = { }, }; -#endif /* Board_EXCLUDE_NVS_EXTERNAL_FLASH */ +#endif /* TI_NVS_CONF_NVS_EXTERNAL_ENABLE */ /* NVS Region index 0 and 1 refer to NVS and NVS SPI respectively */ const NVS_Config NVS_config[CC1312R1_LAUNCHXL_NVSCOUNT] = { -#ifndef Board_EXCLUDE_NVS_INTERNAL_FLASH +#if TI_NVS_CONF_NVS_INTERNAL_ENABLE { .fxnTablePtr = &NVSCC26XX_fxnTable, .object = &nvsCC26xxObjects[0], .hwAttrs = &nvsCC26xxHWAttrs[0], }, #endif -#ifndef Board_EXCLUDE_NVS_EXTERNAL_FLASH +#if TI_NVS_CONF_NVS_EXTERNAL_ENABLE { .fxnTablePtr = &NVSSPI25X_fxnTable, .object = &nvsSPI25XObjects[0], @@ -685,6 +704,8 @@ const NVS_Config NVS_config[CC1312R1_LAUNCHXL_NVSCOUNT] = { const uint_least8_t NVS_count = CC1312R1_LAUNCHXL_NVSCOUNT; +#endif /* TI_NVS_CONF_ENABLE */ + /* * =============================== PIN =============================== */ @@ -779,6 +800,12 @@ const RFCC26XX_HWAttrsV2 RFCC26XX_hwAttrs = { #include #include +#if TI_SD_CONF_ENABLE + +#if !(TI_SPI_CONF_SPI0_ENABLE) +#error "SD driver requires SPI0 enabled" +#endif + SDSPI_Object sdspiObjects[CC1312R1_LAUNCHXL_SDCOUNT]; const SDSPI_HWAttrs sdspiHWAttrs[CC1312R1_LAUNCHXL_SDCOUNT] = { @@ -798,12 +825,16 @@ const SD_Config SD_config[CC1312R1_LAUNCHXL_SDCOUNT] = { const uint_least8_t SD_count = CC1312R1_LAUNCHXL_SDCOUNT; +#endif /* TI_SD_CONF_ENABLE */ + /* * =============================== SPI DMA =============================== */ #include #include +#if TI_SPI_CONF_ENABLE + SPICC26XXDMA_Object spiCC26XXDMAObjects[CC1312R1_LAUNCHXL_SPICOUNT]; /* @@ -812,6 +843,7 @@ SPICC26XXDMA_Object spiCC26XXDMAObjects[CC1312R1_LAUNCHXL_SPICOUNT]; * to satisfy the SDSPI driver requirement. */ const SPICC26XXDMA_HWAttrsV1 spiCC26XXDMAHWAttrs[CC1312R1_LAUNCHXL_SPICOUNT] = { +#if TI_SPI_CONF_SPI0_ENABLE { .baseAddr = SSI0_BASE, .intNum = INT_SSI0_COMB, @@ -827,6 +859,8 @@ const SPICC26XXDMA_HWAttrsV1 spiCC26XXDMAHWAttrs[CC1312R1_LAUNCHXL_SPICOUNT] = { .csnPin = CC1312R1_LAUNCHXL_SPI0_CSN, .minDmaTransferSize = 10 }, +#endif +#if TI_SPI_CONF_SPI1_ENABLE { .baseAddr = SSI1_BASE, .intNum = INT_SSI1_COMB, @@ -841,35 +875,45 @@ const SPICC26XXDMA_HWAttrsV1 spiCC26XXDMAHWAttrs[CC1312R1_LAUNCHXL_SPICOUNT] = { .clkPin = CC1312R1_LAUNCHXL_SPI1_CLK, .csnPin = CC1312R1_LAUNCHXL_SPI1_CSN, .minDmaTransferSize = 10 - } + }, +#endif }; const SPI_Config SPI_config[CC1312R1_LAUNCHXL_SPICOUNT] = { +#if TI_SPI_CONF_SPI0_ENABLE { .fxnTablePtr = &SPICC26XXDMA_fxnTable, .object = &spiCC26XXDMAObjects[CC1312R1_LAUNCHXL_SPI0], .hwAttrs = &spiCC26XXDMAHWAttrs[CC1312R1_LAUNCHXL_SPI0] }, +#endif +#if TI_SPI_CONF_SPI1_ENABLE { .fxnTablePtr = &SPICC26XXDMA_fxnTable, .object = &spiCC26XXDMAObjects[CC1312R1_LAUNCHXL_SPI1], .hwAttrs = &spiCC26XXDMAHWAttrs[CC1312R1_LAUNCHXL_SPI1] }, +#endif }; const uint_least8_t SPI_count = CC1312R1_LAUNCHXL_SPICOUNT; +#endif /* TI_SPI_CONF_ENABLE */ + /* * =============================== UART =============================== */ #include #include +#if TI_UART_CONF_ENABLE + UARTCC26XX_Object uartCC26XXObjects[CC1312R1_LAUNCHXL_UARTCOUNT]; uint8_t uartCC26XXRingBuffer[CC1312R1_LAUNCHXL_UARTCOUNT][32]; const UARTCC26XX_HWAttrsV2 uartCC26XXHWAttrs[CC1312R1_LAUNCHXL_UARTCOUNT] = { +#if TI_UART_CONF_UART0_ENABLE { .baseAddr = UART0_BASE, .powerMngrId = PowerCC26XX_PERIPH_UART0, @@ -885,19 +929,24 @@ const UARTCC26XX_HWAttrsV2 uartCC26XXHWAttrs[CC1312R1_LAUNCHXL_UARTCOUNT] = { .txIntFifoThr = UARTCC26XX_FIFO_THRESHOLD_1_8, .rxIntFifoThr = UARTCC26XX_FIFO_THRESHOLD_4_8, .errorFxn = NULL - } + }, +#endif }; const UART_Config UART_config[CC1312R1_LAUNCHXL_UARTCOUNT] = { +#if TI_UART_CONF_UART0_ENABLE { .fxnTablePtr = &UARTCC26XX_fxnTable, .object = &uartCC26XXObjects[CC1312R1_LAUNCHXL_UART0], .hwAttrs = &uartCC26XXHWAttrs[CC1312R1_LAUNCHXL_UART0] }, +#endif }; const uint_least8_t UART_count = CC1312R1_LAUNCHXL_UARTCOUNT; +#endif /* TI_UART_CONF_ENABLE */ + /* * =============================== UDMA =============================== */ diff --git a/arch/platform/simplelink/cc13xx-cc26xx/launchpad/cc1312r1/CC1312R1_LAUNCHXL.h b/arch/platform/simplelink/cc13xx-cc26xx/launchpad/cc1312r1/CC1312R1_LAUNCHXL.h index fd2043ce7..c70e28755 100644 --- a/arch/platform/simplelink/cc13xx-cc26xx/launchpad/cc1312r1/CC1312R1_LAUNCHXL.h +++ b/arch/platform/simplelink/cc13xx-cc26xx/launchpad/cc1312r1/CC1312R1_LAUNCHXL.h @@ -49,6 +49,8 @@ extern "C" { #endif +#include "contiki-conf.h" + /* Includes */ #include #include @@ -326,7 +328,9 @@ typedef enum CC1312R1_LAUNCHXL_GPTimers { * @brief Enum of I2C names */ typedef enum CC1312R1_LAUNCHXL_I2CName { +#if TI_I2C_CONF_I2C0_ENABLE CC1312R1_LAUNCHXL_I2C0 = 0, +#endif CC1312R1_LAUNCHXL_I2CCOUNT } CC1312R1_LAUNCHXL_I2CName; @@ -336,10 +340,10 @@ typedef enum CC1312R1_LAUNCHXL_I2CName { * @brief Enum of NVS names */ typedef enum CC1312R1_LAUNCHXL_NVSName { -#ifndef Board_EXCLUDE_NVS_INTERNAL_FLASH +#if TI_NVS_CONF_NVS_INTERNAL_ENABLE CC1312R1_LAUNCHXL_NVSCC26XX0 = 0, #endif -#ifndef Board_EXCLUDE_NVS_EXTERNAL_FLASH +#if TI_NVS_CONF_NVS_EXTERNAL_ENABLE CC1312R1_LAUNCHXL_NVSSPI25X0, #endif @@ -378,8 +382,12 @@ typedef enum CC1312R1_LAUNCHXL_SDName { * @brief Enum of SPI names */ typedef enum CC1312R1_LAUNCHXL_SPIName { +#if TI_SPI_CONF_SPI0_ENABLE CC1312R1_LAUNCHXL_SPI0 = 0, +#endif +#if TI_SPI_CONF_SPI1_ENABLE CC1312R1_LAUNCHXL_SPI1, +#endif CC1312R1_LAUNCHXL_SPICOUNT } CC1312R1_LAUNCHXL_SPIName; @@ -389,7 +397,9 @@ typedef enum CC1312R1_LAUNCHXL_SPIName { * @brief Enum of UARTs */ typedef enum CC1312R1_LAUNCHXL_UARTName { +#if TI_UART_CONF_UART0_ENABLE CC1312R1_LAUNCHXL_UART0 = 0, +#endif CC1312R1_LAUNCHXL_UARTCOUNT } CC1312R1_LAUNCHXL_UARTName; diff --git a/arch/platform/simplelink/cc13xx-cc26xx/launchpad/cc1350-4/CC1350_LAUNCHXL_433.c b/arch/platform/simplelink/cc13xx-cc26xx/launchpad/cc1350-4/CC1350_LAUNCHXL_433.c index 9679f7599..55b30637d 100644 --- a/arch/platform/simplelink/cc13xx-cc26xx/launchpad/cc1350-4/CC1350_LAUNCHXL_433.c +++ b/arch/platform/simplelink/cc13xx-cc26xx/launchpad/cc1350-4/CC1350_LAUNCHXL_433.c @@ -252,19 +252,21 @@ const CryptoCC26XX_Config CryptoCC26XX_config[CC1350_LAUNCHXL_433_CRYPTOCOUNT] = #include #include +#if TI_DISPLAY_CONF_ENABLE + +#if TI_DISPLAY_CONF_UART_ENABLE + +#if !(TI_UART_CONF_UART0_ENABLE) +#error "Display UART driver requires UART0" +#endif + #ifndef BOARD_DISPLAY_UART_STRBUF_SIZE #define BOARD_DISPLAY_UART_STRBUF_SIZE 128 #endif -#ifndef BOARD_DISPLAY_SHARP_SIZE -#define BOARD_DISPLAY_SHARP_SIZE 96 -#endif +static char uartStringBuf[BOARD_DISPLAY_UART_STRBUF_SIZE]; DisplayUart_Object displayUartObject; -DisplaySharp_Object displaySharpObject; - -static char uartStringBuf[BOARD_DISPLAY_UART_STRBUF_SIZE]; -static uint_least8_t sharpDisplayBuf[BOARD_DISPLAY_SHARP_SIZE * BOARD_DISPLAY_SHARP_SIZE / 8]; const DisplayUart_HWAttrs displayUartHWAttrs = { .uartIdx = CC1350_LAUNCHXL_433_UART0, @@ -274,6 +276,22 @@ const DisplayUart_HWAttrs displayUartHWAttrs = { .strBufLen = BOARD_DISPLAY_UART_STRBUF_SIZE, }; +#endif /* TI_DISPLAY_CONF_UART_ENABLE */ + +#if TI_DISPLAY_CONF_LCD_ENABLE + +#if !(TI_SPI_CONF_SPI0_ENABLE) +#error "Display LCD driver requires SPI0" +#endif + +#ifndef BOARD_DISPLAY_SHARP_SIZE +#define BOARD_DISPLAY_SHARP_SIZE 96 +#endif + +static uint_least8_t sharpDisplayBuf[BOARD_DISPLAY_SHARP_SIZE * BOARD_DISPLAY_SHARP_SIZE / 8]; + +DisplaySharp_Object displaySharpObject; + const DisplaySharp_HWAttrsV1 displaySharpHWattrs = { .spiIndex = CC1350_LAUNCHXL_433_SPI0, .csPin = CC1350_LAUNCHXL_433_GPIO_LCD_CS, @@ -284,27 +302,18 @@ const DisplaySharp_HWAttrsV1 displaySharpHWattrs = { .displayBuf = sharpDisplayBuf, }; -#ifndef BOARD_DISPLAY_USE_UART -#define BOARD_DISPLAY_USE_UART 1 -#endif -#ifndef BOARD_DISPLAY_USE_UART_ANSI -#define BOARD_DISPLAY_USE_UART_ANSI 0 -#endif -#ifndef BOARD_DISPLAY_USE_LCD -#define BOARD_DISPLAY_USE_LCD 0 -#endif +#endif /* TI_DISPLAY_CONF_LCD_ENABLE */ /* * This #if/#else is needed to workaround a problem with the * IAR compiler. The IAR compiler doesn't like the empty array * initialization. (IAR Error[Pe1345]) */ -#if (BOARD_DISPLAY_USE_UART || BOARD_DISPLAY_USE_LCD) const Display_Config Display_config[] = { -#if (BOARD_DISPLAY_USE_UART) +#if TI_DISPLAY_CONF_UART_ENABLE { -# if (BOARD_DISPLAY_USE_UART_ANSI) +# if TI_DISPLAY_CONF_USE_UART_ANSI .fxnTablePtr = &DisplayUartAnsi_fxnTable, # else /* Default to minimal UART with no cursor placement */ .fxnTablePtr = &DisplayUartMin_fxnTable, @@ -313,7 +322,7 @@ const Display_Config Display_config[] = { .hwAttrs = &displayUartHWAttrs, }, #endif -#if (BOARD_DISPLAY_USE_LCD) +#if TI_DISPLAY_CONF_LCD_ENABLE { .fxnTablePtr = &DisplaySharp_fxnTable, .object = &displaySharpObject, @@ -329,7 +338,7 @@ const uint_least8_t Display_count = sizeof(Display_config) / sizeof(Display_Conf const Display_Config *Display_config = NULL; const uint_least8_t Display_count = 0; -#endif /* (BOARD_DISPLAY_USE_UART || BOARD_DISPLAY_USE_LCD) */ +#endif /* TI_DISPLAY_CONF_ENABLE */ /* * =============================== GPIO =============================== @@ -428,6 +437,8 @@ const GPTimerCC26XX_Config GPTimerCC26XX_config[CC1350_LAUNCHXL_433_GPTIMERPARTS #include #include +#if TI_I2C_CONF_ENABLE + I2CCC26XX_Object i2cCC26xxObjects[CC1350_LAUNCHXL_433_I2CCOUNT]; const I2CCC26XX_HWAttrsV1 i2cCC26xxHWAttrs[CC1350_LAUNCHXL_433_I2CCOUNT] = { @@ -452,6 +463,8 @@ const I2C_Config I2C_config[CC1350_LAUNCHXL_433_I2CCOUNT] = { const uint_least8_t I2C_count = CC1350_LAUNCHXL_433_I2CCOUNT; +#endif /* TI_I2C_CONF_ENABLE */ + /* * =============================== NVS =============================== */ @@ -463,7 +476,9 @@ const uint_least8_t I2C_count = CC1350_LAUNCHXL_433_I2CCOUNT; #define SECTORSIZE 0x1000 #define REGIONSIZE (SECTORSIZE * 4) -#ifndef Board_EXCLUDE_NVS_INTERNAL_FLASH +#if TI_NVS_CONF_ENABLE + +#if TI_NVS_CONF_NVS_INTERNAL_ENABLE /* * Reserve flash sectors for NVS driver use by placing an uninitialized byte @@ -513,9 +528,9 @@ const NVSCC26XX_HWAttrs nvsCC26xxHWAttrs[1] = { }, }; -#endif /* Board_EXCLUDE_NVS_INTERNAL_FLASH */ +#endif /* TI_NVS_CONF_NVS_INTERNAL_ENABLE */ -#ifndef Board_EXCLUDE_NVS_EXTERNAL_FLASH +#if TI_NVS_CONF_NVS_EXTERNAL_ENABLE #define SPISECTORSIZE 0x1000 #define SPIREGIONSIZE (SPISECTORSIZE * 32) @@ -541,18 +556,18 @@ const NVSSPI25X_HWAttrs nvsSPI25XHWAttrs[1] = { }, }; -#endif /* Board_EXCLUDE_NVS_EXTERNAL_FLASH */ +#endif /* TI_NVS_CONF_NVS_EXTERNAL_ENABLE */ /* NVS Region index 0 and 1 refer to NVS and NVS SPI respectively */ const NVS_Config NVS_config[CC1350_LAUNCHXL_433_NVSCOUNT] = { -#ifndef Board_EXCLUDE_NVS_INTERNAL_FLASH +#if TI_NVS_CONF_NVS_INTERNAL_ENABLE { .fxnTablePtr = &NVSCC26XX_fxnTable, .object = &nvsCC26xxObjects[0], .hwAttrs = &nvsCC26xxHWAttrs[0], }, #endif -#ifndef Board_EXCLUDE_NVS_EXTERNAL_FLASH +#if TI_NVS_CONF_NVS_EXTERNAL_ENABLE { .fxnTablePtr = &NVSSPI25X_fxnTable, .object = &nvsSPI25XObjects[0], @@ -563,6 +578,8 @@ const NVS_Config NVS_config[CC1350_LAUNCHXL_433_NVSCOUNT] = { const uint_least8_t NVS_count = CC1350_LAUNCHXL_433_NVSCOUNT; +#endif /* TI_NVS_CONF_ENABLE */ + /* * =============================== PIN =============================== */ @@ -670,6 +687,12 @@ const RFCC26XX_HWAttrsV2 RFCC26XX_hwAttrs = { #include #include +#if TI_SD_CONF_ENABLE + +#if !(TI_SPI_CONF_SPI0_ENABLE) +#error "SD driver requires SPI0 enabled" +#endif + SDSPI_Object sdspiObjects[CC1350_LAUNCHXL_433_SDCOUNT]; const SDSPI_HWAttrs sdspiHWAttrs[CC1350_LAUNCHXL_433_SDCOUNT] = { @@ -689,12 +712,16 @@ const SD_Config SD_config[CC1350_LAUNCHXL_433_SDCOUNT] = { const uint_least8_t SD_count = CC1350_LAUNCHXL_433_SDCOUNT; +#endif /* TI_SD_CONF_ENABLE */ + /* * =============================== SPI DMA =============================== */ #include #include +#if TI_SPI_CONF_ENABLE + SPICC26XXDMA_Object spiCC26XXDMAObjects[CC1350_LAUNCHXL_433_SPICOUNT]; /* @@ -703,6 +730,7 @@ SPICC26XXDMA_Object spiCC26XXDMAObjects[CC1350_LAUNCHXL_433_SPICOUNT]; * to satisfy the SDSPI driver requirement. */ const SPICC26XXDMA_HWAttrsV1 spiCC26XXDMAHWAttrs[CC1350_LAUNCHXL_433_SPICOUNT] = { +#if TI_SPI_CONF_SPI0_ENABLE { .baseAddr = SSI0_BASE, .intNum = INT_SSI0_COMB, @@ -718,6 +746,8 @@ const SPICC26XXDMA_HWAttrsV1 spiCC26XXDMAHWAttrs[CC1350_LAUNCHXL_433_SPICOUNT] = .csnPin = CC1350_LAUNCHXL_433_SPI0_CSN, .minDmaTransferSize = 10 }, +#endif +#if TI_SPI_CONF_SPI1_ENABLE { .baseAddr = SSI1_BASE, .intNum = INT_SSI1_COMB, @@ -732,35 +762,45 @@ const SPICC26XXDMA_HWAttrsV1 spiCC26XXDMAHWAttrs[CC1350_LAUNCHXL_433_SPICOUNT] = .clkPin = CC1350_LAUNCHXL_433_SPI1_CLK, .csnPin = CC1350_LAUNCHXL_433_SPI1_CSN, .minDmaTransferSize = 10 - } + }, +#endif }; const SPI_Config SPI_config[CC1350_LAUNCHXL_433_SPICOUNT] = { +#if TI_SPI_CONF_SPI0_ENABLE { .fxnTablePtr = &SPICC26XXDMA_fxnTable, .object = &spiCC26XXDMAObjects[CC1350_LAUNCHXL_433_SPI0], .hwAttrs = &spiCC26XXDMAHWAttrs[CC1350_LAUNCHXL_433_SPI0] }, +#endif +#if TI_SPI_CONF_SPI1_ENABLE { .fxnTablePtr = &SPICC26XXDMA_fxnTable, .object = &spiCC26XXDMAObjects[CC1350_LAUNCHXL_433_SPI1], .hwAttrs = &spiCC26XXDMAHWAttrs[CC1350_LAUNCHXL_433_SPI1] }, +#endif }; const uint_least8_t SPI_count = CC1350_LAUNCHXL_433_SPICOUNT; +#endif /* TI_SPI_CONF_ENABLE */ + /* * =============================== UART =============================== */ #include #include +#if TI_UART_CONF_ENABLE + UARTCC26XX_Object uartCC26XXObjects[CC1350_LAUNCHXL_433_UARTCOUNT]; uint8_t uartCC26XXRingBuffer[CC1350_LAUNCHXL_433_UARTCOUNT][32]; const UARTCC26XX_HWAttrsV2 uartCC26XXHWAttrs[CC1350_LAUNCHXL_433_UARTCOUNT] = { +#if TI_UART_CONF_UART0_ENABLE { .baseAddr = UART0_BASE, .powerMngrId = PowerCC26XX_PERIPH_UART0, @@ -776,19 +816,24 @@ const UARTCC26XX_HWAttrsV2 uartCC26XXHWAttrs[CC1350_LAUNCHXL_433_UARTCOUNT] = { .txIntFifoThr = UARTCC26XX_FIFO_THRESHOLD_1_8, .rxIntFifoThr = UARTCC26XX_FIFO_THRESHOLD_4_8, .errorFxn = NULL - } + }, +#endif }; const UART_Config UART_config[CC1350_LAUNCHXL_433_UARTCOUNT] = { +#if TI_UART_CONF_UART0_ENABLE { .fxnTablePtr = &UARTCC26XX_fxnTable, .object = &uartCC26XXObjects[CC1350_LAUNCHXL_433_UART0], .hwAttrs = &uartCC26XXHWAttrs[CC1350_LAUNCHXL_433_UART0] }, +#endif }; const uint_least8_t UART_count = CC1350_LAUNCHXL_433_UARTCOUNT; +#endif /* TI_UART_CONF_ENABLE */ + /* * =============================== UDMA =============================== */ diff --git a/arch/platform/simplelink/cc13xx-cc26xx/launchpad/cc1350-4/CC1350_LAUNCHXL_433.h b/arch/platform/simplelink/cc13xx-cc26xx/launchpad/cc1350-4/CC1350_LAUNCHXL_433.h index fa3a63316..9e9bee949 100644 --- a/arch/platform/simplelink/cc13xx-cc26xx/launchpad/cc1350-4/CC1350_LAUNCHXL_433.h +++ b/arch/platform/simplelink/cc13xx-cc26xx/launchpad/cc1350-4/CC1350_LAUNCHXL_433.h @@ -49,6 +49,8 @@ extern "C" { #endif +#include "contiki-conf.h" + /* Includes */ #include #include diff --git a/arch/platform/simplelink/cc13xx-cc26xx/launchpad/cc1350/CC1350_LAUNCHXL.c b/arch/platform/simplelink/cc13xx-cc26xx/launchpad/cc1350/CC1350_LAUNCHXL.c index 2a4f4dee7..1fbff5e6d 100644 --- a/arch/platform/simplelink/cc13xx-cc26xx/launchpad/cc1350/CC1350_LAUNCHXL.c +++ b/arch/platform/simplelink/cc13xx-cc26xx/launchpad/cc1350/CC1350_LAUNCHXL.c @@ -253,19 +253,21 @@ const CryptoCC26XX_Config CryptoCC26XX_config[CC1350_LAUNCHXL_CRYPTOCOUNT] = { #include #include +#if TI_DISPLAY_CONF_ENABLE + +#if TI_DISPLAY_CONF_UART_ENABLE + +#if !(TI_UART_CONF_UART0_ENABLE) +#error "Display UART driver requires UART0" +#endif + #ifndef BOARD_DISPLAY_UART_STRBUF_SIZE #define BOARD_DISPLAY_UART_STRBUF_SIZE 128 #endif -#ifndef BOARD_DISPLAY_SHARP_SIZE -#define BOARD_DISPLAY_SHARP_SIZE 96 -#endif +static char uartStringBuf[BOARD_DISPLAY_UART_STRBUF_SIZE]; DisplayUart_Object displayUartObject; -DisplaySharp_Object displaySharpObject; - -static char uartStringBuf[BOARD_DISPLAY_UART_STRBUF_SIZE]; -static uint_least8_t sharpDisplayBuf[BOARD_DISPLAY_SHARP_SIZE * BOARD_DISPLAY_SHARP_SIZE / 8]; const DisplayUart_HWAttrs displayUartHWAttrs = { .uartIdx = CC1350_LAUNCHXL_UART0, @@ -275,6 +277,22 @@ const DisplayUart_HWAttrs displayUartHWAttrs = { .strBufLen = BOARD_DISPLAY_UART_STRBUF_SIZE, }; +#endif /* TI_DISPLAY_CONF_UART_ENABLE */ + +#if TI_DISPLAY_CONF_LCD_ENABLE + +#if !(TI_SPI_CONF_SPI0_ENABLE) +#error "Display LCD driver requires SPI0" +#endif + +#ifndef BOARD_DISPLAY_SHARP_SIZE +#define BOARD_DISPLAY_SHARP_SIZE 96 +#endif + +static uint_least8_t sharpDisplayBuf[BOARD_DISPLAY_SHARP_SIZE * BOARD_DISPLAY_SHARP_SIZE / 8]; + +DisplaySharp_Object displaySharpObject; + const DisplaySharp_HWAttrsV1 displaySharpHWattrs = { .spiIndex = CC1350_LAUNCHXL_SPI0, .csPin = CC1350_LAUNCHXL_GPIO_LCD_CS, @@ -285,27 +303,18 @@ const DisplaySharp_HWAttrsV1 displaySharpHWattrs = { .displayBuf = sharpDisplayBuf, }; -#ifndef BOARD_DISPLAY_USE_UART -#define BOARD_DISPLAY_USE_UART 1 -#endif -#ifndef BOARD_DISPLAY_USE_UART_ANSI -#define BOARD_DISPLAY_USE_UART_ANSI 0 -#endif -#ifndef BOARD_DISPLAY_USE_LCD -#define BOARD_DISPLAY_USE_LCD 0 -#endif +#endif /* TI_DISPLAY_CONF_LCD_ENABLE */ /* * This #if/#else is needed to workaround a problem with the * IAR compiler. The IAR compiler doesn't like the empty array * initialization. (IAR Error[Pe1345]) */ -#if (BOARD_DISPLAY_USE_UART || BOARD_DISPLAY_USE_LCD) const Display_Config Display_config[] = { -#if (BOARD_DISPLAY_USE_UART) +#if TI_DISPLAY_CONF_UART_ENABLE { -# if (BOARD_DISPLAY_USE_UART_ANSI) +# if TI_DISPLAY_CONF_USE_UART_ANSI .fxnTablePtr = &DisplayUartAnsi_fxnTable, # else /* Default to minimal UART with no cursor placement */ .fxnTablePtr = &DisplayUartMin_fxnTable, @@ -314,7 +323,7 @@ const Display_Config Display_config[] = { .hwAttrs = &displayUartHWAttrs, }, #endif -#if (BOARD_DISPLAY_USE_LCD) +#if TI_DISPLAY_CONF_LCD_ENABLE { .fxnTablePtr = &DisplaySharp_fxnTable, .object = &displaySharpObject, @@ -330,7 +339,7 @@ const uint_least8_t Display_count = sizeof(Display_config) / sizeof(Display_Conf const Display_Config *Display_config = NULL; const uint_least8_t Display_count = 0; -#endif /* (BOARD_DISPLAY_USE_UART || BOARD_DISPLAY_USE_LCD) */ +#endif /* TI_DISPLAY_CONF_ENABLE */ /* * =============================== GPIO =============================== @@ -429,9 +438,12 @@ const GPTimerCC26XX_Config GPTimerCC26XX_config[CC1350_LAUNCHXL_GPTIMERPARTSCOUN #include #include +#if TI_I2C_CONF_ENABLE + I2CCC26XX_Object i2cCC26xxObjects[CC1350_LAUNCHXL_I2CCOUNT]; const I2CCC26XX_HWAttrsV1 i2cCC26xxHWAttrs[CC1350_LAUNCHXL_I2CCOUNT] = { +#if TI_I2C_CONF_I2C0_ENABLE { .baseAddr = I2C0_BASE, .powerMngrId = PowerCC26XX_PERIPH_I2C0, @@ -440,19 +452,24 @@ const I2CCC26XX_HWAttrsV1 i2cCC26xxHWAttrs[CC1350_LAUNCHXL_I2CCOUNT] = { .swiPriority = 0, .sdaPin = CC1350_LAUNCHXL_I2C0_SDA0, .sclPin = CC1350_LAUNCHXL_I2C0_SCL0, - } + }, +#endif }; const I2C_Config I2C_config[CC1350_LAUNCHXL_I2CCOUNT] = { +#if TI_I2C_CONF_I2C0_ENABLE { .fxnTablePtr = &I2CCC26XX_fxnTable, .object = &i2cCC26xxObjects[CC1350_LAUNCHXL_I2C0], .hwAttrs = &i2cCC26xxHWAttrs[CC1350_LAUNCHXL_I2C0] }, +#endif }; const uint_least8_t I2C_count = CC1350_LAUNCHXL_I2CCOUNT; +#endif /* TI_I2C_CONF_ENABLE */ + /* * =============================== NVS =============================== */ @@ -464,7 +481,9 @@ const uint_least8_t I2C_count = CC1350_LAUNCHXL_I2CCOUNT; #define SECTORSIZE 0x1000 #define REGIONSIZE (SECTORSIZE * 4) -#ifndef Board_EXCLUDE_NVS_INTERNAL_FLASH +#if TI_NVS_CONF_ENABLE + +#if TI_NVS_CONF_NVS_INTERNAL_ENABLE /* * Reserve flash sectors for NVS driver use by placing an uninitialized byte @@ -514,9 +533,9 @@ const NVSCC26XX_HWAttrs nvsCC26xxHWAttrs[1] = { }, }; -#endif /* Board_EXCLUDE_NVS_INTERNAL_FLASH */ +#endif /* TI_NVS_CONF_NVS_INTERNAL_ENABLE */ -#ifndef Board_EXCLUDE_NVS_EXTERNAL_FLASH +#if TI_NVS_CONF_NVS_EXTERNAL_ENABLE #define SPISECTORSIZE 0x1000 #define SPIREGIONSIZE (SPISECTORSIZE * 32) @@ -542,18 +561,18 @@ const NVSSPI25X_HWAttrs nvsSPI25XHWAttrs[1] = { }, }; -#endif /* Board_EXCLUDE_NVS_EXTERNAL_FLASH */ +#endif /* TI_NVS_CONF_NVS_EXTERNAL_ENABLE */ /* NVS Region index 0 and 1 refer to NVS and NVS SPI respectively */ const NVS_Config NVS_config[CC1350_LAUNCHXL_NVSCOUNT] = { -#ifndef Board_EXCLUDE_NVS_INTERNAL_FLASH +#if TI_NVS_CONF_NVS_INTERNAL_ENABLE { .fxnTablePtr = &NVSCC26XX_fxnTable, .object = &nvsCC26xxObjects[0], .hwAttrs = &nvsCC26xxHWAttrs[0], }, #endif -#ifndef Board_EXCLUDE_NVS_EXTERNAL_FLASH +#if TI_NVS_CONF_NVS_EXTERNAL_ENABLE { .fxnTablePtr = &NVSSPI25X_fxnTable, .object = &nvsSPI25XObjects[0], @@ -564,6 +583,8 @@ const NVS_Config NVS_config[CC1350_LAUNCHXL_NVSCOUNT] = { const uint_least8_t NVS_count = CC1350_LAUNCHXL_NVSCOUNT; +#endif /* TI_NVS_CONF_ENABLE */ + /* * =============================== PIN =============================== */ @@ -671,6 +692,12 @@ const RFCC26XX_HWAttrsV2 RFCC26XX_hwAttrs = { #include #include +#if TI_SD_CONF_ENABLE + +#if !(TI_SPI_CONF_SPI0_ENABLE) +#error "SD driver requires SPI0 enabled" +#endif + SDSPI_Object sdspiObjects[CC1350_LAUNCHXL_SDCOUNT]; const SDSPI_HWAttrs sdspiHWAttrs[CC1350_LAUNCHXL_SDCOUNT] = { @@ -690,12 +717,16 @@ const SD_Config SD_config[CC1350_LAUNCHXL_SDCOUNT] = { const uint_least8_t SD_count = CC1350_LAUNCHXL_SDCOUNT; +#endif /* TI_SD_CONF_ENABLE */ + /* * =============================== SPI DMA =============================== */ #include #include +#if TI_SPI_CONF_ENABLE + SPICC26XXDMA_Object spiCC26XXDMAObjects[CC1350_LAUNCHXL_SPICOUNT]; /* @@ -704,6 +735,7 @@ SPICC26XXDMA_Object spiCC26XXDMAObjects[CC1350_LAUNCHXL_SPICOUNT]; * to satisfy the SDSPI driver requirement. */ const SPICC26XXDMA_HWAttrsV1 spiCC26XXDMAHWAttrs[CC1350_LAUNCHXL_SPICOUNT] = { +#if TI_SPI_CONF_SPI0_ENABLE { .baseAddr = SSI0_BASE, .intNum = INT_SSI0_COMB, @@ -719,6 +751,8 @@ const SPICC26XXDMA_HWAttrsV1 spiCC26XXDMAHWAttrs[CC1350_LAUNCHXL_SPICOUNT] = { .csnPin = CC1350_LAUNCHXL_SPI0_CSN, .minDmaTransferSize = 10 }, +#endif +#if TI_SPI_CONF_SPI1_ENABLE { .baseAddr = SSI1_BASE, .intNum = INT_SSI1_COMB, @@ -733,35 +767,45 @@ const SPICC26XXDMA_HWAttrsV1 spiCC26XXDMAHWAttrs[CC1350_LAUNCHXL_SPICOUNT] = { .clkPin = CC1350_LAUNCHXL_SPI1_CLK, .csnPin = CC1350_LAUNCHXL_SPI1_CSN, .minDmaTransferSize = 10 - } + }, +#endif }; const SPI_Config SPI_config[CC1350_LAUNCHXL_SPICOUNT] = { +#if TI_SPI_CONF_SPI0_ENABLE { .fxnTablePtr = &SPICC26XXDMA_fxnTable, .object = &spiCC26XXDMAObjects[CC1350_LAUNCHXL_SPI0], .hwAttrs = &spiCC26XXDMAHWAttrs[CC1350_LAUNCHXL_SPI0] }, +#endif +#if TI_SPI_CONF_SPI1_ENABLE { .fxnTablePtr = &SPICC26XXDMA_fxnTable, .object = &spiCC26XXDMAObjects[CC1350_LAUNCHXL_SPI1], .hwAttrs = &spiCC26XXDMAHWAttrs[CC1350_LAUNCHXL_SPI1] }, +#endif }; const uint_least8_t SPI_count = CC1350_LAUNCHXL_SPICOUNT; +#endif /* TI_SPI_CONF_ENABLE */ + /* * =============================== UART =============================== */ #include #include +#if TI_UART_CONF_ENABLE + UARTCC26XX_Object uartCC26XXObjects[CC1350_LAUNCHXL_UARTCOUNT]; uint8_t uartCC26XXRingBuffer[CC1350_LAUNCHXL_UARTCOUNT][32]; const UARTCC26XX_HWAttrsV2 uartCC26XXHWAttrs[CC1350_LAUNCHXL_UARTCOUNT] = { +#if TI_UART_CONF_UART0_ENABLE { .baseAddr = UART0_BASE, .powerMngrId = PowerCC26XX_PERIPH_UART0, @@ -777,19 +821,24 @@ const UARTCC26XX_HWAttrsV2 uartCC26XXHWAttrs[CC1350_LAUNCHXL_UARTCOUNT] = { .txIntFifoThr = UARTCC26XX_FIFO_THRESHOLD_1_8, .rxIntFifoThr = UARTCC26XX_FIFO_THRESHOLD_4_8, .errorFxn = NULL - } + }, +#endif }; const UART_Config UART_config[CC1350_LAUNCHXL_UARTCOUNT] = { +#if TI_UART_CONF_UART0_ENABLE { .fxnTablePtr = &UARTCC26XX_fxnTable, .object = &uartCC26XXObjects[CC1350_LAUNCHXL_UART0], .hwAttrs = &uartCC26XXHWAttrs[CC1350_LAUNCHXL_UART0] }, +#endif }; const uint_least8_t UART_count = CC1350_LAUNCHXL_UARTCOUNT; +#endif /* TI_UART_CONF_ENABLE */ + /* * =============================== UDMA =============================== */ diff --git a/arch/platform/simplelink/cc13xx-cc26xx/launchpad/cc1350/CC1350_LAUNCHXL.h b/arch/platform/simplelink/cc13xx-cc26xx/launchpad/cc1350/CC1350_LAUNCHXL.h index be952b936..88ffb333b 100644 --- a/arch/platform/simplelink/cc13xx-cc26xx/launchpad/cc1350/CC1350_LAUNCHXL.h +++ b/arch/platform/simplelink/cc13xx-cc26xx/launchpad/cc1350/CC1350_LAUNCHXL.h @@ -49,6 +49,8 @@ extern "C" { #endif +#include "contiki-conf.h" + /* Includes */ #include #include @@ -270,7 +272,9 @@ typedef enum CC1350_LAUNCHXL_GPTimers { * @brief Enum of I2C names */ typedef enum CC1350_LAUNCHXL_I2CName { +#if TI_I2C_CONF_I2C0_ENABLE CC1350_LAUNCHXL_I2C0 = 0, +#endif CC1350_LAUNCHXL_I2CCOUNT } CC1350_LAUNCHXL_I2CName; @@ -280,10 +284,10 @@ typedef enum CC1350_LAUNCHXL_I2CName { * @brief Enum of NVS names */ typedef enum CC1350_LAUNCHXL_NVSName { -#ifndef Board_EXCLUDE_NVS_INTERNAL_FLASH +#if TI_NVS_CONF_NVS_INTERNAL_ENABLE CC1350_LAUNCHXL_NVSCC26XX0 = 0, #endif -#ifndef Board_EXCLUDE_NVS_EXTERNAL_FLASH +#if TI_NVS_CONF_NVS_EXTERNAL_ENABLE CC1350_LAUNCHXL_NVSSPI25X0, #endif @@ -322,8 +326,12 @@ typedef enum CC1350_LAUNCHXL_SDName { * @brief Enum of SPI names */ typedef enum CC1350_LAUNCHXL_SPIName { +#if TI_SPI_CONF_SPI0_ENABLE CC1350_LAUNCHXL_SPI0 = 0, +#endif +#if TI_SPI_CONF_SPI1_ENABLE CC1350_LAUNCHXL_SPI1, +#endif CC1350_LAUNCHXL_SPICOUNT } CC1350_LAUNCHXL_SPIName; @@ -333,7 +341,9 @@ typedef enum CC1350_LAUNCHXL_SPIName { * @brief Enum of UARTs */ typedef enum CC1350_LAUNCHXL_UARTName { +#if TI_UART_CONF_UART0_ENABLE CC1350_LAUNCHXL_UART0 = 0, +#endif CC1350_LAUNCHXL_UARTCOUNT } CC1350_LAUNCHXL_UARTName; diff --git a/arch/platform/simplelink/cc13xx-cc26xx/launchpad/cc1352p-2/CC1352P_2_LAUNCHXL.c b/arch/platform/simplelink/cc13xx-cc26xx/launchpad/cc1352p-2/CC1352P_2_LAUNCHXL.c index d78087e3d..973f712ac 100644 --- a/arch/platform/simplelink/cc13xx-cc26xx/launchpad/cc1352p-2/CC1352P_2_LAUNCHXL.c +++ b/arch/platform/simplelink/cc13xx-cc26xx/launchpad/cc1352p-2/CC1352P_2_LAUNCHXL.c @@ -340,19 +340,21 @@ const uint_least8_t AESECB_count = CC1352P_2_LAUNCHXL_AESECBCOUNT; #include #include +#if TI_DISPLAY_CONF_ENABLE + +#if TI_DISPLAY_CONF_UART_ENABLE + +#if !(TI_UART_CONF_UART0_ENABLE) +#error "Display UART driver requires UART0" +#endif + #ifndef BOARD_DISPLAY_UART_STRBUF_SIZE #define BOARD_DISPLAY_UART_STRBUF_SIZE 128 #endif -#ifndef BOARD_DISPLAY_SHARP_SIZE -#define BOARD_DISPLAY_SHARP_SIZE 96 -#endif +static char uartStringBuf[BOARD_DISPLAY_UART_STRBUF_SIZE]; DisplayUart_Object displayUartObject; -DisplaySharp_Object displaySharpObject; - -static char uartStringBuf[BOARD_DISPLAY_UART_STRBUF_SIZE]; -static uint_least8_t sharpDisplayBuf[BOARD_DISPLAY_SHARP_SIZE * BOARD_DISPLAY_SHARP_SIZE / 8]; const DisplayUart_HWAttrs displayUartHWAttrs = { .uartIdx = CC1352P_2_LAUNCHXL_UART0, @@ -362,6 +364,22 @@ const DisplayUart_HWAttrs displayUartHWAttrs = { .strBufLen = BOARD_DISPLAY_UART_STRBUF_SIZE, }; +#endif /* TI_DISPLAY_CONF_UART_ENABLE */ + +#if TI_DISPLAY_CONF_LCD_ENABLE + +#if !(TI_SPI_CONF_SPI0_ENABLE) +#error "Display LCD driver requires SPI0" +#endif + +#ifndef BOARD_DISPLAY_SHARP_SIZE +#define BOARD_DISPLAY_SHARP_SIZE 96 +#endif + +static uint_least8_t sharpDisplayBuf[BOARD_DISPLAY_SHARP_SIZE * BOARD_DISPLAY_SHARP_SIZE / 8]; + +DisplaySharp_Object displaySharpObject; + const DisplaySharp_HWAttrsV1 displaySharpHWattrs = { .spiIndex = CC1352P_2_LAUNCHXL_SPI0, .csPin = CC1352P_2_LAUNCHXL_GPIO_LCD_CS, @@ -372,27 +390,18 @@ const DisplaySharp_HWAttrsV1 displaySharpHWattrs = { .displayBuf = sharpDisplayBuf, }; -#ifndef BOARD_DISPLAY_USE_UART -#define BOARD_DISPLAY_USE_UART 1 -#endif -#ifndef BOARD_DISPLAY_USE_UART_ANSI -#define BOARD_DISPLAY_USE_UART_ANSI 0 -#endif -#ifndef BOARD_DISPLAY_USE_LCD -#define BOARD_DISPLAY_USE_LCD 0 -#endif +#endif /* TI_DISPLAY_CONF_LCD_ENABLE */ /* * This #if/#else is needed to workaround a problem with the * IAR compiler. The IAR compiler doesn't like the empty array * initialization. (IAR Error[Pe1345]) */ -#if (BOARD_DISPLAY_USE_UART || BOARD_DISPLAY_USE_LCD) const Display_Config Display_config[] = { -#if (BOARD_DISPLAY_USE_UART) +#if TI_DISPLAY_CONF_UART_ENABLE { -# if (BOARD_DISPLAY_USE_UART_ANSI) +# if TI_DISPLAY_CONF_USE_UART_ANSI .fxnTablePtr = &DisplayUartAnsi_fxnTable, # else /* Default to minimal UART with no cursor placement */ .fxnTablePtr = &DisplayUartMin_fxnTable, @@ -401,7 +410,7 @@ const Display_Config Display_config[] = { .hwAttrs = &displayUartHWAttrs, }, #endif -#if (BOARD_DISPLAY_USE_LCD) +#if TI_DISPLAY_CONF_LCD_ENABLE { .fxnTablePtr = &DisplaySharp_fxnTable, .object = &displaySharpObject, @@ -417,7 +426,7 @@ const uint_least8_t Display_count = sizeof(Display_config) / sizeof(Display_Conf const Display_Config *Display_config = NULL; const uint_least8_t Display_count = 0; -#endif /* (BOARD_DISPLAY_USE_UART || BOARD_DISPLAY_USE_LCD) */ +#endif /* TI_DISPLAY_CONF_ENABLE */ /* * =============================== GPIO =============================== @@ -519,9 +528,12 @@ const GPTimerCC26XX_Config GPTimerCC26XX_config[CC1352P_2_LAUNCHXL_GPTIMERPARTSC #include #include +#if TI_I2C_CONF_ENABLE + I2CCC26XX_Object i2cCC26xxObjects[CC1352P_2_LAUNCHXL_I2CCOUNT]; const I2CCC26XX_HWAttrsV1 i2cCC26xxHWAttrs[CC1352P_2_LAUNCHXL_I2CCOUNT] = { +#if TI_I2C_CONF_I2C0_ENABLE { .baseAddr = I2C0_BASE, .powerMngrId = PowerCC26XX_PERIPH_I2C0, @@ -530,19 +542,24 @@ const I2CCC26XX_HWAttrsV1 i2cCC26xxHWAttrs[CC1352P_2_LAUNCHXL_I2CCOUNT] = { .swiPriority = 0, .sdaPin = CC1352P_2_LAUNCHXL_I2C0_SDA0, .sclPin = CC1352P_2_LAUNCHXL_I2C0_SCL0, - } + }, +#endif }; const I2C_Config I2C_config[CC1352P_2_LAUNCHXL_I2CCOUNT] = { +#if TI_I2C_CONF_I2C0_ENABLE { .fxnTablePtr = &I2CCC26XX_fxnTable, .object = &i2cCC26xxObjects[CC1352P_2_LAUNCHXL_I2C0], .hwAttrs = &i2cCC26xxHWAttrs[CC1352P_2_LAUNCHXL_I2C0] }, +#endif }; const uint_least8_t I2C_count = CC1352P_2_LAUNCHXL_I2CCOUNT; +#endif /* TI_I2C_CONF_ENABLE */ + /* * =============================== NVS =============================== */ @@ -554,7 +571,9 @@ const uint_least8_t I2C_count = CC1352P_2_LAUNCHXL_I2CCOUNT; #define SECTORSIZE 0x2000 #define REGIONSIZE (SECTORSIZE * 4) -#ifndef Board_EXCLUDE_NVS_INTERNAL_FLASH +#if TI_NVS_CONF_ENABLE + +#if TI_NVS_CONF_NVS_INTERNAL_ENABLE /* * Reserve flash sectors for NVS driver use by placing an uninitialized byte @@ -604,9 +623,9 @@ const NVSCC26XX_HWAttrs nvsCC26xxHWAttrs[1] = { }, }; -#endif /* Board_EXCLUDE_NVS_INTERNAL_FLASH */ +#endif /* TI_NVS_CONF_NVS_INTERNAL_ENABLE */ -#ifndef Board_EXCLUDE_NVS_EXTERNAL_FLASH +#if TI_NVS_CONF_NVS_EXTERNAL_ENABLE #define SPISECTORSIZE 0x1000 #define SPIREGIONSIZE (SPISECTORSIZE * 32) @@ -632,18 +651,18 @@ const NVSSPI25X_HWAttrs nvsSPI25XHWAttrs[1] = { }, }; -#endif /* Board_EXCLUDE_NVS_EXTERNAL_FLASH */ +#endif /* TI_NVS_CONF_NVS_EXTERNAL_ENABLE */ /* NVS Region index 0 and 1 refer to NVS and NVS SPI respectively */ const NVS_Config NVS_config[CC1352P_2_LAUNCHXL_NVSCOUNT] = { -#ifndef Board_EXCLUDE_NVS_INTERNAL_FLASH +#if TI_NVS_CONF_NVS_INTERNAL_ENABLE { .fxnTablePtr = &NVSCC26XX_fxnTable, .object = &nvsCC26xxObjects[0], .hwAttrs = &nvsCC26xxHWAttrs[0], }, #endif -#ifndef Board_EXCLUDE_NVS_EXTERNAL_FLASH +#if TI_NVS_CONF_NVS_EXTERNAL_ENABLE { .fxnTablePtr = &NVSSPI25X_fxnTable, .object = &nvsSPI25XObjects[0], @@ -654,6 +673,8 @@ const NVS_Config NVS_config[CC1352P_2_LAUNCHXL_NVSCOUNT] = { const uint_least8_t NVS_count = CC1352P_2_LAUNCHXL_NVSCOUNT; +#endif /* TI_NVS_CONF_ENABLE */ + /* * =============================== PIN =============================== */ @@ -763,6 +784,12 @@ const RFCC26XX_HWAttrsV2 RFCC26XX_hwAttrs = { #include #include +#if TI_SD_CONF_ENABLE + +#if !(TI_SPI_CONF_SPI0_ENABLE) +#error "SD driver requires SPI0 enabled" +#endif + SDSPI_Object sdspiObjects[CC1352P_2_LAUNCHXL_SDCOUNT]; const SDSPI_HWAttrs sdspiHWAttrs[CC1352P_2_LAUNCHXL_SDCOUNT] = { @@ -782,12 +809,16 @@ const SD_Config SD_config[CC1352P_2_LAUNCHXL_SDCOUNT] = { const uint_least8_t SD_count = CC1352P_2_LAUNCHXL_SDCOUNT; +#endif /* TI_SD_CONF_ENABLE */ + /* * =============================== SPI DMA =============================== */ #include #include +#if TI_SPI_CONF_ENABLE + SPICC26XXDMA_Object spiCC26XXDMAObjects[CC1352P_2_LAUNCHXL_SPICOUNT]; /* @@ -796,6 +827,7 @@ SPICC26XXDMA_Object spiCC26XXDMAObjects[CC1352P_2_LAUNCHXL_SPICOUNT]; * to satisfy the SDSPI driver requirement. */ const SPICC26XXDMA_HWAttrsV1 spiCC26XXDMAHWAttrs[CC1352P_2_LAUNCHXL_SPICOUNT] = { +#if TI_SPI_CONF_SPI0_ENABLE { .baseAddr = SSI0_BASE, .intNum = INT_SSI0_COMB, @@ -811,6 +843,8 @@ const SPICC26XXDMA_HWAttrsV1 spiCC26XXDMAHWAttrs[CC1352P_2_LAUNCHXL_SPICOUNT] = .csnPin = CC1352P_2_LAUNCHXL_SPI0_CSN, .minDmaTransferSize = 10 }, +#endif +#if TI_SPI_CONF_SPI1_ENABLE { .baseAddr = SSI1_BASE, .intNum = INT_SSI1_COMB, @@ -825,35 +859,45 @@ const SPICC26XXDMA_HWAttrsV1 spiCC26XXDMAHWAttrs[CC1352P_2_LAUNCHXL_SPICOUNT] = .clkPin = CC1352P_2_LAUNCHXL_SPI1_CLK, .csnPin = CC1352P_2_LAUNCHXL_SPI1_CSN, .minDmaTransferSize = 10 - } + }, +#endif }; const SPI_Config SPI_config[CC1352P_2_LAUNCHXL_SPICOUNT] = { +#if TI_SPI_CONF_SPI0_ENABLE { .fxnTablePtr = &SPICC26XXDMA_fxnTable, .object = &spiCC26XXDMAObjects[CC1352P_2_LAUNCHXL_SPI0], .hwAttrs = &spiCC26XXDMAHWAttrs[CC1352P_2_LAUNCHXL_SPI0] }, +#endif +#if TI_SPI_CONF_SPI1_ENABLE { .fxnTablePtr = &SPICC26XXDMA_fxnTable, .object = &spiCC26XXDMAObjects[CC1352P_2_LAUNCHXL_SPI1], .hwAttrs = &spiCC26XXDMAHWAttrs[CC1352P_2_LAUNCHXL_SPI1] }, +#endif }; const uint_least8_t SPI_count = CC1352P_2_LAUNCHXL_SPICOUNT; +#endif /* TI_SPI_CONF_ENABLE */ + /* * =============================== UART =============================== */ #include #include +#if TI_UART_CONF_ENABLE + UARTCC26XX_Object uartCC26XXObjects[CC1352P_2_LAUNCHXL_UARTCOUNT]; uint8_t uartCC26XXRingBuffer[CC1352P_2_LAUNCHXL_UARTCOUNT][32]; const UARTCC26XX_HWAttrsV2 uartCC26XXHWAttrs[CC1352P_2_LAUNCHXL_UARTCOUNT] = { +#if TI_UART_CONF_UART0_ENABLE { .baseAddr = UART0_BASE, .powerMngrId = PowerCC26XX_PERIPH_UART0, @@ -870,6 +914,8 @@ const UARTCC26XX_HWAttrsV2 uartCC26XXHWAttrs[CC1352P_2_LAUNCHXL_UARTCOUNT] = { .rxIntFifoThr = UARTCC26XX_FIFO_THRESHOLD_4_8, .errorFxn = NULL }, +#endif +#if TI_UART_CONF_UART1_ENABLE { .baseAddr = UART1_BASE, .powerMngrId = PowerCC26X2_PERIPH_UART1, @@ -885,24 +931,31 @@ const UARTCC26XX_HWAttrsV2 uartCC26XXHWAttrs[CC1352P_2_LAUNCHXL_UARTCOUNT] = { .txIntFifoThr = UARTCC26XX_FIFO_THRESHOLD_1_8, .rxIntFifoThr = UARTCC26XX_FIFO_THRESHOLD_4_8, .errorFxn = NULL - } + }, +#endif }; const UART_Config UART_config[CC1352P_2_LAUNCHXL_UARTCOUNT] = { +#if TI_UART_CONF_UART0_ENABLE { .fxnTablePtr = &UARTCC26XX_fxnTable, .object = &uartCC26XXObjects[CC1352P_2_LAUNCHXL_UART0], .hwAttrs = &uartCC26XXHWAttrs[CC1352P_2_LAUNCHXL_UART0] }, +#endif +#if TI_UART_CONF_UART1_ENABLE { .fxnTablePtr = &UARTCC26XX_fxnTable, .object = &uartCC26XXObjects[CC1352P_2_LAUNCHXL_UART1], .hwAttrs = &uartCC26XXHWAttrs[CC1352P_2_LAUNCHXL_UART1] }, +#endif }; const uint_least8_t UART_count = CC1352P_2_LAUNCHXL_UARTCOUNT; +#endif /* TI_UART_CONF_ENABLE */ + /* * =============================== UDMA =============================== */ diff --git a/arch/platform/simplelink/cc13xx-cc26xx/launchpad/cc1352p-2/CC1352P_2_LAUNCHXL.h b/arch/platform/simplelink/cc13xx-cc26xx/launchpad/cc1352p-2/CC1352P_2_LAUNCHXL.h index 443f9badb..f71a15aa6 100644 --- a/arch/platform/simplelink/cc13xx-cc26xx/launchpad/cc1352p-2/CC1352P_2_LAUNCHXL.h +++ b/arch/platform/simplelink/cc13xx-cc26xx/launchpad/cc1352p-2/CC1352P_2_LAUNCHXL.h @@ -49,6 +49,8 @@ extern "C" { #endif +#include "contiki-conf.h" + /* Includes */ #include #include @@ -197,8 +199,6 @@ typedef enum CC1352P_2_LAUNCHXL_ADCBuf0ChannelName { CC1352P_2_LAUNCHXL_ADCBUF0CHANNEL2, CC1352P_2_LAUNCHXL_ADCBUF0CHANNEL3, CC1352P_2_LAUNCHXL_ADCBUF0CHANNEL4, - CC1352P_2_LAUNCHXL_ADCBUF0CHANNEL5, - CC1352P_2_LAUNCHXL_ADCBUF0CHANNEL6, CC1352P_2_LAUNCHXL_ADCBUF0CHANNELVDDS, CC1352P_2_LAUNCHXL_ADCBUF0CHANNELDCOUPL, CC1352P_2_LAUNCHXL_ADCBUF0CHANNELVSS, @@ -216,8 +216,6 @@ typedef enum CC1352P_2_LAUNCHXL_ADCName { CC1352P_2_LAUNCHXL_ADC2, CC1352P_2_LAUNCHXL_ADC3, CC1352P_2_LAUNCHXL_ADC4, - CC1352P_2_LAUNCHXL_ADC5, - CC1352P_2_LAUNCHXL_ADC6, CC1352P_2_LAUNCHXL_ADCDCOUPL, CC1352P_2_LAUNCHXL_ADCVSS, CC1352P_2_LAUNCHXL_ADCVDDS, @@ -338,7 +336,9 @@ typedef enum CC1352P_2_LAUNCHXL_GPTimers { * @brief Enum of I2C names */ typedef enum CC1352P_2_LAUNCHXL_I2CName { +#if TI_I2C_CONF_I2C0_ENABLE CC1352P_2_LAUNCHXL_I2C0 = 0, +#endif CC1352P_2_LAUNCHXL_I2CCOUNT } CC1352P_2_LAUNCHXL_I2CName; @@ -348,10 +348,10 @@ typedef enum CC1352P_2_LAUNCHXL_I2CName { * @brief Enum of NVS names */ typedef enum CC1352P_2_LAUNCHXL_NVSName { -#ifndef Board_EXCLUDE_NVS_INTERNAL_FLASH +#if TI_NVS_CONF_NVS_INTERNAL_ENABLE CC1352P_2_LAUNCHXL_NVSCC26XX0 = 0, #endif -#ifndef Board_EXCLUDE_NVS_EXTERNAL_FLASH +#if TI_NVS_CONF_NVS_EXTERNAL_ENABLE CC1352P_2_LAUNCHXL_NVSSPI25X0, #endif @@ -390,8 +390,12 @@ typedef enum CC1352P_2_LAUNCHXL_SDName { * @brief Enum of SPI names */ typedef enum CC1352P_2_LAUNCHXL_SPIName { +#if TI_SPI_CONF_SPI0_ENABLE CC1352P_2_LAUNCHXL_SPI0 = 0, +#endif +#if TI_SPI_CONF_SPI1_ENABLE CC1352P_2_LAUNCHXL_SPI1, +#endif CC1352P_2_LAUNCHXL_SPICOUNT } CC1352P_2_LAUNCHXL_SPIName; @@ -401,8 +405,12 @@ typedef enum CC1352P_2_LAUNCHXL_SPIName { * @brief Enum of UARTs */ typedef enum CC1352P_2_LAUNCHXL_UARTName { +#if TI_UART_CONF_UART0_ENABLE CC1352P_2_LAUNCHXL_UART0 = 0, +#endif +#if TI_UART_CONF_UART1_ENABLE CC1352P_2_LAUNCHXL_UART1, +#endif CC1352P_2_LAUNCHXL_UARTCOUNT } CC1352P_2_LAUNCHXL_UARTName; diff --git a/arch/platform/simplelink/cc13xx-cc26xx/launchpad/cc1352p-4/CC1352P_4_LAUNCHXL.c b/arch/platform/simplelink/cc13xx-cc26xx/launchpad/cc1352p-4/CC1352P_4_LAUNCHXL.c index 0d5346cf5..007bcfeab 100644 --- a/arch/platform/simplelink/cc13xx-cc26xx/launchpad/cc1352p-4/CC1352P_4_LAUNCHXL.c +++ b/arch/platform/simplelink/cc13xx-cc26xx/launchpad/cc1352p-4/CC1352P_4_LAUNCHXL.c @@ -340,19 +340,21 @@ const uint_least8_t AESECB_count = CC1352P_4_LAUNCHXL_AESECBCOUNT; #include #include +#if TI_DISPLAY_CONF_ENABLE + +#if TI_DISPLAY_CONF_UART_ENABLE + +#if !(TI_UART_CONF_UART0_ENABLE) +#error "Display UART driver requires UART0" +#endif + #ifndef BOARD_DISPLAY_UART_STRBUF_SIZE #define BOARD_DISPLAY_UART_STRBUF_SIZE 128 #endif -#ifndef BOARD_DISPLAY_SHARP_SIZE -#define BOARD_DISPLAY_SHARP_SIZE 96 -#endif +static char uartStringBuf[BOARD_DISPLAY_UART_STRBUF_SIZE]; DisplayUart_Object displayUartObject; -DisplaySharp_Object displaySharpObject; - -static char uartStringBuf[BOARD_DISPLAY_UART_STRBUF_SIZE]; -static uint_least8_t sharpDisplayBuf[BOARD_DISPLAY_SHARP_SIZE * BOARD_DISPLAY_SHARP_SIZE / 8]; const DisplayUart_HWAttrs displayUartHWAttrs = { .uartIdx = CC1352P_4_LAUNCHXL_UART0, @@ -362,6 +364,22 @@ const DisplayUart_HWAttrs displayUartHWAttrs = { .strBufLen = BOARD_DISPLAY_UART_STRBUF_SIZE, }; +#endif /* TI_DISPLAY_CONF_UART_ENABLE */ + +#if TI_DISPLAY_CONF_LCD_ENABLE + +#if !(TI_SPI_CONF_SPI0_ENABLE) +#error "Display LCD driver requires SPI0" +#endif + +#ifndef BOARD_DISPLAY_SHARP_SIZE +#define BOARD_DISPLAY_SHARP_SIZE 96 +#endif + +static uint_least8_t sharpDisplayBuf[BOARD_DISPLAY_SHARP_SIZE * BOARD_DISPLAY_SHARP_SIZE / 8]; + +DisplaySharp_Object displaySharpObject; + const DisplaySharp_HWAttrsV1 displaySharpHWattrs = { .spiIndex = CC1352P_4_LAUNCHXL_SPI0, .csPin = CC1352P_4_LAUNCHXL_GPIO_LCD_CS, @@ -372,27 +390,18 @@ const DisplaySharp_HWAttrsV1 displaySharpHWattrs = { .displayBuf = sharpDisplayBuf, }; -#ifndef BOARD_DISPLAY_USE_UART -#define BOARD_DISPLAY_USE_UART 1 -#endif -#ifndef BOARD_DISPLAY_USE_UART_ANSI -#define BOARD_DISPLAY_USE_UART_ANSI 0 -#endif -#ifndef BOARD_DISPLAY_USE_LCD -#define BOARD_DISPLAY_USE_LCD 0 -#endif +#endif /* TI_DISPLAY_CONF_LCD_ENABLE */ /* * This #if/#else is needed to workaround a problem with the * IAR compiler. The IAR compiler doesn't like the empty array * initialization. (IAR Error[Pe1345]) */ -#if (BOARD_DISPLAY_USE_UART || BOARD_DISPLAY_USE_LCD) const Display_Config Display_config[] = { -#if (BOARD_DISPLAY_USE_UART) +#if TI_DISPLAY_CONF_UART_ENABLE { -# if (BOARD_DISPLAY_USE_UART_ANSI) +# if TI_DISPLAY_CONF_USE_UART_ANSI .fxnTablePtr = &DisplayUartAnsi_fxnTable, # else /* Default to minimal UART with no cursor placement */ .fxnTablePtr = &DisplayUartMin_fxnTable, @@ -401,7 +410,7 @@ const Display_Config Display_config[] = { .hwAttrs = &displayUartHWAttrs, }, #endif -#if (BOARD_DISPLAY_USE_LCD) +#if TI_DISPLAY_CONF_LCD_ENABLE { .fxnTablePtr = &DisplaySharp_fxnTable, .object = &displaySharpObject, @@ -417,7 +426,7 @@ const uint_least8_t Display_count = sizeof(Display_config) / sizeof(Display_Conf const Display_Config *Display_config = NULL; const uint_least8_t Display_count = 0; -#endif /* (BOARD_DISPLAY_USE_UART || BOARD_DISPLAY_USE_LCD) */ +#endif /* TI_DISPLAY_CONF_ENABLE */ /* * =============================== GPIO =============================== @@ -519,9 +528,12 @@ const GPTimerCC26XX_Config GPTimerCC26XX_config[CC1352P_4_LAUNCHXL_GPTIMERPARTSC #include #include +#if TI_I2C_CONF_ENABLE + I2CCC26XX_Object i2cCC26xxObjects[CC1352P_4_LAUNCHXL_I2CCOUNT]; const I2CCC26XX_HWAttrsV1 i2cCC26xxHWAttrs[CC1352P_4_LAUNCHXL_I2CCOUNT] = { +#if TI_I2C_CONF_I2C0_ENABLE { .baseAddr = I2C0_BASE, .powerMngrId = PowerCC26XX_PERIPH_I2C0, @@ -530,19 +542,24 @@ const I2CCC26XX_HWAttrsV1 i2cCC26xxHWAttrs[CC1352P_4_LAUNCHXL_I2CCOUNT] = { .swiPriority = 0, .sdaPin = CC1352P_4_LAUNCHXL_I2C0_SDA0, .sclPin = CC1352P_4_LAUNCHXL_I2C0_SCL0, - } + }, +#endif }; const I2C_Config I2C_config[CC1352P_4_LAUNCHXL_I2CCOUNT] = { +#if TI_I2C_CONF_I2C0_ENABLE { .fxnTablePtr = &I2CCC26XX_fxnTable, .object = &i2cCC26xxObjects[CC1352P_4_LAUNCHXL_I2C0], .hwAttrs = &i2cCC26xxHWAttrs[CC1352P_4_LAUNCHXL_I2C0] }, +#endif }; const uint_least8_t I2C_count = CC1352P_4_LAUNCHXL_I2CCOUNT; +#endif /* TI_I2C_CONF_ENABLE */ + /* * =============================== NVS =============================== */ @@ -554,7 +571,9 @@ const uint_least8_t I2C_count = CC1352P_4_LAUNCHXL_I2CCOUNT; #define SECTORSIZE 0x2000 #define REGIONSIZE (SECTORSIZE * 4) -#ifndef Board_EXCLUDE_NVS_INTERNAL_FLASH +#if TI_NVS_CONF_ENABLE + +#if TI_NVS_CONF_NVS_INTERNAL_ENABLE /* * Reserve flash sectors for NVS driver use by placing an uninitialized byte @@ -604,9 +623,9 @@ const NVSCC26XX_HWAttrs nvsCC26xxHWAttrs[1] = { }, }; -#endif /* Board_EXCLUDE_NVS_INTERNAL_FLASH */ +#endif /* TI_NVS_CONF_NVS_INTERNAL_ENABLE */ -#ifndef Board_EXCLUDE_NVS_EXTERNAL_FLASH +#if TI_NVS_CONF_NVS_EXTERNAL_ENABLE #define SPISECTORSIZE 0x1000 #define SPIREGIONSIZE (SPISECTORSIZE * 32) @@ -632,18 +651,18 @@ const NVSSPI25X_HWAttrs nvsSPI25XHWAttrs[1] = { }, }; -#endif /* Board_EXCLUDE_NVS_EXTERNAL_FLASH */ +#endif /* TI_NVS_CONF_NVS_EXTERNAL_ENABLE */ /* NVS Region index 0 and 1 refer to NVS and NVS SPI respectively */ const NVS_Config NVS_config[CC1352P_4_LAUNCHXL_NVSCOUNT] = { -#ifndef Board_EXCLUDE_NVS_INTERNAL_FLASH +#if TI_NVS_CONF_NVS_INTERNAL_ENABLE { .fxnTablePtr = &NVSCC26XX_fxnTable, .object = &nvsCC26xxObjects[0], .hwAttrs = &nvsCC26xxHWAttrs[0], }, #endif -#ifndef Board_EXCLUDE_NVS_EXTERNAL_FLASH +#if TI_NVS_CONF_NVS_EXTERNAL_ENABLE { .fxnTablePtr = &NVSSPI25X_fxnTable, .object = &nvsSPI25XObjects[0], @@ -654,6 +673,8 @@ const NVS_Config NVS_config[CC1352P_4_LAUNCHXL_NVSCOUNT] = { const uint_least8_t NVS_count = CC1352P_4_LAUNCHXL_NVSCOUNT; +#endif /* TI_NVS_CONF_ENABLE */ + /* * =============================== PIN =============================== */ @@ -763,6 +784,12 @@ const RFCC26XX_HWAttrsV2 RFCC26XX_hwAttrs = { #include #include +#if TI_SD_CONF_ENABLE + +#if !(TI_SPI_CONF_SPI0_ENABLE) +#error "SD driver requires SPI0 enabled" +#endif + SDSPI_Object sdspiObjects[CC1352P_4_LAUNCHXL_SDCOUNT]; const SDSPI_HWAttrs sdspiHWAttrs[CC1352P_4_LAUNCHXL_SDCOUNT] = { @@ -782,6 +809,8 @@ const SD_Config SD_config[CC1352P_4_LAUNCHXL_SDCOUNT] = { const uint_least8_t SD_count = CC1352P_4_LAUNCHXL_SDCOUNT; +#endif /* TI_SD_CONF_ENABLE */ + /* * =============================== SPI DMA =============================== */ @@ -790,12 +819,15 @@ const uint_least8_t SD_count = CC1352P_4_LAUNCHXL_SDCOUNT; SPICC26XXDMA_Object spiCC26XXDMAObjects[CC1352P_4_LAUNCHXL_SPICOUNT]; +#if TI_SPI_CONF_ENABLE + /* * NOTE: The SPI instances below can be used by the SD driver to communicate * with a SD card via SPI. The 'defaultTxBufValue' fields below are set to 0xFF * to satisfy the SDSPI driver requirement. */ const SPICC26XXDMA_HWAttrsV1 spiCC26XXDMAHWAttrs[CC1352P_4_LAUNCHXL_SPICOUNT] = { +#if TI_SPI_CONF_SPI0_ENABLE { .baseAddr = SSI0_BASE, .intNum = INT_SSI0_COMB, @@ -811,6 +843,8 @@ const SPICC26XXDMA_HWAttrsV1 spiCC26XXDMAHWAttrs[CC1352P_4_LAUNCHXL_SPICOUNT] = .csnPin = CC1352P_4_LAUNCHXL_SPI0_CSN, .minDmaTransferSize = 10 }, +#endif +#if TI_SPI_CONF_SPI1_ENABLE { .baseAddr = SSI1_BASE, .intNum = INT_SSI1_COMB, @@ -825,35 +859,45 @@ const SPICC26XXDMA_HWAttrsV1 spiCC26XXDMAHWAttrs[CC1352P_4_LAUNCHXL_SPICOUNT] = .clkPin = CC1352P_4_LAUNCHXL_SPI1_CLK, .csnPin = CC1352P_4_LAUNCHXL_SPI1_CSN, .minDmaTransferSize = 10 - } + }, +#endif }; const SPI_Config SPI_config[CC1352P_4_LAUNCHXL_SPICOUNT] = { +#if TI_SPI_CONF_SPI0_ENABLE { .fxnTablePtr = &SPICC26XXDMA_fxnTable, .object = &spiCC26XXDMAObjects[CC1352P_4_LAUNCHXL_SPI0], .hwAttrs = &spiCC26XXDMAHWAttrs[CC1352P_4_LAUNCHXL_SPI0] }, +#endif +#if TI_SPI_CONF_SPI1_ENABLE { .fxnTablePtr = &SPICC26XXDMA_fxnTable, .object = &spiCC26XXDMAObjects[CC1352P_4_LAUNCHXL_SPI1], .hwAttrs = &spiCC26XXDMAHWAttrs[CC1352P_4_LAUNCHXL_SPI1] }, +#endif }; const uint_least8_t SPI_count = CC1352P_4_LAUNCHXL_SPICOUNT; +#endif /* TI_SPI_CONF_ENABLE */ + /* * =============================== UART =============================== */ #include #include +#if TI_UART_CONF_ENABLE + UARTCC26XX_Object uartCC26XXObjects[CC1352P_4_LAUNCHXL_UARTCOUNT]; uint8_t uartCC26XXRingBuffer[CC1352P_4_LAUNCHXL_UARTCOUNT][32]; const UARTCC26XX_HWAttrsV2 uartCC26XXHWAttrs[CC1352P_4_LAUNCHXL_UARTCOUNT] = { +#if TI_UART_CONF_UART0_ENABLE { .baseAddr = UART0_BASE, .powerMngrId = PowerCC26XX_PERIPH_UART0, @@ -870,6 +914,8 @@ const UARTCC26XX_HWAttrsV2 uartCC26XXHWAttrs[CC1352P_4_LAUNCHXL_UARTCOUNT] = { .rxIntFifoThr = UARTCC26XX_FIFO_THRESHOLD_4_8, .errorFxn = NULL }, +#endif +#if TI_UART_CONF_UART1_ENABLE { .baseAddr = UART1_BASE, .powerMngrId = PowerCC26X2_PERIPH_UART1, @@ -885,24 +931,31 @@ const UARTCC26XX_HWAttrsV2 uartCC26XXHWAttrs[CC1352P_4_LAUNCHXL_UARTCOUNT] = { .txIntFifoThr = UARTCC26XX_FIFO_THRESHOLD_1_8, .rxIntFifoThr = UARTCC26XX_FIFO_THRESHOLD_4_8, .errorFxn = NULL - } + }, +#endif }; const UART_Config UART_config[CC1352P_4_LAUNCHXL_UARTCOUNT] = { +#if TI_UART_CONF_UART0_ENABLE { .fxnTablePtr = &UARTCC26XX_fxnTable, .object = &uartCC26XXObjects[CC1352P_4_LAUNCHXL_UART0], .hwAttrs = &uartCC26XXHWAttrs[CC1352P_4_LAUNCHXL_UART0] }, +#endif +#if TI_UART_CONF_UART1_ENABLE { .fxnTablePtr = &UARTCC26XX_fxnTable, .object = &uartCC26XXObjects[CC1352P_4_LAUNCHXL_UART1], .hwAttrs = &uartCC26XXHWAttrs[CC1352P_4_LAUNCHXL_UART1] }, +#endif }; const uint_least8_t UART_count = CC1352P_4_LAUNCHXL_UARTCOUNT; +#endif /* TI_UART_CONF_ENABLE */ + /* * =============================== UDMA =============================== */ diff --git a/arch/platform/simplelink/cc13xx-cc26xx/launchpad/cc1352p-4/CC1352P_4_LAUNCHXL.h b/arch/platform/simplelink/cc13xx-cc26xx/launchpad/cc1352p-4/CC1352P_4_LAUNCHXL.h index bd8bc2594..bee9657ea 100644 --- a/arch/platform/simplelink/cc13xx-cc26xx/launchpad/cc1352p-4/CC1352P_4_LAUNCHXL.h +++ b/arch/platform/simplelink/cc13xx-cc26xx/launchpad/cc1352p-4/CC1352P_4_LAUNCHXL.h @@ -49,6 +49,8 @@ extern "C" { #endif +#include "contiki-conf.h" + /* Includes */ #include #include @@ -197,8 +199,6 @@ typedef enum CC1352P_4_LAUNCHXL_ADCBuf0ChannelName { CC1352P_4_LAUNCHXL_ADCBUF0CHANNEL2, CC1352P_4_LAUNCHXL_ADCBUF0CHANNEL3, CC1352P_4_LAUNCHXL_ADCBUF0CHANNEL4, - CC1352P_4_LAUNCHXL_ADCBUF0CHANNEL5, - CC1352P_4_LAUNCHXL_ADCBUF0CHANNEL6, CC1352P_4_LAUNCHXL_ADCBUF0CHANNELVDDS, CC1352P_4_LAUNCHXL_ADCBUF0CHANNELDCOUPL, CC1352P_4_LAUNCHXL_ADCBUF0CHANNELVSS, @@ -216,8 +216,6 @@ typedef enum CC1352P_4_LAUNCHXL_ADCName { CC1352P_4_LAUNCHXL_ADC2, CC1352P_4_LAUNCHXL_ADC3, CC1352P_4_LAUNCHXL_ADC4, - CC1352P_4_LAUNCHXL_ADC5, - CC1352P_4_LAUNCHXL_ADC6, CC1352P_4_LAUNCHXL_ADCDCOUPL, CC1352P_4_LAUNCHXL_ADCVSS, CC1352P_4_LAUNCHXL_ADCVDDS, @@ -338,7 +336,9 @@ typedef enum CC1352P_4_LAUNCHXL_GPTimers { * @brief Enum of I2C names */ typedef enum CC1352P_4_LAUNCHXL_I2CName { +#if TI_I2C_CONF_I2C0_ENABLE CC1352P_4_LAUNCHXL_I2C0 = 0, +#endif CC1352P_4_LAUNCHXL_I2CCOUNT } CC1352P_4_LAUNCHXL_I2CName; @@ -348,10 +348,10 @@ typedef enum CC1352P_4_LAUNCHXL_I2CName { * @brief Enum of NVS names */ typedef enum CC1352P_4_LAUNCHXL_NVSName { -#ifndef Board_EXCLUDE_NVS_INTERNAL_FLASH +#if TI_NVS_CONF_NVS_INTERNAL_ENABLE CC1352P_4_LAUNCHXL_NVSCC26XX0 = 0, #endif -#ifndef Board_EXCLUDE_NVS_EXTERNAL_FLASH +#if TI_NVS_CONF_NVS_EXTERNAL_ENABLE CC1352P_4_LAUNCHXL_NVSSPI25X0, #endif @@ -390,8 +390,12 @@ typedef enum CC1352P_4_LAUNCHXL_SDName { * @brief Enum of SPI names */ typedef enum CC1352P_4_LAUNCHXL_SPIName { +#if TI_SPI_CONF_SPI0_ENABLE CC1352P_4_LAUNCHXL_SPI0 = 0, +#endif +#if TI_SPI_CONF_SPI1_ENABLE CC1352P_4_LAUNCHXL_SPI1, +#endif CC1352P_4_LAUNCHXL_SPICOUNT } CC1352P_4_LAUNCHXL_SPIName; @@ -401,8 +405,12 @@ typedef enum CC1352P_4_LAUNCHXL_SPIName { * @brief Enum of UARTs */ typedef enum CC1352P_4_LAUNCHXL_UARTName { +#if TI_UART_CONF_UART0_ENABLE CC1352P_4_LAUNCHXL_UART0 = 0, +#endif +#if TI_UART_CONF_UART1_ENABLE CC1352P_4_LAUNCHXL_UART1, +#endif CC1352P_4_LAUNCHXL_UARTCOUNT } CC1352P_4_LAUNCHXL_UARTName; diff --git a/arch/platform/simplelink/cc13xx-cc26xx/launchpad/cc1352p1/CC1352P1_LAUNCHXL.c b/arch/platform/simplelink/cc13xx-cc26xx/launchpad/cc1352p1/CC1352P1_LAUNCHXL.c index 9a42399a8..8ec044737 100644 --- a/arch/platform/simplelink/cc13xx-cc26xx/launchpad/cc1352p1/CC1352P1_LAUNCHXL.c +++ b/arch/platform/simplelink/cc13xx-cc26xx/launchpad/cc1352p1/CC1352P1_LAUNCHXL.c @@ -340,19 +340,21 @@ const uint_least8_t AESECB_count = CC1352P1_LAUNCHXL_AESECBCOUNT; #include #include +#if TI_DISPLAY_CONF_ENABLE + +#if TI_DISPLAY_CONF_UART_ENABLE + +#if !(TI_UART_CONF_UART0_ENABLE) +#error "Display UART driver requires UART0" +#endif + #ifndef BOARD_DISPLAY_UART_STRBUF_SIZE #define BOARD_DISPLAY_UART_STRBUF_SIZE 128 #endif -#ifndef BOARD_DISPLAY_SHARP_SIZE -#define BOARD_DISPLAY_SHARP_SIZE 96 -#endif +static char uartStringBuf[BOARD_DISPLAY_UART_STRBUF_SIZE]; DisplayUart_Object displayUartObject; -DisplaySharp_Object displaySharpObject; - -static char uartStringBuf[BOARD_DISPLAY_UART_STRBUF_SIZE]; -static uint_least8_t sharpDisplayBuf[BOARD_DISPLAY_SHARP_SIZE * BOARD_DISPLAY_SHARP_SIZE / 8]; const DisplayUart_HWAttrs displayUartHWAttrs = { .uartIdx = CC1352P1_LAUNCHXL_UART0, @@ -362,6 +364,22 @@ const DisplayUart_HWAttrs displayUartHWAttrs = { .strBufLen = BOARD_DISPLAY_UART_STRBUF_SIZE, }; +#endif /* TI_DISPLAY_CONF_UART_ENABLE */ + +#if TI_DISPLAY_CONF_LCD_ENABLE + +#if !(TI_SPI_CONF_SPI0_ENABLE) +#error "Display LCD driver requires SPI0" +#endif + +#ifndef BOARD_DISPLAY_SHARP_SIZE +#define BOARD_DISPLAY_SHARP_SIZE 96 +#endif + +static uint_least8_t sharpDisplayBuf[BOARD_DISPLAY_SHARP_SIZE * BOARD_DISPLAY_SHARP_SIZE / 8]; + +DisplaySharp_Object displaySharpObject; + const DisplaySharp_HWAttrsV1 displaySharpHWattrs = { .spiIndex = CC1352P1_LAUNCHXL_SPI0, .csPin = CC1352P1_LAUNCHXL_GPIO_LCD_CS, @@ -372,27 +390,18 @@ const DisplaySharp_HWAttrsV1 displaySharpHWattrs = { .displayBuf = sharpDisplayBuf, }; -#ifndef BOARD_DISPLAY_USE_UART -#define BOARD_DISPLAY_USE_UART 1 -#endif -#ifndef BOARD_DISPLAY_USE_UART_ANSI -#define BOARD_DISPLAY_USE_UART_ANSI 0 -#endif -#ifndef BOARD_DISPLAY_USE_LCD -#define BOARD_DISPLAY_USE_LCD 0 -#endif +#endif /* TI_DISPLAY_CONF_LCD_ENABLE */ /* * This #if/#else is needed to workaround a problem with the * IAR compiler. The IAR compiler doesn't like the empty array * initialization. (IAR Error[Pe1345]) */ -#if (BOARD_DISPLAY_USE_UART || BOARD_DISPLAY_USE_LCD) const Display_Config Display_config[] = { -#if (BOARD_DISPLAY_USE_UART) +#if TI_DISPLAY_CONF_UART_ENABLE { -# if (BOARD_DISPLAY_USE_UART_ANSI) +# if TI_DISPLAY_CONF_USE_UART_ANSI .fxnTablePtr = &DisplayUartAnsi_fxnTable, # else /* Default to minimal UART with no cursor placement */ .fxnTablePtr = &DisplayUartMin_fxnTable, @@ -401,7 +410,7 @@ const Display_Config Display_config[] = { .hwAttrs = &displayUartHWAttrs, }, #endif -#if (BOARD_DISPLAY_USE_LCD) +#if TI_DISPLAY_CONF_LCD_ENABLE { .fxnTablePtr = &DisplaySharp_fxnTable, .object = &displaySharpObject, @@ -417,7 +426,7 @@ const uint_least8_t Display_count = sizeof(Display_config) / sizeof(Display_Conf const Display_Config *Display_config = NULL; const uint_least8_t Display_count = 0; -#endif /* (BOARD_DISPLAY_USE_UART || BOARD_DISPLAY_USE_LCD) */ +#endif /* TI_DISPLAY_CONF_ENABLE */ /* * =============================== GPIO =============================== @@ -519,9 +528,12 @@ const GPTimerCC26XX_Config GPTimerCC26XX_config[CC1352P1_LAUNCHXL_GPTIMERPARTSCO #include #include +#if TI_I2C_CONF_ENABLE + I2CCC26XX_Object i2cCC26xxObjects[CC1352P1_LAUNCHXL_I2CCOUNT]; const I2CCC26XX_HWAttrsV1 i2cCC26xxHWAttrs[CC1352P1_LAUNCHXL_I2CCOUNT] = { +#if TI_I2C_CONF_I2C0_ENABLE { .baseAddr = I2C0_BASE, .powerMngrId = PowerCC26XX_PERIPH_I2C0, @@ -530,19 +542,24 @@ const I2CCC26XX_HWAttrsV1 i2cCC26xxHWAttrs[CC1352P1_LAUNCHXL_I2CCOUNT] = { .swiPriority = 0, .sdaPin = CC1352P1_LAUNCHXL_I2C0_SDA0, .sclPin = CC1352P1_LAUNCHXL_I2C0_SCL0, - } + }, +#endif }; const I2C_Config I2C_config[CC1352P1_LAUNCHXL_I2CCOUNT] = { +#if TI_I2C_CONF_I2C0_ENABLE { .fxnTablePtr = &I2CCC26XX_fxnTable, .object = &i2cCC26xxObjects[CC1352P1_LAUNCHXL_I2C0], .hwAttrs = &i2cCC26xxHWAttrs[CC1352P1_LAUNCHXL_I2C0] }, +#endif }; const uint_least8_t I2C_count = CC1352P1_LAUNCHXL_I2CCOUNT; +#endif /* TI_I2C_CONF_ENABLE */ + /* * =============================== NVS =============================== */ @@ -554,7 +571,9 @@ const uint_least8_t I2C_count = CC1352P1_LAUNCHXL_I2CCOUNT; #define SECTORSIZE 0x2000 #define REGIONSIZE (SECTORSIZE * 4) -#ifndef Board_EXCLUDE_NVS_INTERNAL_FLASH +#if TI_NVS_CONF_ENABLE + +#if TI_NVS_CONF_NVS_INTERNAL_ENABLE /* * Reserve flash sectors for NVS driver use by placing an uninitialized byte @@ -604,9 +623,9 @@ const NVSCC26XX_HWAttrs nvsCC26xxHWAttrs[1] = { }, }; -#endif /* Board_EXCLUDE_NVS_INTERNAL_FLASH */ +#endif /* TI_NVS_CONF_NVS_INTERNAL_ENABLE */ -#ifndef Board_EXCLUDE_NVS_EXTERNAL_FLASH +#if TI_NVS_CONF_NVS_EXTERNAL_ENABLE #define SPISECTORSIZE 0x1000 #define SPIREGIONSIZE (SPISECTORSIZE * 32) @@ -632,18 +651,18 @@ const NVSSPI25X_HWAttrs nvsSPI25XHWAttrs[1] = { }, }; -#endif /* Board_EXCLUDE_NVS_EXTERNAL_FLASH */ +#endif /* TI_NVS_CONF_NVS_EXTERNAL_ENABLE */ /* NVS Region index 0 and 1 refer to NVS and NVS SPI respectively */ const NVS_Config NVS_config[CC1352P1_LAUNCHXL_NVSCOUNT] = { -#ifndef Board_EXCLUDE_NVS_INTERNAL_FLASH +#if TI_NVS_CONF_NVS_INTERNAL_ENABLE { .fxnTablePtr = &NVSCC26XX_fxnTable, .object = &nvsCC26xxObjects[0], .hwAttrs = &nvsCC26xxHWAttrs[0], }, #endif -#ifndef Board_EXCLUDE_NVS_EXTERNAL_FLASH +#if TI_NVS_CONF_NVS_EXTERNAL_ENABLE { .fxnTablePtr = &NVSSPI25X_fxnTable, .object = &nvsSPI25XObjects[0], @@ -654,6 +673,8 @@ const NVS_Config NVS_config[CC1352P1_LAUNCHXL_NVSCOUNT] = { const uint_least8_t NVS_count = CC1352P1_LAUNCHXL_NVSCOUNT; +#endif /* TI_NVS_CONF_ENABLE */ + /* * =============================== PIN =============================== */ @@ -763,6 +784,12 @@ const RFCC26XX_HWAttrsV2 RFCC26XX_hwAttrs = { #include #include +#if TI_SD_CONF_ENABLE + +#if !(TI_SPI_CONF_SPI0_ENABLE) +#error "SD driver requires SPI0 enabled" +#endif + SDSPI_Object sdspiObjects[CC1352P1_LAUNCHXL_SDCOUNT]; const SDSPI_HWAttrs sdspiHWAttrs[CC1352P1_LAUNCHXL_SDCOUNT] = { @@ -782,12 +809,16 @@ const SD_Config SD_config[CC1352P1_LAUNCHXL_SDCOUNT] = { const uint_least8_t SD_count = CC1352P1_LAUNCHXL_SDCOUNT; +#endif /* TI_SD_CONF_ENABLE */ + /* * =============================== SPI DMA =============================== */ #include #include +#if TI_SPI_CONF_ENABLE + SPICC26XXDMA_Object spiCC26XXDMAObjects[CC1352P1_LAUNCHXL_SPICOUNT]; /* @@ -796,6 +827,7 @@ SPICC26XXDMA_Object spiCC26XXDMAObjects[CC1352P1_LAUNCHXL_SPICOUNT]; * to satisfy the SDSPI driver requirement. */ const SPICC26XXDMA_HWAttrsV1 spiCC26XXDMAHWAttrs[CC1352P1_LAUNCHXL_SPICOUNT] = { +#if TI_SPI_CONF_SPI0_ENABLE { .baseAddr = SSI0_BASE, .intNum = INT_SSI0_COMB, @@ -811,6 +843,8 @@ const SPICC26XXDMA_HWAttrsV1 spiCC26XXDMAHWAttrs[CC1352P1_LAUNCHXL_SPICOUNT] = { .csnPin = CC1352P1_LAUNCHXL_SPI0_CSN, .minDmaTransferSize = 10 }, +#endif +#if TI_SPI_CONF_SPI1_ENABLE { .baseAddr = SSI1_BASE, .intNum = INT_SSI1_COMB, @@ -825,35 +859,45 @@ const SPICC26XXDMA_HWAttrsV1 spiCC26XXDMAHWAttrs[CC1352P1_LAUNCHXL_SPICOUNT] = { .clkPin = CC1352P1_LAUNCHXL_SPI1_CLK, .csnPin = CC1352P1_LAUNCHXL_SPI1_CSN, .minDmaTransferSize = 10 - } + }, +#endif }; const SPI_Config SPI_config[CC1352P1_LAUNCHXL_SPICOUNT] = { +#if TI_SPI_CONF_SPI0_ENABLE { .fxnTablePtr = &SPICC26XXDMA_fxnTable, .object = &spiCC26XXDMAObjects[CC1352P1_LAUNCHXL_SPI0], .hwAttrs = &spiCC26XXDMAHWAttrs[CC1352P1_LAUNCHXL_SPI0] }, +#endif +#if TI_SPI_CONF_SPI1_ENABLE { .fxnTablePtr = &SPICC26XXDMA_fxnTable, .object = &spiCC26XXDMAObjects[CC1352P1_LAUNCHXL_SPI1], .hwAttrs = &spiCC26XXDMAHWAttrs[CC1352P1_LAUNCHXL_SPI1] }, +#endif }; const uint_least8_t SPI_count = CC1352P1_LAUNCHXL_SPICOUNT; +#endif /* TI_SPI_CONF_ENABLE */ + /* * =============================== UART =============================== */ #include #include +#if TI_UART_CONF_ENABLE + UARTCC26XX_Object uartCC26XXObjects[CC1352P1_LAUNCHXL_UARTCOUNT]; uint8_t uartCC26XXRingBuffer[CC1352P1_LAUNCHXL_UARTCOUNT][32]; const UARTCC26XX_HWAttrsV2 uartCC26XXHWAttrs[CC1352P1_LAUNCHXL_UARTCOUNT] = { +#if TI_UART_CONF_UART0_ENABLE { .baseAddr = UART0_BASE, .powerMngrId = PowerCC26XX_PERIPH_UART0, @@ -870,6 +914,8 @@ const UARTCC26XX_HWAttrsV2 uartCC26XXHWAttrs[CC1352P1_LAUNCHXL_UARTCOUNT] = { .rxIntFifoThr = UARTCC26XX_FIFO_THRESHOLD_4_8, .errorFxn = NULL }, +#endif +#if TI_UART_CONF_UART1_ENABLE { .baseAddr = UART1_BASE, .powerMngrId = PowerCC26X2_PERIPH_UART1, @@ -885,24 +931,31 @@ const UARTCC26XX_HWAttrsV2 uartCC26XXHWAttrs[CC1352P1_LAUNCHXL_UARTCOUNT] = { .txIntFifoThr = UARTCC26XX_FIFO_THRESHOLD_1_8, .rxIntFifoThr = UARTCC26XX_FIFO_THRESHOLD_4_8, .errorFxn = NULL - } + }, +#endif }; const UART_Config UART_config[CC1352P1_LAUNCHXL_UARTCOUNT] = { +#if TI_UART_CONF_UART0_ENABLE { .fxnTablePtr = &UARTCC26XX_fxnTable, .object = &uartCC26XXObjects[CC1352P1_LAUNCHXL_UART0], .hwAttrs = &uartCC26XXHWAttrs[CC1352P1_LAUNCHXL_UART0] }, +#endif +#if TI_UART_CONF_UART1_ENABLE { .fxnTablePtr = &UARTCC26XX_fxnTable, .object = &uartCC26XXObjects[CC1352P1_LAUNCHXL_UART1], .hwAttrs = &uartCC26XXHWAttrs[CC1352P1_LAUNCHXL_UART1] }, +#endif }; const uint_least8_t UART_count = CC1352P1_LAUNCHXL_UARTCOUNT; +#endif /* TI_UART_CONF_ENABLE */ + /* * =============================== UDMA =============================== */ diff --git a/arch/platform/simplelink/cc13xx-cc26xx/launchpad/cc1352p1/CC1352P1_LAUNCHXL.h b/arch/platform/simplelink/cc13xx-cc26xx/launchpad/cc1352p1/CC1352P1_LAUNCHXL.h index de1c315dd..af3478bac 100644 --- a/arch/platform/simplelink/cc13xx-cc26xx/launchpad/cc1352p1/CC1352P1_LAUNCHXL.h +++ b/arch/platform/simplelink/cc13xx-cc26xx/launchpad/cc1352p1/CC1352P1_LAUNCHXL.h @@ -49,6 +49,8 @@ extern "C" { #endif +#include "contiki-conf.h" + /* Includes */ #include #include @@ -338,7 +340,9 @@ typedef enum CC1352P1_LAUNCHXL_GPTimers { * @brief Enum of I2C names */ typedef enum CC1352P1_LAUNCHXL_I2CName { +#if TI_I2C_CONF_I2C0_ENABLE CC1352P1_LAUNCHXL_I2C0 = 0, +#endif CC1352P1_LAUNCHXL_I2CCOUNT } CC1352P1_LAUNCHXL_I2CName; @@ -348,10 +352,10 @@ typedef enum CC1352P1_LAUNCHXL_I2CName { * @brief Enum of NVS names */ typedef enum CC1352P1_LAUNCHXL_NVSName { -#ifndef Board_EXCLUDE_NVS_INTERNAL_FLASH +#if TI_NVS_CONF_NVS_INTERNAL_ENABLE CC1352P1_LAUNCHXL_NVSCC26XX0 = 0, #endif -#ifndef Board_EXCLUDE_NVS_EXTERNAL_FLASH +#if TI_NVS_CONF_NVS_EXTERNAL_ENABLE CC1352P1_LAUNCHXL_NVSSPI25X0, #endif @@ -390,8 +394,12 @@ typedef enum CC1352P1_LAUNCHXL_SDName { * @brief Enum of SPI names */ typedef enum CC1352P1_LAUNCHXL_SPIName { +#if TI_SPI_CONF_SPI0_ENABLE CC1352P1_LAUNCHXL_SPI0 = 0, +#endif +#if TI_SPI_CONF_SPI1_ENABLE CC1352P1_LAUNCHXL_SPI1, +#endif CC1352P1_LAUNCHXL_SPICOUNT } CC1352P1_LAUNCHXL_SPIName; @@ -401,8 +409,12 @@ typedef enum CC1352P1_LAUNCHXL_SPIName { * @brief Enum of UARTs */ typedef enum CC1352P1_LAUNCHXL_UARTName { +#if TI_UART_CONF_UART0_ENABLE CC1352P1_LAUNCHXL_UART0 = 0, +#endif +#if TI_UART_CONF_UART1_ENABLE CC1352P1_LAUNCHXL_UART1, +#endif CC1352P1_LAUNCHXL_UARTCOUNT } CC1352P1_LAUNCHXL_UARTName; diff --git a/arch/platform/simplelink/cc13xx-cc26xx/launchpad/cc1352r1/CC1352R1_LAUNCHXL.c b/arch/platform/simplelink/cc13xx-cc26xx/launchpad/cc1352r1/CC1352R1_LAUNCHXL.c index b460191bc..5ed8d3167 100644 --- a/arch/platform/simplelink/cc13xx-cc26xx/launchpad/cc1352r1/CC1352R1_LAUNCHXL.c +++ b/arch/platform/simplelink/cc13xx-cc26xx/launchpad/cc1352r1/CC1352R1_LAUNCHXL.c @@ -364,19 +364,21 @@ const uint_least8_t AESECB_count = CC1352R1_LAUNCHXL_AESECBCOUNT; #include #include +#if TI_DISPLAY_CONF_ENABLE + +#if TI_DISPLAY_CONF_UART_ENABLE + +#if !(TI_UART_CONF_UART0_ENABLE) +#error "Display UART driver requires UART0" +#endif + #ifndef BOARD_DISPLAY_UART_STRBUF_SIZE #define BOARD_DISPLAY_UART_STRBUF_SIZE 128 #endif -#ifndef BOARD_DISPLAY_SHARP_SIZE -#define BOARD_DISPLAY_SHARP_SIZE 96 -#endif +static char uartStringBuf[BOARD_DISPLAY_UART_STRBUF_SIZE]; DisplayUart_Object displayUartObject; -DisplaySharp_Object displaySharpObject; - -static char uartStringBuf[BOARD_DISPLAY_UART_STRBUF_SIZE]; -static uint_least8_t sharpDisplayBuf[BOARD_DISPLAY_SHARP_SIZE * BOARD_DISPLAY_SHARP_SIZE / 8]; const DisplayUart_HWAttrs displayUartHWAttrs = { .uartIdx = CC1352R1_LAUNCHXL_UART0, @@ -386,6 +388,22 @@ const DisplayUart_HWAttrs displayUartHWAttrs = { .strBufLen = BOARD_DISPLAY_UART_STRBUF_SIZE, }; +#endif /* TI_DISPLAY_CONF_UART_ENABLE */ + +#if TI_DISPLAY_CONF_LCD_ENABLE + +#if !(TI_SPI_CONF_SPI0_ENABLE) +#error "Display LCD driver requires SPI0" +#endif + +#ifndef BOARD_DISPLAY_SHARP_SIZE +#define BOARD_DISPLAY_SHARP_SIZE 96 +#endif + +static uint_least8_t sharpDisplayBuf[BOARD_DISPLAY_SHARP_SIZE * BOARD_DISPLAY_SHARP_SIZE / 8]; + +DisplaySharp_Object displaySharpObject; + const DisplaySharp_HWAttrsV1 displaySharpHWattrs = { .spiIndex = CC1352R1_LAUNCHXL_SPI0, .csPin = CC1352R1_LAUNCHXL_GPIO_LCD_CS, @@ -396,27 +414,18 @@ const DisplaySharp_HWAttrsV1 displaySharpHWattrs = { .displayBuf = sharpDisplayBuf, }; -#ifndef BOARD_DISPLAY_USE_UART -#define BOARD_DISPLAY_USE_UART 1 -#endif -#ifndef BOARD_DISPLAY_USE_UART_ANSI -#define BOARD_DISPLAY_USE_UART_ANSI 0 -#endif -#ifndef BOARD_DISPLAY_USE_LCD -#define BOARD_DISPLAY_USE_LCD 0 -#endif +#endif /* TI_DISPLAY_CONF_LCD_ENABLE */ /* * This #if/#else is needed to workaround a problem with the * IAR compiler. The IAR compiler doesn't like the empty array * initialization. (IAR Error[Pe1345]) */ -#if (BOARD_DISPLAY_USE_UART || BOARD_DISPLAY_USE_LCD) const Display_Config Display_config[] = { -#if (BOARD_DISPLAY_USE_UART) +#if TI_DISPLAY_CONF_UART_ENABLE { -# if (BOARD_DISPLAY_USE_UART_ANSI) +# if TI_DISPLAY_CONF_USE_UART_ANSI .fxnTablePtr = &DisplayUartAnsi_fxnTable, # else /* Default to minimal UART with no cursor placement */ .fxnTablePtr = &DisplayUartMin_fxnTable, @@ -425,7 +434,7 @@ const Display_Config Display_config[] = { .hwAttrs = &displayUartHWAttrs, }, #endif -#if (BOARD_DISPLAY_USE_LCD) +#if TI_DISPLAY_CONF_LCD_ENABLE { .fxnTablePtr = &DisplaySharp_fxnTable, .object = &displaySharpObject, @@ -441,7 +450,7 @@ const uint_least8_t Display_count = sizeof(Display_config) / sizeof(Display_Conf const Display_Config *Display_config = NULL; const uint_least8_t Display_count = 0; -#endif /* (BOARD_DISPLAY_USE_UART || BOARD_DISPLAY_USE_LCD) */ +#endif /* TI_DISPLAY_CONF_ENABLE */ /* * =============================== GPIO =============================== @@ -545,6 +554,7 @@ const GPTimerCC26XX_Config GPTimerCC26XX_config[CC1352R1_LAUNCHXL_GPTIMERPARTSCO I2CCC26XX_Object i2cCC26xxObjects[CC1352R1_LAUNCHXL_I2CCOUNT]; const I2CCC26XX_HWAttrsV1 i2cCC26xxHWAttrs[CC1352R1_LAUNCHXL_I2CCOUNT] = { +#if TI_I2C_CONF_I2C0_ENABLE { .baseAddr = I2C0_BASE, .powerMngrId = PowerCC26XX_PERIPH_I2C0, @@ -553,15 +563,18 @@ const I2CCC26XX_HWAttrsV1 i2cCC26xxHWAttrs[CC1352R1_LAUNCHXL_I2CCOUNT] = { .swiPriority = 0, .sdaPin = CC1352R1_LAUNCHXL_I2C0_SDA0, .sclPin = CC1352R1_LAUNCHXL_I2C0_SCL0, - } + }, +#endif }; const I2C_Config I2C_config[CC1352R1_LAUNCHXL_I2CCOUNT] = { +#if TI_I2C_CONF_I2C0_ENABLE { .fxnTablePtr = &I2CCC26XX_fxnTable, .object = &i2cCC26xxObjects[CC1352R1_LAUNCHXL_I2C0], .hwAttrs = &i2cCC26xxHWAttrs[CC1352R1_LAUNCHXL_I2C0] }, +#endif }; const uint_least8_t I2C_count = CC1352R1_LAUNCHXL_I2CCOUNT; @@ -790,6 +803,12 @@ const RFCC26XX_HWAttrsV2 RFCC26XX_hwAttrs = { #include #include +#if TI_SD_CONF_ENABLE + +#if !(TI_SPI_CONF_SPI0_ENABLE) +#error "SD driver requires SPI0 enabled" +#endif + SDSPI_Object sdspiObjects[CC1352R1_LAUNCHXL_SDCOUNT]; const SDSPI_HWAttrs sdspiHWAttrs[CC1352R1_LAUNCHXL_SDCOUNT] = { @@ -809,6 +828,8 @@ const SD_Config SD_config[CC1352R1_LAUNCHXL_SDCOUNT] = { const uint_least8_t SD_count = CC1352R1_LAUNCHXL_SDCOUNT; +#endif /* TI_SD_CONF_ENABLE */ + /* * =============================== SPI DMA =============================== */ diff --git a/arch/platform/simplelink/cc13xx-cc26xx/launchpad/cc1352r1/CC1352R1_LAUNCHXL.h b/arch/platform/simplelink/cc13xx-cc26xx/launchpad/cc1352r1/CC1352R1_LAUNCHXL.h index 0f165943b..3dcd63af5 100644 --- a/arch/platform/simplelink/cc13xx-cc26xx/launchpad/cc1352r1/CC1352R1_LAUNCHXL.h +++ b/arch/platform/simplelink/cc13xx-cc26xx/launchpad/cc1352r1/CC1352R1_LAUNCHXL.h @@ -49,6 +49,8 @@ extern "C" { #endif +#include "contiki-conf.h" + /* Includes */ #include #include @@ -330,7 +332,9 @@ typedef enum CC1352R1_LAUNCHXL_GPTimers { * @brief Enum of I2C names */ typedef enum CC1352R1_LAUNCHXL_I2CName { +#if TI_I2C_CONF_I2C0_ENABLE CC1352R1_LAUNCHXL_I2C0 = 0, +#endif CC1352R1_LAUNCHXL_I2CCOUNT } CC1352R1_LAUNCHXL_I2CName; @@ -340,10 +344,10 @@ typedef enum CC1352R1_LAUNCHXL_I2CName { * @brief Enum of NVS names */ typedef enum CC1352R1_LAUNCHXL_NVSName { -#ifndef Board_EXCLUDE_NVS_INTERNAL_FLASH +#if TI_NVS_CONF_NVS_INTERNAL_ENABLE CC1352R1_LAUNCHXL_NVSCC26XX0 = 0, #endif -#ifndef Board_EXCLUDE_NVS_EXTERNAL_FLASH +#if TI_NVS_CONF_NVS_EXTERNAL_ENABLE CC1352R1_LAUNCHXL_NVSSPI25X0, #endif @@ -382,8 +386,12 @@ typedef enum CC1352R1_LAUNCHXL_SDName { * @brief Enum of SPI names */ typedef enum CC1352R1_LAUNCHXL_SPIName { +#if TI_SPI_CONF_SPI0_ENABLE CC1352R1_LAUNCHXL_SPI0 = 0, +#endif +#if TI_SPI_CONF_SPI1_ENABLE CC1352R1_LAUNCHXL_SPI1, +#endif CC1352R1_LAUNCHXL_SPICOUNT } CC1352R1_LAUNCHXL_SPIName; @@ -393,8 +401,12 @@ typedef enum CC1352R1_LAUNCHXL_SPIName { * @brief Enum of UARTs */ typedef enum CC1352R1_LAUNCHXL_UARTName { +#if TI_UART_CONF_UART0_ENABLE CC1352R1_LAUNCHXL_UART0 = 0, +#endif +#if TI_UART_CONF_UART1_ENABLE CC1352R1_LAUNCHXL_UART1, +#endif CC1352R1_LAUNCHXL_UARTCOUNT } CC1352R1_LAUNCHXL_UARTName; diff --git a/arch/platform/simplelink/cc13xx-cc26xx/launchpad/cc2650/CC2650_LAUNCHXL.c b/arch/platform/simplelink/cc13xx-cc26xx/launchpad/cc2650/CC2650_LAUNCHXL.c index 7f2f0ef8b..b6c799ad2 100644 --- a/arch/platform/simplelink/cc13xx-cc26xx/launchpad/cc2650/CC2650_LAUNCHXL.c +++ b/arch/platform/simplelink/cc13xx-cc26xx/launchpad/cc2650/CC2650_LAUNCHXL.c @@ -252,19 +252,21 @@ const CryptoCC26XX_Config CryptoCC26XX_config[CC2650_LAUNCHXL_CRYPTOCOUNT] = { #include #include +#if TI_DISPLAY_CONF_ENABLE + +#if TI_DISPLAY_CONF_UART_ENABLE + +#if !(TI_UART_CONF_UART0_ENABLE) +#error "Display UART driver requires UART0" +#endif + #ifndef BOARD_DISPLAY_UART_STRBUF_SIZE #define BOARD_DISPLAY_UART_STRBUF_SIZE 128 #endif -#ifndef BOARD_DISPLAY_SHARP_SIZE -#define BOARD_DISPLAY_SHARP_SIZE 96 -#endif +static char uartStringBuf[BOARD_DISPLAY_UART_STRBUF_SIZE]; DisplayUart_Object displayUartObject; -DisplaySharp_Object displaySharpObject; - -static char uartStringBuf[BOARD_DISPLAY_UART_STRBUF_SIZE]; -static uint_least8_t sharpDisplayBuf[BOARD_DISPLAY_SHARP_SIZE * BOARD_DISPLAY_SHARP_SIZE / 8]; const DisplayUart_HWAttrs displayUartHWAttrs = { .uartIdx = CC2650_LAUNCHXL_UART0, @@ -274,6 +276,22 @@ const DisplayUart_HWAttrs displayUartHWAttrs = { .strBufLen = BOARD_DISPLAY_UART_STRBUF_SIZE, }; +#endif /* TI_DISPLAY_CONF_UART_ENABLE */ + +#if TI_DISPLAY_CONF_LCD_ENABLE + +#if !(TI_SPI_CONF_SPI0_ENABLE) +#error "Display LCD driver requires SPI0" +#endif + +#ifndef BOARD_DISPLAY_SHARP_SIZE +#define BOARD_DISPLAY_SHARP_SIZE 96 +#endif + +static uint_least8_t sharpDisplayBuf[BOARD_DISPLAY_SHARP_SIZE * BOARD_DISPLAY_SHARP_SIZE / 8]; + +DisplaySharp_Object displaySharpObject; + const DisplaySharp_HWAttrsV1 displaySharpHWattrs = { .spiIndex = CC2650_LAUNCHXL_SPI0, .csPin = CC2650_LAUNCHXL_GPIO_LCD_CS, @@ -284,27 +302,18 @@ const DisplaySharp_HWAttrsV1 displaySharpHWattrs = { .displayBuf = sharpDisplayBuf, }; -#ifndef BOARD_DISPLAY_USE_UART -#define BOARD_DISPLAY_USE_UART 1 -#endif -#ifndef BOARD_DISPLAY_USE_UART_ANSI -#define BOARD_DISPLAY_USE_UART_ANSI 0 -#endif -#ifndef BOARD_DISPLAY_USE_LCD -#define BOARD_DISPLAY_USE_LCD 0 -#endif +#endif /* TI_DISPLAY_CONF_LCD_ENABLE */ /* * This #if/#else is needed to workaround a problem with the * IAR compiler. The IAR compiler doesn't like the empty array * initialization. (IAR Error[Pe1345]) */ -#if (BOARD_DISPLAY_USE_UART || BOARD_DISPLAY_USE_LCD) const Display_Config Display_config[] = { -#if (BOARD_DISPLAY_USE_UART) +#if TI_DISPLAY_CONF_UART_ENABLE { -# if (BOARD_DISPLAY_USE_UART_ANSI) +# if TI_DISPLAY_CONF_USE_UART_ANSI .fxnTablePtr = &DisplayUartAnsi_fxnTable, # else /* Default to minimal UART with no cursor placement */ .fxnTablePtr = &DisplayUartMin_fxnTable, @@ -313,7 +322,7 @@ const Display_Config Display_config[] = { .hwAttrs = &displayUartHWAttrs, }, #endif -#if (BOARD_DISPLAY_USE_LCD) +#if TI_DISPLAY_CONF_LCD_ENABLE { .fxnTablePtr = &DisplaySharp_fxnTable, .object = &displaySharpObject, @@ -329,7 +338,7 @@ const uint_least8_t Display_count = sizeof(Display_config) / sizeof(Display_Conf const Display_Config *Display_config = NULL; const uint_least8_t Display_count = 0; -#endif /* (BOARD_DISPLAY_USE_UART || BOARD_DISPLAY_USE_LCD) */ +#endif /* TI_DISPLAY_CONF_ENABLE */ /* * =============================== GPIO =============================== @@ -428,9 +437,12 @@ const GPTimerCC26XX_Config GPTimerCC26XX_config[CC2650_LAUNCHXL_GPTIMERPARTSCOUN #include #include +#if TI_I2C_CONF_ENABLE + I2CCC26XX_Object i2cCC26xxObjects[CC2650_LAUNCHXL_I2CCOUNT]; const I2CCC26XX_HWAttrsV1 i2cCC26xxHWAttrs[CC2650_LAUNCHXL_I2CCOUNT] = { +#if TI_I2C_CONF_I2C0_ENABLE { .baseAddr = I2C0_BASE, .powerMngrId = PowerCC26XX_PERIPH_I2C0, @@ -439,19 +451,24 @@ const I2CCC26XX_HWAttrsV1 i2cCC26xxHWAttrs[CC2650_LAUNCHXL_I2CCOUNT] = { .swiPriority = 0, .sdaPin = CC2650_LAUNCHXL_I2C0_SDA0, .sclPin = CC2650_LAUNCHXL_I2C0_SCL0, - } + }, +#endif }; const I2C_Config I2C_config[CC2650_LAUNCHXL_I2CCOUNT] = { +#if TI_I2C_CONF_I2C0_ENABLE { .fxnTablePtr = &I2CCC26XX_fxnTable, .object = &i2cCC26xxObjects[CC2650_LAUNCHXL_I2C0], .hwAttrs = &i2cCC26xxHWAttrs[CC2650_LAUNCHXL_I2C0] }, +#endif }; const uint_least8_t I2C_count = CC2650_LAUNCHXL_I2CCOUNT; +#endif /* TI_I2C_CONF_ENABLE */ + /* * =============================== NVS =============================== */ @@ -463,7 +480,9 @@ const uint_least8_t I2C_count = CC2650_LAUNCHXL_I2CCOUNT; #define SECTORSIZE 0x1000 #define REGIONSIZE (SECTORSIZE * 4) -#ifndef Board_EXCLUDE_NVS_INTERNAL_FLASH +#if TI_NVS_CONF_ENABLE + +#if TI_NVS_CONF_NVS_INTERNAL_ENABLE /* * Reserve flash sectors for NVS driver use by placing an uninitialized byte @@ -513,9 +532,9 @@ const NVSCC26XX_HWAttrs nvsCC26xxHWAttrs[1] = { }, }; -#endif /* Board_EXCLUDE_NVS_INTERNAL_FLASH */ +#endif /* TI_NVS_CONF_NVS_INTERNAL_ENABLE */ -#ifndef Board_EXCLUDE_NVS_EXTERNAL_FLASH +#if TI_NVS_CONF_NVS_EXTERNAL_ENABLE #define SPISECTORSIZE 0x1000 #define SPIREGIONSIZE (SPISECTORSIZE * 32) @@ -545,14 +564,14 @@ const NVSSPI25X_HWAttrs nvsSPI25XHWAttrs[1] = { /* NVS Region index 0 and 1 refer to NVS and NVS SPI respectively */ const NVS_Config NVS_config[CC2650_LAUNCHXL_NVSCOUNT] = { -#ifndef Board_EXCLUDE_NVS_INTERNAL_FLASH +#if TI_NVS_CONF_NVS_INTERNAL_ENABLE { .fxnTablePtr = &NVSCC26XX_fxnTable, .object = &nvsCC26xxObjects[0], .hwAttrs = &nvsCC26xxHWAttrs[0], }, #endif -#ifndef Board_EXCLUDE_NVS_EXTERNAL_FLASH +#if TI_NVS_CONF_NVS_EXTERNAL_ENABLE { .fxnTablePtr = &NVSSPI25X_fxnTable, .object = &nvsSPI25XObjects[0], @@ -563,6 +582,8 @@ const NVS_Config NVS_config[CC2650_LAUNCHXL_NVSCOUNT] = { const uint_least8_t NVS_count = CC2650_LAUNCHXL_NVSCOUNT; +#endif /* TI_NVS_CONF_ENABLE */ + /* * =============================== PIN =============================== */ @@ -657,6 +678,12 @@ const RFCC26XX_HWAttrsV2 RFCC26XX_hwAttrs = { #include #include +#if TI_SD_CONF_ENABLE + +#if !(TI_SPI_CONF_SPI0_ENABLE) +#error "SD driver requires SPI0 enabled" +#endif + SDSPI_Object sdspiObjects[CC2650_LAUNCHXL_SDCOUNT]; const SDSPI_HWAttrs sdspiHWAttrs[CC2650_LAUNCHXL_SDCOUNT] = { @@ -676,12 +703,16 @@ const SD_Config SD_config[CC2650_LAUNCHXL_SDCOUNT] = { const uint_least8_t SD_count = CC2650_LAUNCHXL_SDCOUNT; +#endif /* TI_SD_CONF_ENABLE */ + /* * =============================== SPI DMA =============================== */ #include #include +#if TI_SPI_CONF_ENABLE + SPICC26XXDMA_Object spiCC26XXDMAObjects[CC2650_LAUNCHXL_SPICOUNT]; /* @@ -690,6 +721,7 @@ SPICC26XXDMA_Object spiCC26XXDMAObjects[CC2650_LAUNCHXL_SPICOUNT]; * to satisfy the SDSPI driver requirement. */ const SPICC26XXDMA_HWAttrsV1 spiCC26XXDMAHWAttrs[CC2650_LAUNCHXL_SPICOUNT] = { +#if TI_SPI_CONF_SPI0_ENABLE { .baseAddr = SSI0_BASE, .intNum = INT_SSI0_COMB, @@ -705,6 +737,8 @@ const SPICC26XXDMA_HWAttrsV1 spiCC26XXDMAHWAttrs[CC2650_LAUNCHXL_SPICOUNT] = { .csnPin = CC2650_LAUNCHXL_SPI0_CSN, .minDmaTransferSize = 10 }, +#endif +#if TI_SPI_CONF_SPI1_ENABLE { .baseAddr = SSI1_BASE, .intNum = INT_SSI1_COMB, @@ -719,35 +753,45 @@ const SPICC26XXDMA_HWAttrsV1 spiCC26XXDMAHWAttrs[CC2650_LAUNCHXL_SPICOUNT] = { .clkPin = CC2650_LAUNCHXL_SPI1_CLK, .csnPin = CC2650_LAUNCHXL_SPI1_CSN, .minDmaTransferSize = 10 - } + }, +#endif }; const SPI_Config SPI_config[CC2650_LAUNCHXL_SPICOUNT] = { +#if TI_SPI_CONF_SPI0_ENABLE { .fxnTablePtr = &SPICC26XXDMA_fxnTable, .object = &spiCC26XXDMAObjects[CC2650_LAUNCHXL_SPI0], .hwAttrs = &spiCC26XXDMAHWAttrs[CC2650_LAUNCHXL_SPI0] }, +#endif +#if TI_SPI_CONF_SPI1_ENABLE { .fxnTablePtr = &SPICC26XXDMA_fxnTable, .object = &spiCC26XXDMAObjects[CC2650_LAUNCHXL_SPI1], .hwAttrs = &spiCC26XXDMAHWAttrs[CC2650_LAUNCHXL_SPI1] }, +#endif }; const uint_least8_t SPI_count = CC2650_LAUNCHXL_SPICOUNT; +#endif /* TI_SPI_CONF_ENABLE */ + /* * =============================== UART =============================== */ #include #include +#if TI_UART_CONF_ENABLE + UARTCC26XX_Object uartCC26XXObjects[CC2650_LAUNCHXL_UARTCOUNT]; uint8_t uartCC26XXRingBuffer[CC2650_LAUNCHXL_UARTCOUNT][32]; const UARTCC26XX_HWAttrsV2 uartCC26XXHWAttrs[CC2650_LAUNCHXL_UARTCOUNT] = { +#if TI_UART_CONF_UART0_ENABLE { .baseAddr = UART0_BASE, .powerMngrId = PowerCC26XX_PERIPH_UART0, @@ -763,19 +807,24 @@ const UARTCC26XX_HWAttrsV2 uartCC26XXHWAttrs[CC2650_LAUNCHXL_UARTCOUNT] = { .txIntFifoThr = UARTCC26XX_FIFO_THRESHOLD_1_8, .rxIntFifoThr = UARTCC26XX_FIFO_THRESHOLD_4_8, .errorFxn = NULL - } + }, +#endif }; const UART_Config UART_config[CC2650_LAUNCHXL_UARTCOUNT] = { +#if TI_UART_CONF_UART0_ENABLE { .fxnTablePtr = &UARTCC26XX_fxnTable, .object = &uartCC26XXObjects[CC2650_LAUNCHXL_UART0], .hwAttrs = &uartCC26XXHWAttrs[CC2650_LAUNCHXL_UART0] }, +#endif }; const uint_least8_t UART_count = CC2650_LAUNCHXL_UARTCOUNT; +#endif /* TI_UART_CONF_ENABLE */ + /* * =============================== UDMA =============================== */ diff --git a/arch/platform/simplelink/cc13xx-cc26xx/launchpad/cc2650/CC2650_LAUNCHXL.h b/arch/platform/simplelink/cc13xx-cc26xx/launchpad/cc2650/CC2650_LAUNCHXL.h index a5f0b28da..89244b0f6 100644 --- a/arch/platform/simplelink/cc13xx-cc26xx/launchpad/cc2650/CC2650_LAUNCHXL.h +++ b/arch/platform/simplelink/cc13xx-cc26xx/launchpad/cc2650/CC2650_LAUNCHXL.h @@ -49,6 +49,8 @@ extern "C" { #endif +#include "contiki-conf.h" + /* Includes */ #include #include @@ -267,7 +269,9 @@ typedef enum CC2650_LAUNCHXL_GPTimers { * @brief Enum of I2C names */ typedef enum CC2650_LAUNCHXL_I2CName { +#if TI_I2C_CONF_I2C0_ENABLE CC2650_LAUNCHXL_I2C0 = 0, +#endif CC2650_LAUNCHXL_I2CCOUNT } CC2650_LAUNCHXL_I2CName; @@ -277,10 +281,10 @@ typedef enum CC2650_LAUNCHXL_I2CName { * @brief Enum of NVS names */ typedef enum CC2650_LAUNCHXL_NVSName { -#ifndef Board_EXCLUDE_NVS_INTERNAL_FLASH +#if TI_NVS_CONF_NVS_INTERNAL_ENABLE CC2650_LAUNCHXL_NVSCC26XX0 = 0, #endif -#ifndef Board_EXCLUDE_NVS_EXTERNAL_FLASH +#if TI_NVS_CONF_NVS_EXTERNAL_ENABLE CC2650_LAUNCHXL_NVSSPI25X0, #endif @@ -319,8 +323,12 @@ typedef enum CC2650_LAUNCHXL_SDName { * @brief Enum of SPI names */ typedef enum CC2650_LAUNCHXL_SPIName { +#if TI_SPI_CONF_SPI0_ENABLE CC2650_LAUNCHXL_SPI0 = 0, +#endif +#if TI_SPI_CONF_SPI1_ENABLE CC2650_LAUNCHXL_SPI1, +#endif CC2650_LAUNCHXL_SPICOUNT } CC2650_LAUNCHXL_SPIName; @@ -330,7 +338,9 @@ typedef enum CC2650_LAUNCHXL_SPIName { * @brief Enum of UARTs */ typedef enum CC2650_LAUNCHXL_UARTName { +#if TI_UART_CONF_UART0_ENABLE CC2650_LAUNCHXL_UART0 = 0, +#endif CC2650_LAUNCHXL_UARTCOUNT } CC2650_LAUNCHXL_UARTName; diff --git a/arch/platform/simplelink/cc13xx-cc26xx/launchpad/cc26x2r1/CC26X2R1_LAUNCHXL.c b/arch/platform/simplelink/cc13xx-cc26xx/launchpad/cc26x2r1/CC26X2R1_LAUNCHXL.c index 188605db9..b7879f5a8 100644 --- a/arch/platform/simplelink/cc13xx-cc26xx/launchpad/cc26x2r1/CC26X2R1_LAUNCHXL.c +++ b/arch/platform/simplelink/cc13xx-cc26xx/launchpad/cc26x2r1/CC26X2R1_LAUNCHXL.c @@ -375,19 +375,21 @@ const uint_least8_t AESECB_count = CC26X2R1_LAUNCHXL_AESECBCOUNT; #include #include +#if TI_DISPLAY_CONF_ENABLE + +#if TI_DISPLAY_CONF_UART_ENABLE + +#if !(TI_UART_CONF_UART0_ENABLE) +#error "Display UART driver requires UART0" +#endif + #ifndef BOARD_DISPLAY_UART_STRBUF_SIZE #define BOARD_DISPLAY_UART_STRBUF_SIZE 128 #endif -#ifndef BOARD_DISPLAY_SHARP_SIZE -#define BOARD_DISPLAY_SHARP_SIZE 96 -#endif +static char uartStringBuf[BOARD_DISPLAY_UART_STRBUF_SIZE]; DisplayUart_Object displayUartObject; -DisplaySharp_Object displaySharpObject; - -static char uartStringBuf[BOARD_DISPLAY_UART_STRBUF_SIZE]; -static uint_least8_t sharpDisplayBuf[BOARD_DISPLAY_SHARP_SIZE * BOARD_DISPLAY_SHARP_SIZE / 8]; const DisplayUart_HWAttrs displayUartHWAttrs = { .uartIdx = CC26X2R1_LAUNCHXL_UART0, @@ -397,6 +399,22 @@ const DisplayUart_HWAttrs displayUartHWAttrs = { .strBufLen = BOARD_DISPLAY_UART_STRBUF_SIZE, }; +#endif /* TI_DISPLAY_CONF_UART_ENABLE */ + +#if TI_DISPLAY_CONF_LCD_ENABLE + +#if !(TI_SPI_CONF_SPI0_ENABLE) +#error "Display LCD driver requires SPI0" +#endif + +#ifndef BOARD_DISPLAY_SHARP_SIZE +#define BOARD_DISPLAY_SHARP_SIZE 96 +#endif + +static uint_least8_t sharpDisplayBuf[BOARD_DISPLAY_SHARP_SIZE * BOARD_DISPLAY_SHARP_SIZE / 8]; + +DisplaySharp_Object displaySharpObject; + const DisplaySharp_HWAttrsV1 displaySharpHWattrs = { .spiIndex = CC26X2R1_LAUNCHXL_SPI0, .csPin = CC26X2R1_LAUNCHXL_GPIO_LCD_CS, @@ -407,27 +425,18 @@ const DisplaySharp_HWAttrsV1 displaySharpHWattrs = { .displayBuf = sharpDisplayBuf, }; -#ifndef BOARD_DISPLAY_USE_UART -#define BOARD_DISPLAY_USE_UART 1 -#endif -#ifndef BOARD_DISPLAY_USE_UART_ANSI -#define BOARD_DISPLAY_USE_UART_ANSI 0 -#endif -#ifndef BOARD_DISPLAY_USE_LCD -#define BOARD_DISPLAY_USE_LCD 0 -#endif +#endif /* TI_DISPLAY_CONF_LCD_ENABLE */ /* * This #if/#else is needed to workaround a problem with the * IAR compiler. The IAR compiler doesn't like the empty array * initialization. (IAR Error[Pe1345]) */ -#if (BOARD_DISPLAY_USE_UART || BOARD_DISPLAY_USE_LCD) const Display_Config Display_config[] = { -#if (BOARD_DISPLAY_USE_UART) +#if TI_DISPLAY_CONF_UART_ENABLE { -# if (BOARD_DISPLAY_USE_UART_ANSI) +# if TI_DISPLAY_CONF_USE_UART_ANSI .fxnTablePtr = &DisplayUartAnsi_fxnTable, # else /* Default to minimal UART with no cursor placement */ .fxnTablePtr = &DisplayUartMin_fxnTable, @@ -436,7 +445,7 @@ const Display_Config Display_config[] = { .hwAttrs = &displayUartHWAttrs, }, #endif -#if (BOARD_DISPLAY_USE_LCD) +#if TI_DISPLAY_CONF_LCD_ENABLE { .fxnTablePtr = &DisplaySharp_fxnTable, .object = &displaySharpObject, @@ -452,7 +461,7 @@ const uint_least8_t Display_count = sizeof(Display_config) / sizeof(Display_Conf const Display_Config *Display_config = NULL; const uint_least8_t Display_count = 0; -#endif /* (BOARD_DISPLAY_USE_UART || BOARD_DISPLAY_USE_LCD) */ +#endif /* TI_DISPLAY_CONF_ENABLE */ /* * =============================== GPIO =============================== @@ -556,6 +565,7 @@ const GPTimerCC26XX_Config GPTimerCC26XX_config[CC26X2R1_LAUNCHXL_GPTIMERPARTSCO I2CCC26XX_Object i2cCC26xxObjects[CC26X2R1_LAUNCHXL_I2CCOUNT]; const I2CCC26XX_HWAttrsV1 i2cCC26xxHWAttrs[CC26X2R1_LAUNCHXL_I2CCOUNT] = { +#if TI_I2C_CONF_I2C0_ENABLE { .baseAddr = I2C0_BASE, .powerMngrId = PowerCC26XX_PERIPH_I2C0, @@ -564,15 +574,18 @@ const I2CCC26XX_HWAttrsV1 i2cCC26xxHWAttrs[CC26X2R1_LAUNCHXL_I2CCOUNT] = { .swiPriority = 0, .sdaPin = CC26X2R1_LAUNCHXL_I2C0_SDA0, .sclPin = CC26X2R1_LAUNCHXL_I2C0_SCL0, - } + }, +#endif }; const I2C_Config I2C_config[CC26X2R1_LAUNCHXL_I2CCOUNT] = { +#if TI_I2C_CONF_I2C0_ENABLE { .fxnTablePtr = &I2CCC26XX_fxnTable, .object = &i2cCC26xxObjects[CC26X2R1_LAUNCHXL_I2C0], .hwAttrs = &i2cCC26xxHWAttrs[CC26X2R1_LAUNCHXL_I2C0] }, +#endif }; const uint_least8_t I2C_count = CC26X2R1_LAUNCHXL_I2CCOUNT; @@ -670,7 +683,7 @@ const NVSSPI25X_HWAttrs nvsSPI25XHWAttrs[1] = { }, }; -#endif /* Board_EXCLUDE_NVS_EXTERNAL_FLASH */ +#endif /* TI_NVS_CONF_NVS_EXTERNAL_ENABLE */ /* NVS Region index 0 and 1 refer to NVS and NVS SPI respectively */ const NVS_Config NVS_config[CC26X2R1_LAUNCHXL_NVSCOUNT] = { @@ -788,6 +801,12 @@ const RFCC26XX_HWAttrsV2 RFCC26XX_hwAttrs = { #include #include +#if TI_SD_CONF_ENABLE + +#if !(TI_SPI_CONF_SPI0_ENABLE) +#error "SD driver requires SPI0 enabled" +#endif + SDSPI_Object sdspiObjects[CC26X2R1_LAUNCHXL_SDCOUNT]; const SDSPI_HWAttrs sdspiHWAttrs[CC26X2R1_LAUNCHXL_SDCOUNT] = { @@ -807,6 +826,8 @@ const SD_Config SD_config[CC26X2R1_LAUNCHXL_SDCOUNT] = { const uint_least8_t SD_count = CC26X2R1_LAUNCHXL_SDCOUNT; +#endif /* TI_SD_CONF_ENABLE */ + /* * =============================== SPI DMA =============================== */ diff --git a/arch/platform/simplelink/cc13xx-cc26xx/launchpad/cc26x2r1/CC26X2R1_LAUNCHXL.h b/arch/platform/simplelink/cc13xx-cc26xx/launchpad/cc26x2r1/CC26X2R1_LAUNCHXL.h index db519d9f9..155fff3f9 100644 --- a/arch/platform/simplelink/cc13xx-cc26xx/launchpad/cc26x2r1/CC26X2R1_LAUNCHXL.h +++ b/arch/platform/simplelink/cc13xx-cc26xx/launchpad/cc26x2r1/CC26X2R1_LAUNCHXL.h @@ -49,6 +49,8 @@ extern "C" { #endif +#include "contiki-conf.h" + /* Includes */ #include #include @@ -332,7 +334,9 @@ typedef enum CC26X2R1_LAUNCHXL_GPTimers { * @brief Enum of I2C names */ typedef enum CC26X2R1_LAUNCHXL_I2CName { +#if TI_I2C_CONF_I2C0_ENABLE CC26X2R1_LAUNCHXL_I2C0 = 0, +#endif CC26X2R1_LAUNCHXL_I2CCOUNT } CC26X2R1_LAUNCHXL_I2CName; @@ -342,10 +346,10 @@ typedef enum CC26X2R1_LAUNCHXL_I2CName { * @brief Enum of NVS names */ typedef enum CC26X2R1_LAUNCHXL_NVSName { -#ifndef Board_EXCLUDE_NVS_INTERNAL_FLASH +#if TI_NVS_CONF_NVS_INTERNAL_ENABLE CC26X2R1_LAUNCHXL_NVSCC26XX0 = 0, #endif -#ifndef Board_EXCLUDE_NVS_EXTERNAL_FLASH +#if TI_NVS_CONF_NVS_EXTERNAL_ENABLE CC26X2R1_LAUNCHXL_NVSSPI25X0, #endif @@ -384,8 +388,12 @@ typedef enum CC26X2R1_LAUNCHXL_SDName { * @brief Enum of SPI names */ typedef enum CC26X2R1_LAUNCHXL_SPIName { +#if TI_SPI_CONF_SPI0_ENABLE CC26X2R1_LAUNCHXL_SPI0 = 0, +#endif +#if TI_SPI_CONF_SPI1_ENABLE CC26X2R1_LAUNCHXL_SPI1, +#endif CC26X2R1_LAUNCHXL_SPICOUNT } CC26X2R1_LAUNCHXL_SPIName; @@ -395,8 +403,12 @@ typedef enum CC26X2R1_LAUNCHXL_SPIName { * @brief Enum of UARTs */ typedef enum CC26X2R1_LAUNCHXL_UARTName { +#if TI_UART_CONF_UART0_ENABLE CC26X2R1_LAUNCHXL_UART0 = 0, +#endif +#if TI_UART_CONF_UART1_ENABLE CC26X2R1_LAUNCHXL_UART1, +#endif CC26X2R1_LAUNCHXL_UARTCOUNT } CC26X2R1_LAUNCHXL_UARTName; diff --git a/arch/platform/simplelink/cc13xx-cc26xx/launchpad/leds-arch.c b/arch/platform/simplelink/cc13xx-cc26xx/launchpad/leds-arch.c index 97c912a84..85065e104 100644 --- a/arch/platform/simplelink/cc13xx-cc26xx/launchpad/leds-arch.c +++ b/arch/platform/simplelink/cc13xx-cc26xx/launchpad/leds-arch.c @@ -27,26 +27,28 @@ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. */ -/*---------------------------------------------------------------------------*/ /** - * \addtogroup simplelink-platform + * \addtogroup launchpad-peripherals * @{ * * \file - * Driver for LaunchPad LEDs + * LED HAL definitions for the LaunchPad LEDs. Common across all + * CC13xx/CC26xx LaunchPad LEDs. + * \author + * Edvard Pettersen */ /*---------------------------------------------------------------------------*/ -/* Contiki API */ #include "contiki.h" #include "dev/leds.h" /*---------------------------------------------------------------------------*/ #include /*---------------------------------------------------------------------------*/ -/* Standard library */ #include /*---------------------------------------------------------------------------*/ const leds_t leds_arch_leds[] = { + /* Red LED, AKA LED0 */ { .pin = Board_PIN_LED0, .negative_logic = false }, + /* Green LED, AKA LED1 */ { .pin = Board_PIN_LED1, .negative_logic = false }, }; /*---------------------------------------------------------------------------*/ diff --git a/arch/platform/simplelink/cc13xx-cc26xx/platform.c b/arch/platform/simplelink/cc13xx-cc26xx/platform.c index f5a23fee6..86342a287 100644 --- a/arch/platform/simplelink/cc13xx-cc26xx/platform.c +++ b/arch/platform/simplelink/cc13xx-cc26xx/platform.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, Texas Instruments Incorporated - http://www.ti.com/ + * Copyright (c) 2018, Texas Instruments Incorporated - http://www.ti.com/ * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -27,25 +27,32 @@ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. */ -/*---------------------------------------------------------------------------*/ /** - * \addtogroup cc13xx-cc26xx-platforms + * \addtogroup cc13xx-cc26xx-platform * @{ * - * \defgroup LaunchPads - * - * This platform supports a number of different boards: - * - The TI CC1310 LaunchPad - * - The TI CC1350 LaunchPad - * - The TI CC2640 LaunchPad - * - The TI CC2650 LaunchPad - * - The TI CC1312R1 LaunchPad - * - The TI CC1352R1 LaunchPad - * - The TI CC1352P1 LaunchPad - * - The TI CC26X2R1 LaunchPad - * @{ + * \file + * Setup the SimpleLink CC13xx/CC26xx ecosystem with the + * Contiki environment. + * \author + * Edvard Pettersen */ /*---------------------------------------------------------------------------*/ +/* Contiki API */ +#include "contiki.h" +#include "contiki-net.h" +#include "sys/clock.h" +#include "sys/rtimer.h" +#include "sys/node-id.h" +#include "sys/platform.h" +#include "dev/button-hal.h" +#include "dev/gpio-hal.h" +#include "dev/serial-line.h" +#include "dev/leds.h" +#include "net/mac/framer/frame802154.h" +#include "lib/random.h" +#include "lib/sensors.h" +/*---------------------------------------------------------------------------*/ /* Simplelink SDK includes */ #include #include @@ -64,20 +71,6 @@ #include #include /*---------------------------------------------------------------------------*/ -/* Contiki API */ -#include "contiki.h" -#include "contiki-net.h" -#include "sys/clock.h" -#include "sys/rtimer.h" -#include "sys/node-id.h" -#include "sys/platform.h" -#include "dev/button-hal.h" -#include "dev/gpio-hal.h" -#include "dev/serial-line.h" -#include "dev/leds.h" -#include "net/mac/framer/frame802154.h" -#include "lib/sensors.h" -/*---------------------------------------------------------------------------*/ /* Arch driver implementations */ #include "board-peripherals.h" #include "uart0-arch.h" @@ -85,7 +78,6 @@ #include "ieee-addr.h" #include "rf-core.h" #include "rf-ble-beacond.h" -#include "lib/random.h" #include "button-sensor.h" /*---------------------------------------------------------------------------*/ #include @@ -93,14 +85,12 @@ /*---------------------------------------------------------------------------*/ /* Log configuration */ #include "sys/log.h" -#define LOG_MODULE "CC26xx/CC13xx" +#define LOG_MODULE "CC13xx/CC26xx" #define LOG_LEVEL LOG_LEVEL_DBG /*---------------------------------------------------------------------------*/ -unsigned short g_nodeId = 0; -/*---------------------------------------------------------------------------*/ /* - * Board-specific initialization function. - * This function is defined in the file _fxns.c + * Board-specific initialization function. This function is defined in + * the _fxns.c file. */ extern void Board_initHook(void); /*---------------------------------------------------------------------------*/ @@ -110,37 +100,41 @@ extern void Board_initHook(void); #define BOARD_HAS_SENSORS 1 #endif /*---------------------------------------------------------------------------*/ +/* Fade a specified LED */ static void fade(unsigned char l) { volatile int i; - for(int k = 0; k < 800; ++k) { - int j = k > 400 ? 800 - k : k; + int k; + int j; + for(k = 0; k < 800; ++k) { + j = (k > 400) ? 800 - k : k; - leds_on(l); + leds_single_on(l); for(i = 0; i < j; ++i) { __asm("nop"); } - leds_off(l); + leds_single_off(l); for(i = 0; i < 400 - j; ++i) { __asm("nop"); } } } /*---------------------------------------------------------------------------*/ +/* Configure RF params for the radio driver */ static void set_rf_params(void) { uint8_t ext_addr[8]; + uint16_t short_addr; + memset(ext_addr, 0x0, sizeof(ext_addr)); ieee_addr_cpy_to(ext_addr, sizeof(ext_addr)); - uint16_t short_addr = (ext_addr[7] << 0) - | (ext_addr[6] << 8); + /* Short address is the last two bytes of the MAC address */ + short_addr = ((uint16_t)ext_addr[7] << 0) + | ((uint16_t)ext_addr[6] << 8); NETSTACK_RADIO.set_value(RADIO_PARAM_PAN_ID, IEEE802154_PANID); NETSTACK_RADIO.set_value(RADIO_PARAM_16BIT_ADDR, short_addr); NETSTACK_RADIO.set_object(RADIO_PARAM_64BIT_ADDR, ext_addr, sizeof(ext_addr)); - - /* also set the global node id */ - g_nodeId = short_addr; } /*---------------------------------------------------------------------------*/ void @@ -155,8 +149,12 @@ platform_init_stage_one(void) Power_init(); + /* BoardGpioInitTable declared in Board.h */ if (PIN_init(BoardGpioInitTable) != PIN_SUCCESS) { - /* Error with PIN_init */ + /* + * Something is seriously wrong if PIN initialization of the Board GPIO + * table fails. + */ while (1); } @@ -172,7 +170,6 @@ platform_init_stage_one(void) /* TI Drivers init */ #if TI_UART_CONF_ENABLE UART_init(); - uart0_init(); #endif #if TI_I2C_CONF_ENABLE I2C_init(); @@ -186,7 +183,7 @@ platform_init_stage_one(void) fade(LEDS_GREEN); - /* NoRTOS should be called last */ + /* NoRTOS must be called last */ NoRTOS_start(); } /*---------------------------------------------------------------------------*/ @@ -195,6 +192,10 @@ platform_init_stage_two(void) { serial_line_init(); +#if TI_UART_CONF_UART0_ENABLE + uart0_init(); +#endif + #if BUILD_WITH_SHELL uart0_set_callback(serial_line_input_byte); #endif @@ -216,7 +217,8 @@ platform_init_stage_three(void) rf_ble_beacond_init(); #endif - radio_value_t chan = 0, pan = 0; + radio_value_t chan = 0; + radio_value_t pan = 0; set_rf_params(); @@ -225,10 +227,10 @@ platform_init_stage_three(void) LOG_DBG("With DriverLib v%u.%u\n", DRIVERLIB_RELEASE_GROUP, DRIVERLIB_RELEASE_BUILD); - LOG_DBG("IEEE 802.15.4: %s, Sub-GHz: %s, BLE: %s\n", + LOG_DBG("IEEE 802.15.4: %s, Sub-1 GHz: %s, BLE: %s\n", ChipInfo_SupportsIEEE_802_15_4() ? "Yes" : "No", - ChipInfo_SupportsPROPRIETARY() ? "Yes" : "No", - ChipInfo_SupportsBLE() ? "Yes" : "No"); + ChipInfo_SupportsPROPRIETARY() ? "Yes" : "No", + ChipInfo_SupportsBLE() ? "Yes" : "No"); #if (RF_MODE == RF_MODE_SUB_1_GHZ) LOG_INFO("Operating frequency on Sub-1 GHz\n"); @@ -236,7 +238,7 @@ platform_init_stage_three(void) LOG_INFO("Operating frequency on 2.4 GHz\n"); #endif LOG_INFO("RF: Channel %d, PANID 0x%04X\n", chan, pan); - LOG_INFO("Node ID: %d\n", g_nodeId); + LOG_INFO("Node ID: %d\n", node_id); #if BOARD_HAS_SENSORS process_start(&sensors_process, NULL); @@ -253,6 +255,5 @@ platform_idle(void) } /*---------------------------------------------------------------------------*/ /** - * @} * @} */ diff --git a/arch/platform/simplelink/cc13xx-cc26xx/sensortag/Makefile.sensortag b/arch/platform/simplelink/cc13xx-cc26xx/sensortag/Makefile.sensortag index 31da88d0a..fe6156ea7 100644 --- a/arch/platform/simplelink/cc13xx-cc26xx/sensortag/Makefile.sensortag +++ b/arch/platform/simplelink/cc13xx-cc26xx/sensortag/Makefile.sensortag @@ -7,7 +7,7 @@ PLATFORM_HAS_BUTTON = 1 # leds-arch.c/h etc. BOARD_SOURCEFILES += sensortag-sensors.c -BOARD_SOURCEFILES += button-sensor-arch.c ext-flash.c +BOARD_SOURCEFILES += button-sensor-arch.c BOARD_SOURCEFILES += bmp-280-sensor.c hdc-1000-sensor.c BOARD_SOURCEFILES += mpu-9250-sensor.c opt-3001-sensor.c BOARD_SOURCEFILES += tmp-007-sensor.c buzzer.c diff --git a/arch/platform/simplelink/cc13xx-cc26xx/sensortag/bmp-280-sensor.c b/arch/platform/simplelink/cc13xx-cc26xx/sensortag/bmp-280-sensor.c index c13c520eb..372cfc81c 100644 --- a/arch/platform/simplelink/cc13xx-cc26xx/sensortag/bmp-280-sensor.c +++ b/arch/platform/simplelink/cc13xx-cc26xx/sensortag/bmp-280-sensor.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, Texas Instruments Incorporated - http://www.ti.com/ + * Copyright (c) 2018, Texas Instruments Incorporated - http://www.ti.com/ * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -27,13 +27,14 @@ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. */ -/*---------------------------------------------------------------------------*/ /** - * \addtogroup sensortag-cc26xx-bmp-sensor + * \addtogroup sensortag-bmp-sensor * @{ * * \file - * Driver for the Sensortag BMP280 Altimeter / Pressure Sensor + * Driver for the Sensortag BMP280 Altimeter / Pressure Sensor + * \author + * Edvard Pettersen */ /*---------------------------------------------------------------------------*/ #include "contiki.h" @@ -41,6 +42,7 @@ #include "sys/ctimer.h" /*---------------------------------------------------------------------------*/ #include + #include /*---------------------------------------------------------------------------*/ #include "bmp-280-sensor.h" @@ -57,7 +59,7 @@ #endif /*---------------------------------------------------------------------------*/ #ifndef Board_BMP280_ADDR -# error "Board file doesn't define I2C address Board_BMP280_ADDR" +# error "Board file doesn't define I2C address Board_BMP280_ADDR" #endif /* Sensor I2C address */ #define BMP280_I2C_ADDRESS Board_BMP280_ADDR @@ -127,7 +129,7 @@ typedef struct { /*---------------------------------------------------------------------------*/ static BMP_280_Calibration calib_data; /*---------------------------------------------------------------------------*/ -static I2C_Handle i2cHandle; +static I2C_Handle i2c_handle; /*---------------------------------------------------------------------------*/ typedef enum { SENSOR_STATUS_DISABLED, @@ -163,48 +165,53 @@ i2c_write_read(void *writeBuf, size_t writeCount, void *readBuf, size_t readCoun .slaveAddress = BMP280_I2C_ADDRESS, }; - return I2C_transfer(i2cHandle, &i2cTransaction); + return I2C_transfer(i2c_handle, &i2cTransaction); } #define i2c_write(writeBuf, writeCount) i2c_write_read(writeBuf, writeCount, NULL, 0) #define i2c_read(readBuf, readCount) i2c_write_read(NULL, 0, readBuf, readCount) /*---------------------------------------------------------------------------*/ /** - * \brief Initalise the sensor - * - * @return true if success; else, false on error + * \brief Initalise the sensor. + * \return Boolean Value descibing whether initialization were + * successful or not. + * \retval true Successful initialization + * \retval false Error during initialization */ static bool init(void) { - if (i2cHandle) { + if (i2c_handle) { return true; } I2C_Params i2cParams; I2C_Params_init(&i2cParams); + i2cParams.transferMode = I2C_MODE_BLOCKING; i2cParams.bitRate = I2C_400kHz; - i2cHandle = I2C_open(Board_I2C0, &i2cParams); - if (i2cHandle == NULL) { + i2c_handle = I2C_open(Board_I2C0, &i2cParams); + if (i2c_handle == NULL) { return false; } uint8_t reset_data[] = { ADDR_RESET, VAL_RESET_EXECUTE }; - /* Read and store calibration data */ uint8_t calib_reg = ADDR_CALIB; + /* Read and store calibration data */ return i2c_write_read(&calib_reg, sizeof(calib_reg), &calib_data, sizeof(calib_data)) /* then reset the sensor */ && i2c_write(reset_data, sizeof(reset_data)); } /*---------------------------------------------------------------------------*/ /** - * \brief Enable/disable measurements - * \param enable 0: disable, enable otherwise - * - * @return none + * \brief Enable/disable measurements. + * \param enable Enable if true; else, disable. + * \return Boolean Value descibing whether initialization were + * successful or not. + * \retval true Successful initialization + * \retval false Error during initialization */ static bool enable_sensor(bool enable) @@ -218,10 +225,13 @@ enable_sensor(bool enable) } /*---------------------------------------------------------------------------*/ /** - * \brief Read temperature and pressure data - * \param data Pointer to a buffer where temperature and pressure will be - * written (6 bytes) - * \return True if valid data could be retrieved + * \brief Read temperature and pressure data. + * \param data Pointer to a buffer where temperature and pressure will be + * written (6 bytes). + * \return Boolean Value descibing whether initialization were + * successful or not. + * \retval true Successful initialization + * \retval false Error during initialization */ static bool read_data(uint8_t *data, size_t count) @@ -231,12 +241,13 @@ read_data(uint8_t *data, size_t count) } /*---------------------------------------------------------------------------*/ /** - * \brief Convert raw data to values in degrees C (temp) and Pascal (pressure) - * \param data Pointer to a buffer that holds raw sensor data - * \param temp Pointer to a variable where the converted temperature will be - * written + * \brief Convert raw data to values in degrees C (temp) and Pascal + * (pressure). + * \param data Pointer to a buffer that holds raw sensor data. + * \param temp Pointer to a variable where the converted temperature will + * be written. * \param press Pointer to a variable where the converted pressure will be - * written + * written. */ static void convert(uint8_t *data, int32_t *temp, uint32_t *press) @@ -337,9 +348,11 @@ convert(uint8_t *data, int32_t *temp, uint32_t *press) } /*---------------------------------------------------------------------------*/ /** - * \brief Returns a reading from the sensor - * \param type BMP_280_SENSOR_TYPE_TEMP or BMP_280_SENSOR_TYPE_PRESS - * \return Temperature (centi degrees C) or Pressure (Pascal). + * \brief Returns a reading from the sensor. + * \param type Parameter of type BMP_280_SENSOR_TYPE, choosing between either + * measuring temperature or pressure. + * \return Sensor data of either Temperature (centi degrees C) or + * Pressure (Pascal). */ static int value(int type) @@ -384,14 +397,12 @@ value(int type) } /*---------------------------------------------------------------------------*/ /** - * \brief Configuration function for the BMP280 sensor. - * - * \param type Activate, enable or disable the sensor. See below - * \param enable - * - * When type == SENSORS_HW_INIT we turn on the hardware - * When type == SENSORS_ACTIVE and enable==1 we enable the sensor - * When type == SENSORS_ACTIVE and enable==0 we disable the sensor + * \brief Configuration function for the BMP280 sensor. + * \param type Activate, enable or disable the sensor. See below + * \param enable Disable sensor if 0; else, enable sensor otherwise. + * When type == SENSORS_HW_INIT we turn on the hardware. + * When type == SENSORS_ACTIVE and enable==1 we enable the sensor. + * When type == SENSORS_ACTIVE and enable==0 we disable the sensor. */ static int configure(int type, int enable) @@ -429,9 +440,9 @@ configure(int type, int enable) } /*---------------------------------------------------------------------------*/ /** - * \brief Returns the status of the sensor - * \param type SENSORS_ACTIVE or SENSORS_READY - * \return 1 if the sensor is enabled + * \brief Returns the status of the sensor. + * \param type SENSORS_ACTIVE or SENSORS_READY. + * \return Current status of the sensor. */ static int status(int type) @@ -441,9 +452,8 @@ status(int type) case SENSORS_READY: return sensor_status; default: - break; + return SENSOR_STATUS_DISABLED; } - return SENSOR_STATUS_DISABLED; } /*---------------------------------------------------------------------------*/ SENSORS_SENSOR(bmp_280_sensor, "BMP280", value, configure, status); diff --git a/arch/platform/simplelink/cc13xx-cc26xx/sensortag/bmp-280-sensor.h b/arch/platform/simplelink/cc13xx-cc26xx/sensortag/bmp-280-sensor.h index 2c2735ed9..3f7f846b7 100644 --- a/arch/platform/simplelink/cc13xx-cc26xx/sensortag/bmp-280-sensor.h +++ b/arch/platform/simplelink/cc13xx-cc26xx/sensortag/bmp-280-sensor.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, Texas Instruments Incorporated - http://www.ti.com/ + * Copyright (c) 2018, Texas Instruments Incorporated - http://www.ti.com/ * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -27,12 +27,11 @@ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. */ -/*---------------------------------------------------------------------------*/ /** - * \addtogroup sensortag-cc26xx-peripherals + * \addtogroup sensortag-peripherals * @{ * - * \defgroup sensortag-cc26xx-bmp-sensor SensorTag 2.0 Pressure Sensor + * \defgroup sensortag-bmp-sensor SensorTag Pressure Sensor * * Due to the time required for the sensor to startup, this driver is meant to * be used in an asynchronous fashion. The caller must first activate the @@ -49,14 +48,22 @@ * @{ * * \file - * Header file for the Sensortag BMP280 Altimeter / Pressure Sensor + * Header file for the Sensortag BMP280 Altimeter / Pressure Sensor + * \author + * Edvard Pettersen */ /*---------------------------------------------------------------------------*/ #ifndef BMP_280_SENSOR_H_ #define BMP_280_SENSOR_H_ /*---------------------------------------------------------------------------*/ +#include "contiki.h" #include "lib/sensors.h" /*---------------------------------------------------------------------------*/ +/* The BMP-280 driver uses the I2C0 peripheral to access the senssor */ +#if (TI_I2C_CONF_ENABLE == 0) || (TI_I2C_CONF_I2C0_ENABLE == 0) +# error "The BMP280 requires the I2C driver (TI_I2C_CONF_ENABLE = 1)" +#endif +/*---------------------------------------------------------------------------*/ typedef enum { BMP_280_SENSOR_TYPE_TEMP, BMP_280_SENSOR_TYPE_PRESS diff --git a/arch/platform/simplelink/cc13xx-cc26xx/sensortag/board-conf.h b/arch/platform/simplelink/cc13xx-cc26xx/sensortag/board-conf.h index 1bd6b92c6..4a1822e82 100644 --- a/arch/platform/simplelink/cc13xx-cc26xx/sensortag/board-conf.h +++ b/arch/platform/simplelink/cc13xx-cc26xx/sensortag/board-conf.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, Texas Instruments Incorporated - http://www.ti.com/ + * Copyright (c) 2018, Texas Instruments Incorporated - http://www.ti.com/ * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -27,32 +27,48 @@ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. */ -/*---------------------------------------------------------------------------*/ -/** \addtogroup cc26xx-srf-tag +/** + * \addtogroup cc13xx-cc26xx-platform * @{ * - * \defgroup sensortag-cc26xx-peripherals Sensortag CC1350/CC2650 common + * \defgroup sensortag-peripherals Sensortag peripherals * - * Defines related to Sensortag sensors. The two sensortags are identical to a - * very large extent. Everything documented within this group applies to both - * sensortags. + * Defines related to configuring SensorTag peripherals. The two sensortags, + * CC1350STK and CC2650STK, are identical to a very large extent. + * Everything documented within this group applies to both sensortags. * * @{ * * \file - * Header file with definitions related to the sensors on the Sensortags - * - * \note Do not include this file directly. + * Header file with definitions related to the sensors on the Sensortags + * \author + * Edvard Pettersen + * \note + * This file should not be included directly */ /*---------------------------------------------------------------------------*/ #ifndef BOARD_CONF_H_ #define BOARD_CONF_H_ /*---------------------------------------------------------------------------*/ -#include "leds-arch.h" -/*---------------------------------------------------------------------------*/ +/** + * \name Button configurations for the dev/button-hal.h API. + * + * Those values are not meant to be modified by the user + * @{ + */ #define BUTTON_HAL_ID_KEY_LEFT 0 #define BUTTON_HAL_ID_KEY_RIGHT 1 #define BUTTON_HAL_ID_REED_RELAY 2 +/** @} */ +/*---------------------------------------------------------------------------*/ +/** + * \name SensorTag does have sensors. + * + * Those values are not meant to be modified by the user + * @{ + */ +#define BOARD_CONF_HAS_SENSORS 1 +/** @} */ /*---------------------------------------------------------------------------*/ #endif /* BOARD_CONF_H_ */ /*---------------------------------------------------------------------------*/ diff --git a/arch/platform/simplelink/cc13xx-cc26xx/sensortag/board-peripherals.h b/arch/platform/simplelink/cc13xx-cc26xx/sensortag/board-peripherals.h index 403428872..7a4f8c19b 100644 --- a/arch/platform/simplelink/cc13xx-cc26xx/sensortag/board-peripherals.h +++ b/arch/platform/simplelink/cc13xx-cc26xx/sensortag/board-peripherals.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, Texas Instruments Incorporated - http://www.ti.com/ + * Copyright (c) 2018, Texas Instruments Incorporated - http://www.ti.com/ * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -27,38 +27,35 @@ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. */ -/*---------------------------------------------------------------------------*/ -/** \addtogroup cc26xx-srf-tag +/** + * \addtogroup cc13xx-cc26xx-platform * @{ * - * \defgroup sensortag-cc26xx-peripherals Sensortag CC1350/CC2650 common + * \defgroup sensortag-peripherals Sensortag peripherals * - * Defines related to Sensortag sensors. The two sensortags are identical to a - * very large extent. Everything documented within this group applies to both - * sensortags. + * Defines related to configuring SensorTag peripherals. The two sensortags, + * CC1350STK and CC2650STK, are identical to a very large extent. + * Everything documented within this group applies to both sensortags. * * @{ * * \file - * Header file with definitions related to the sensors on the Sensortags - * - * \note Do not include this file directly. + * Header file with definitions related to the sensors on the Sensortags + * \author + * Edvard Pettersen */ /*---------------------------------------------------------------------------*/ #ifndef BOARD_PERIPHERALS_H_ #define BOARD_PERIPHERALS_H_ /*---------------------------------------------------------------------------*/ +#include "board-conf.h" +/*---------------------------------------------------------------------------*/ #include "bmp-280-sensor.h" #include "tmp-007-sensor.h" #include "opt-3001-sensor.h" #include "hdc-1000-sensor.h" #include "mpu-9250-sensor.h" #include "buzzer.h" -#include "ext-flash.h" -/*---------------------------------------------------------------------------*/ -#include "board-conf.h" -/*---------------------------------------------------------------------------*/ -#define BOARD_CONF_HAS_SENSORS 1 /*---------------------------------------------------------------------------*/ #endif /* BOARD_PERIPHERALS_H_ */ /*---------------------------------------------------------------------------*/ diff --git a/arch/platform/simplelink/cc13xx-cc26xx/sensortag/button-sensor-arch.c b/arch/platform/simplelink/cc13xx-cc26xx/sensortag/button-sensor-arch.c index 5c4cc20f4..63c177656 100644 --- a/arch/platform/simplelink/cc13xx-cc26xx/sensortag/button-sensor-arch.c +++ b/arch/platform/simplelink/cc13xx-cc26xx/sensortag/button-sensor-arch.c @@ -27,45 +27,51 @@ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. */ -/*---------------------------------------------------------------------------*/ /** - * \addtogroup launchpad-button-sensor + * \addtogroup sensortag-peripherals * @{ * * \file - * Driver for LaunchPad buttons + * Button HAL definitions for the SensorTag buttons. Common across + * all CC13xx/CC26xx SensorTag boards. + * \author + * Edvard Pettersen */ /*---------------------------------------------------------------------------*/ #include "contiki.h" #include "dev/button-hal.h" - +/*---------------------------------------------------------------------------*/ #include /*---------------------------------------------------------------------------*/ /* Key left button, AKA BTN-1 */ -BUTTON_HAL_BUTTON(key_left, /**< Name */ - "Key Left", /**< Description */ - Board_KEY_LEFT, /**< PIN */ - GPIO_HAL_PIN_CFG_INPUT_PULLUP | - GPIO_HAL_PIN_CFG_INPUT_HYSTERESIS, /**< Pull configuration */ - BUTTON_HAL_ID_KEY_LEFT, /**< Unique ID */ - true); /**< Negative logic */ +BUTTON_HAL_BUTTON( + key_left, /**< Name */ + "Key Left", /**< Description */ + Board_KEY_LEFT, /**< PIN */ + GPIO_HAL_PIN_CFG_INPUT_PULLUP | + GPIO_HAL_PIN_CFG_INPUT_HYSTERESIS, /**< Pull configuration */ + BUTTON_HAL_ID_KEY_LEFT, /**< Unique ID */ + true); /**< Negative logic */ /* Key right button, AKA BTN-2 */ -BUTTON_HAL_BUTTON(key_right, /**< Name */ - "Key Right", /**< Description */ - Board_KEY_RIGHT, /**< PIN */ - GPIO_HAL_PIN_CFG_INPUT_PULLUP | - GPIO_HAL_PIN_CFG_INPUT_HYSTERESIS, /**< Pull configuration */ - BUTTON_HAL_ID_KEY_RIGHT, /**< Unique ID */ - true); /**< Negative logic */ +BUTTON_HAL_BUTTON( + key_right, /**< Name */ + "Key Right", /**< Description */ + Board_KEY_RIGHT, /**< PIN */ + GPIO_HAL_PIN_CFG_INPUT_PULLUP | + GPIO_HAL_PIN_CFG_INPUT_HYSTERESIS, /**< Pull configuration */ + BUTTON_HAL_ID_KEY_RIGHT, /**< Unique ID */ + true); /**< Negative logic */ -BUTTON_HAL_BUTTON(reed_relay, /**< Name */ - "Reed Relay", /**< Description */ - Board_RELAY, /**< PIN */ - GPIO_HAL_PIN_CFG_INPUT_PULLDOWN | - GPIO_HAL_PIN_CFG_INPUT_HYSTERESIS, /**< Pull configuration */ - BUTTON_HAL_ID_REED_RELAY, /**< Unique ID */ - true); /**< Negative logic */ +/* Reed Relay button */ +BUTTON_HAL_BUTTON( + reed_relay, /**< Name */ + "Reed Relay", /**< Description */ + Board_RELAY, /**< PIN */ + GPIO_HAL_PIN_CFG_INPUT_PULLDOWN | + GPIO_HAL_PIN_CFG_INPUT_HYSTERESIS, /**< Pull configuration */ + BUTTON_HAL_ID_REED_RELAY, /**< Unique ID */ + true); /**< Negative logic */ /*---------------------------------------------------------------------------*/ BUTTON_HAL_BUTTONS(&key_left, &key_right, &reed_relay); /*---------------------------------------------------------------------------*/ diff --git a/arch/platform/simplelink/cc13xx-cc26xx/sensortag/buzzer.c b/arch/platform/simplelink/cc13xx-cc26xx/sensortag/buzzer.c index c79b7f401..2c2459225 100644 --- a/arch/platform/simplelink/cc13xx-cc26xx/sensortag/buzzer.c +++ b/arch/platform/simplelink/cc13xx-cc26xx/sensortag/buzzer.c @@ -29,11 +29,13 @@ */ /*---------------------------------------------------------------------------*/ /** - * \addtogroup sensortag-cc26xx-buzzer + * \addtogroup sensortag-buzzer * @{ * * \file - * Driver for the Sensortag Buzzer + * Driver for the Sensortag Buzzer. + * \author + * Edvard Pettersen */ /*---------------------------------------------------------------------------*/ #include "contiki.h" @@ -78,13 +80,13 @@ buzzer_init() GPTimerCC26XX_Params gpt_params; GPTimerCC26XX_Params_init(&gpt_params); + gpt_params.mode = GPT_CONFIG_16BIT; gpt_params.mode = GPT_MODE_PERIODIC_UP; gpt_params.debugStallMode = GPTimerCC26XX_DEBUG_STALL_OFF; gpt_handle = GPTimerCC26XX_open(Board_GPTIMER0A, &gpt_params); if (!gpt_handle) { - PIN_close(pin_handle); return false; } @@ -120,7 +122,7 @@ buzzer_start(uint32_t freq) return false; } - Power_setDependency(PowerCC26XX_XOSC_HF ); + Power_setDependency(PowerCC26XX_XOSC_HF); PINCC26XX_setMux(pin_handle, BUZZER_PIN, GPT_PIN_0A); @@ -145,10 +147,12 @@ buzzer_stop() return; } - Power_releaseDependency(PowerCC26XX_XOSC_HF ); + Power_releaseDependency(PowerCC26XX_XOSC_HF); GPTimerCC26XX_stop(gpt_handle); + PIN_close(pin_handle); + pin_handle = NULL; is_running = false; } diff --git a/arch/platform/simplelink/cc13xx-cc26xx/sensortag/buzzer.h b/arch/platform/simplelink/cc13xx-cc26xx/sensortag/buzzer.h index 31a92ad17..3895be4b7 100644 --- a/arch/platform/simplelink/cc13xx-cc26xx/sensortag/buzzer.h +++ b/arch/platform/simplelink/cc13xx-cc26xx/sensortag/buzzer.h @@ -27,16 +27,17 @@ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. */ -/*---------------------------------------------------------------------------*/ /** - * \addtogroup sensortag-cc26xx-peripherals + * \addtogroup sensortag-peripherals * @{ * - * \defgroup sensortag-cc26xx-buzzer SensorTag 2.0 Buzzer + * \defgroup sensortag-buzzer SensorTag Buzzer * @{ * * \file - * Header file for the Sensortag Buzzer + * Header file for the Sensortag Buzzer. + * \author + * Edvard Pettersen . */ /*---------------------------------------------------------------------------*/ #ifndef BUZZER_H_ @@ -46,24 +47,26 @@ #include /*---------------------------------------------------------------------------*/ /** - * \brief Initialise the buzzer + * \brief Initialise the buzzer */ bool buzzer_init(void); /** - * \brief Start the buzzer - * \param freq The buzzer frequency + * \brief Start the buzzer. + * \param freq The buzzer frequency in Hz. */ bool buzzer_start(uint32_t freq); /** - * \brief Stop the buzzer + * \brief Stop the buzzer. */ void buzzer_stop(void); /** - * \brief Retrieve the buzzer state - * \return 1: on, 0: off + * \brief Retrieve the buzzer state. + * \return Running status of the buzzer. + * \retval 0 Buzzer is off + * \retval 1 Buzzer is on */ bool buzzer_running(void); /*---------------------------------------------------------------------------*/ diff --git a/arch/platform/simplelink/cc13xx-cc26xx/sensortag/cc1350/CC1350STK.c b/arch/platform/simplelink/cc13xx-cc26xx/sensortag/cc1350/CC1350STK.c index 916dfda20..f1d8bf53d 100644 --- a/arch/platform/simplelink/cc13xx-cc26xx/sensortag/cc1350/CC1350STK.c +++ b/arch/platform/simplelink/cc13xx-cc26xx/sensortag/cc1350/CC1350STK.c @@ -80,19 +80,21 @@ const CryptoCC26XX_Config CryptoCC26XX_config[CC1350STK_CRYPTOCOUNT] = { #include #include -#ifndef CC1350STK_DISPLAY_UART_STRBUF_SIZE -#define CC1350STK_DISPLAY_UART_STRBUF_SIZE 128 +#if TI_DISPLAY_CONF_ENABLE + +#if TI_DISPLAY_CONF_UART_ENABLE + +#if !(TI_UART_CONF_UART0_ENABLE) +#error "Display UART driver requires UART0" #endif -#ifndef CC1350STK_DISPLAY_SHARP_SIZE -#define CC1350STK_DISPLAY_SHARP_SIZE 96 +#ifndef BOARD_DISPLAY_UART_STRBUF_SIZE +#define BOARD_DISPLAY_UART_STRBUF_SIZE 128 #endif -DisplayUart_Object displayUartObject; -DisplaySharp_Object displaySharpObject; - static char uartStringBuf[CC1350STK_DISPLAY_UART_STRBUF_SIZE]; -static uint_least8_t sharpDisplayBuf[CC1350STK_DISPLAY_SHARP_SIZE * CC1350STK_DISPLAY_SHARP_SIZE / 8]; + +DisplayUart_Object displayUartObject; const DisplayUart_HWAttrs displayUartHWAttrs = { .uartIdx = CC1350STK_UART0, @@ -102,6 +104,22 @@ const DisplayUart_HWAttrs displayUartHWAttrs = { .strBufLen = CC1350STK_DISPLAY_UART_STRBUF_SIZE, }; +#endif /* TI_DISPLAY_CONF_UART_ENABLE */ + +#if TI_DISPLAY_CONF_LCD_ENABLE + +#if !(TI_SPI_CONF_SPI0_ENABLE) +#error "Display LCD driver requires SPI0" +#endif + +#ifndef BOARD_DISPLAY_SHARP_SIZE +#define BOARD_DISPLAY_SHARP_SIZE 96 +#endif + +static uint_least8_t sharpDisplayBuf[CC1350STK_DISPLAY_SHARP_SIZE * CC1350STK_DISPLAY_SHARP_SIZE / 8]; + +DisplaySharp_Object displaySharpObject; + const DisplaySharp_HWAttrsV1 displaySharpHWattrs = { .spiIndex = CC1350STK_SPI0, .csPin = CC1350STK_GPIO_LCD_CS, @@ -112,30 +130,18 @@ const DisplaySharp_HWAttrsV1 displaySharpHWattrs = { .displayBuf = sharpDisplayBuf, }; -/* - * The pins for the UART and Watch Devpack conflict, prefer UART by default - */ -#ifndef BOARD_DISPLAY_USE_UART -#define BOARD_DISPLAY_USE_UART 1 -#endif -#ifndef BOARD_DISPLAY_USE_UART_ANSI -#define BOARD_DISPLAY_USE_UART_ANSI 0 -#endif -#ifndef BOARD_DISPLAY_USE_LCD -#define BOARD_DISPLAY_USE_LCD 0 -#endif +#endif /* TI_DISPLAY_CONF_LCD_ENABLE */ /* * This #if/#else is needed to workaround a problem with the * IAR compiler. The IAR compiler doesn't like the empty array * initialization. (IAR Error[Pe1345]) */ -#if (BOARD_DISPLAY_USE_UART || BOARD_DISPLAY_USE_LCD) const Display_Config Display_config[] = { -#if (BOARD_DISPLAY_USE_UART) +#if TI_DISPLAY_CONF_UART_ENABLE { -# if (BOARD_DISPLAY_USE_UART_ANSI) +# if TI_DISPLAY_CONF_USE_UART_ANSI .fxnTablePtr = &DisplayUartAnsi_fxnTable, # else /* Default to minimal UART with no cursor placement */ .fxnTablePtr = &DisplayUartMin_fxnTable, @@ -145,7 +151,7 @@ const Display_Config Display_config[] = { .hwAttrs = &displayUartHWAttrs, }, #endif -#if (BOARD_DISPLAY_USE_LCD) +#if TI_DISPLAY_CONF_LCD_ENABLE { .fxnTablePtr = &DisplaySharp_fxnTable, .object = &displaySharpObject, @@ -161,7 +167,7 @@ const uint_least8_t Display_count = sizeof(Display_config) / sizeof(Display_Conf const Display_Config *Display_config = NULL; const uint_least8_t Display_count = 0; -#endif /* (BOARD_DISPLAY_USE_UART || BOARD_DISPLAY_USE_LCD) */ +#endif /* TI_DISPLAY_CONF_ENABLE */ /* * =============================== GPIO =============================== @@ -249,9 +255,12 @@ const GPTimerCC26XX_Config GPTimerCC26XX_config[CC1350STK_GPTIMERPARTSCOUNT] = { #include #include +#if TI_I2C_CONF_ENABLE + I2CCC26XX_Object i2cCC26xxObjects[CC1350STK_I2CCOUNT]; const I2CCC26XX_HWAttrsV1 i2cCC26xxHWAttrs[CC1350STK_I2CCOUNT] = { +#if TI_I2C_CONF_I2C0_ENABLE { .baseAddr = I2C0_BASE, .powerMngrId = PowerCC26XX_PERIPH_I2C0, @@ -260,19 +269,24 @@ const I2CCC26XX_HWAttrsV1 i2cCC26xxHWAttrs[CC1350STK_I2CCOUNT] = { .swiPriority = 0, .sdaPin = CC1350STK_I2C0_SDA0, .sclPin = CC1350STK_I2C0_SCL0, - } + }, +#endif }; const I2C_Config I2C_config[CC1350STK_I2CCOUNT] = { +#if TI_I2C_CONF_I2C0_ENABLE { .fxnTablePtr = &I2CCC26XX_fxnTable, .object = &i2cCC26xxObjects[CC1350STK_I2C0], .hwAttrs = &i2cCC26xxHWAttrs[CC1350STK_I2C0] }, +#endif }; const uint_least8_t I2C_count = CC1350STK_I2CCOUNT; +#endif /* TI_I2C_CONF_ENABLE */ + /* * =============================== NVS =============================== */ @@ -283,10 +297,10 @@ const uint_least8_t I2C_count = CC1350STK_I2CCOUNT; #define NVS_REGIONS_BASE 0x1A000 #define SECTORSIZE 0x1000 #define REGIONSIZE (SECTORSIZE * 4) -#define SPIREGIONSIZE (SECTORSIZE * 32) -#define VERIFYBUFSIZE 64 -static uint8_t verifyBuf[VERIFYBUFSIZE]; +#if TI_NVS_CONF_ENABLE + +#if TI_NVS_CONF_NVS_INTERNAL_ENABLE /* * Reserve flash sectors for NVS driver use by placing an uninitialized byte @@ -327,7 +341,6 @@ static char flashBuf[REGIONSIZE]; /* Allocate objects for NVS and NVS SPI */ NVSCC26XX_Object nvsCC26xxObjects[1]; -NVSSPI25X_Object nvsSPI25XObjects[1]; /* Hardware attributes for NVS */ const NVSCC26XX_HWAttrs nvsCC26xxHWAttrs[1] = { @@ -337,12 +350,24 @@ const NVSCC26XX_HWAttrs nvsCC26xxHWAttrs[1] = { }, }; +#endif /* TI_NVS_CONF_NVS_INTERNAL_ENABLE */ + +#if TI_NVS_CONF_NVS_EXTERNAL_ENABLE + +#define SPISECTORSIZE 0x1000 +#define SPIREGIONSIZE (SECTORSIZE * 32) +#define VERIFYBUFSIZE 64 + +static uint8_t verifyBuf[VERIFYBUFSIZE]; + +NVSSPI25X_Object nvsSPI25XObjects[1]; + /* Hardware attributes for NVS SPI */ const NVSSPI25X_HWAttrs nvsSPI25XHWAttrs[1] = { { .regionBaseOffset = 0, .regionSize = SPIREGIONSIZE, - .sectorSize = SECTORSIZE, + .sectorSize = SPISECTORSIZE, .verifyBuf = verifyBuf, .verifyBufSize = VERIFYBUFSIZE, .spiHandle = NULL, @@ -352,22 +377,30 @@ const NVSSPI25X_HWAttrs nvsSPI25XHWAttrs[1] = { }, }; +#endif /* Board_EXCLUDE_NVS_EXTERNAL_FLASH */ + /* NVS Region index 0 and 1 refer to NVS and NVS SPI respectively */ const NVS_Config NVS_config[CC1350STK_NVSCOUNT] = { +#if TI_NVS_CONF_NVS_INTERNAL_ENABLE { .fxnTablePtr = &NVSCC26XX_fxnTable, .object = &nvsCC26xxObjects[0], .hwAttrs = &nvsCC26xxHWAttrs[0], }, +#endif +#if TI_NVS_CONF_NVS_EXTERNAL_ENABLE { .fxnTablePtr = &NVSSPI25X_fxnTable, .object = &nvsSPI25XObjects[0], .hwAttrs = &nvsSPI25XHWAttrs[0], }, +#endif }; const uint_least8_t NVS_count = CC1350STK_NVSCOUNT; +#endif /* TI_NVS_CONF_ENABLE */ + /* * =============================== PDM =============================== */ @@ -516,9 +549,12 @@ const RFCC26XX_HWAttrsV2 RFCC26XX_hwAttrs = { #include #include +#if TI_SPI_CONF_ENABLE + SPICC26XXDMA_Object spiCC26XXDMAObjects[CC1350STK_SPICOUNT]; const SPICC26XXDMA_HWAttrsV1 spiCC26XXDMAHWAttrs[CC1350STK_SPICOUNT] = { +#if TI_SPI_CONF_SPI0_ENABLE { .baseAddr = SSI0_BASE, .intNum = INT_SSI0_COMB, @@ -534,6 +570,8 @@ const SPICC26XXDMA_HWAttrsV1 spiCC26XXDMAHWAttrs[CC1350STK_SPICOUNT] = { .csnPin = CC1350STK_SPI0_CSN, .minDmaTransferSize = 10 }, +#endif +#if TI_SPI_CONF_SPI1_ENABLE { .baseAddr = SSI1_BASE, .intNum = INT_SSI1_COMB, @@ -548,35 +586,45 @@ const SPICC26XXDMA_HWAttrsV1 spiCC26XXDMAHWAttrs[CC1350STK_SPICOUNT] = { .clkPin = CC1350STK_SPI1_CLK, .csnPin = CC1350STK_SPI1_CSN, .minDmaTransferSize = 10 - } + }, +#endif }; const SPI_Config SPI_config[CC1350STK_SPICOUNT] = { +#if TI_SPI_CONF_SPI0_ENABLE { .fxnTablePtr = &SPICC26XXDMA_fxnTable, .object = &spiCC26XXDMAObjects[CC1350STK_SPI0], .hwAttrs = &spiCC26XXDMAHWAttrs[CC1350STK_SPI0] }, +#endif +#if TI_SPI_CONF_SPI1_ENABLE { .fxnTablePtr = &SPICC26XXDMA_fxnTable, .object = &spiCC26XXDMAObjects[CC1350STK_SPI1], .hwAttrs = &spiCC26XXDMAHWAttrs[CC1350STK_SPI1] }, +#endif }; const uint_least8_t SPI_count = CC1350STK_SPICOUNT; +#endif /* TI_SPI_CONF_ENABLE */ + /* * =============================== UART =============================== */ #include #include +#if TI_UART_CONF_ENABLE + UARTCC26XX_Object uartCC26XXObjects[CC1350STK_UARTCOUNT]; uint8_t uartCC26XXRingBuffer[CC1350STK_UARTCOUNT][32]; const UARTCC26XX_HWAttrsV2 uartCC26XXHWAttrs[CC1350STK_UARTCOUNT] = { +#if TI_UART_CONF_UART0_ENABLE { .baseAddr = UART0_BASE, .powerMngrId = PowerCC26XX_PERIPH_UART0, @@ -592,19 +640,24 @@ const UARTCC26XX_HWAttrsV2 uartCC26XXHWAttrs[CC1350STK_UARTCOUNT] = { .txIntFifoThr = UARTCC26XX_FIFO_THRESHOLD_1_8, .rxIntFifoThr = UARTCC26XX_FIFO_THRESHOLD_4_8, .errorFxn = NULL - } + }, +#endif }; const UART_Config UART_config[CC1350STK_UARTCOUNT] = { +#if TI_UART_CONF_UART0_ENABLE { .fxnTablePtr = &UARTCC26XX_fxnTable, .object = &uartCC26XXObjects[CC1350STK_UART0], .hwAttrs = &uartCC26XXHWAttrs[CC1350STK_UART0] }, +#endif }; const uint_least8_t UART_count = CC1350STK_UARTCOUNT; +#endif /* TI_UART_CONF_ENABLE */ + /* * =============================== UDMA =============================== */ diff --git a/arch/platform/simplelink/cc13xx-cc26xx/sensortag/cc1350/CC1350STK.h b/arch/platform/simplelink/cc13xx-cc26xx/sensortag/cc1350/CC1350STK.h index 4d3b707af..ea857a185 100644 --- a/arch/platform/simplelink/cc13xx-cc26xx/sensortag/cc1350/CC1350STK.h +++ b/arch/platform/simplelink/cc13xx-cc26xx/sensortag/cc1350/CC1350STK.h @@ -48,6 +48,8 @@ extern "C" { #endif +#include "contiki-conf.h" + /* Includes */ #include #include @@ -233,7 +235,9 @@ typedef enum CC1350STK_GPTimers { * @brief Enum of I2C names */ typedef enum CC1350STK_I2CName { +#if TI_I2C_CONF_I2C0_ENABLE CC1350STK_I2C0 = 0, +#endif CC1350STK_I2CCOUNT } CC1350STK_I2CName; @@ -243,8 +247,12 @@ typedef enum CC1350STK_I2CName { * @brief Enum of NVS names */ typedef enum CC1350STK_NVSName { +#if TI_NVS_CONF_NVS_INTERNAL_ENABLE CC1350STK_NVSCC26XX0 = 0, +#endif +#if TI_NVS_CONF_NVS_EXTERNAL_ENABLE CC1350STK_NVSSPI25X0, +#endif CC1350STK_NVSCOUNT } CC1350STK_NVSName; @@ -281,8 +289,12 @@ typedef enum CC1350STK_PWMName { * @brief Enum of SPI names */ typedef enum CC1350STK_SPIName { +#if TI_SPI_CONF_SPI0_ENABLE CC1350STK_SPI0 = 0, +#endif +#if TI_SPI_CONF_SPI1_ENABLE CC1350STK_SPI1, +#endif CC1350STK_SPICOUNT } CC1350STK_SPIName; @@ -292,7 +304,9 @@ typedef enum CC1350STK_SPIName { * @brief Enum of UARTs */ typedef enum CC1350STK_UARTName { +#if TI_UART_CONF_UART0_ENABLE CC1350STK_UART0 = 0, +#endif CC1350STK_UARTCOUNT } CC1350STK_UARTName; diff --git a/arch/platform/simplelink/cc13xx-cc26xx/sensortag/cc1350/leds-arch.c b/arch/platform/simplelink/cc13xx-cc26xx/sensortag/cc1350/leds-arch.c index e391b0179..020d538bf 100644 --- a/arch/platform/simplelink/cc13xx-cc26xx/sensortag/cc1350/leds-arch.c +++ b/arch/platform/simplelink/cc13xx-cc26xx/sensortag/cc1350/leds-arch.c @@ -27,25 +27,26 @@ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. */ -/*---------------------------------------------------------------------------*/ /** - * \addtogroup simplelink-platform + * \addtogroup sensortag-peripherals * @{ * * \file - * Driver for LaunchPad LEDs + * LED HAL definitions for the CC1350STK LEDs. Is not compatible with + * the CC2650STK. + * \author + * Edvard Pettersen */ /*---------------------------------------------------------------------------*/ -/* Contiki API */ #include "contiki.h" #include "dev/leds.h" /*---------------------------------------------------------------------------*/ -/* Simplelink SDK API */ #include /*---------------------------------------------------------------------------*/ #include /*---------------------------------------------------------------------------*/ const leds_t leds_arch_leds[] = { + /* Red LED, AKA LED0 */ { .pin = Board_PIN_LED0, .negative_logic = false }, }; /*---------------------------------------------------------------------------*/ diff --git a/arch/platform/simplelink/cc13xx-cc26xx/sensortag/cc1350/leds-arch.h b/arch/platform/simplelink/cc13xx-cc26xx/sensortag/cc1350/leds-arch.h index 14b15d048..535396f43 100644 --- a/arch/platform/simplelink/cc13xx-cc26xx/sensortag/cc1350/leds-arch.h +++ b/arch/platform/simplelink/cc13xx-cc26xx/sensortag/cc1350/leds-arch.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, Texas Instruments Incorporated - http://www.ti.com/ + * Copyright (c) 2018, Texas Instruments Incorporated - http://www.ti.com/ * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -27,27 +27,21 @@ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. */ -/*---------------------------------------------------------------------------*/ -/** \addtogroup cc26xx-srf-tag - * @{ - * - * \defgroup launchpad-peripherals LaunchPad peripherals - * - * Defines related to LaunchPad peripherals. - * +/** \addtogroup sensortag-peripherals * @{ * * \file - * Header file with definitions related to LaunchPad peripherals - * - * \note Do not include this file directly. + * LED HAL definitions for the CC1350STK LEDs. Is not compatible with + * the CC2650STK. + * \author + * Edvard Pettersen */ /*---------------------------------------------------------------------------*/ #ifndef LEDS_ARCH_H_ #define LEDS_ARCH_H_ /*---------------------------------------------------------------------------*/ /** - * \name LED configurations + * \name LED configurations for the dev/leds.h API. * * Those values are not meant to be modified by the user * @{ @@ -57,10 +51,10 @@ #define LEDS_CONF_RED 0 #define LEDS_CONF_ALL ((1 << LEDS_CONF_COUNT) - 1) +/** @} */ /*---------------------------------------------------------------------------*/ #endif /* LEDS_ARCH_H_ */ /*---------------------------------------------------------------------------*/ /** - * @} * @} */ diff --git a/arch/platform/simplelink/cc13xx-cc26xx/sensortag/cc2650/CC2650STK.c b/arch/platform/simplelink/cc13xx-cc26xx/sensortag/cc2650/CC2650STK.c index 79df88f05..d070170c9 100644 --- a/arch/platform/simplelink/cc13xx-cc26xx/sensortag/cc2650/CC2650STK.c +++ b/arch/platform/simplelink/cc13xx-cc26xx/sensortag/cc2650/CC2650STK.c @@ -81,19 +81,21 @@ const CryptoCC26XX_Config CryptoCC26XX_config[CC2650STK_CRYPTOCOUNT] = { #include #include -#ifndef CC2650STK_DISPLAY_UART_STRBUF_SIZE -#define CC2650STK_DISPLAY_UART_STRBUF_SIZE 128 +#if TI_DISPLAY_CONF_ENABLE + +#if TI_DISPLAY_CONF_UART_ENABLE + +#if !(TI_UART_CONF_UART0_ENABLE) +#error "Display UART driver requires UART0" #endif -#ifndef CC2650STK_DISPLAY_SHARP_SIZE -#define CC2650STK_DISPLAY_SHARP_SIZE 96 +#ifndef BOARD_DISPLAY_UART_STRBUF_SIZE +#define BOARD_DISPLAY_UART_STRBUF_SIZE 128 #endif -DisplayUart_Object displayUartObject; -DisplaySharp_Object displaySharpObject; - static char uartStringBuf[CC2650STK_DISPLAY_UART_STRBUF_SIZE]; -static uint_least8_t sharpDisplayBuf[CC2650STK_DISPLAY_SHARP_SIZE * CC2650STK_DISPLAY_SHARP_SIZE / 8]; + +DisplaySharp_Object displaySharpObject; const DisplayUart_HWAttrs displayUartHWAttrs = { .uartIdx = CC2650STK_UART0, @@ -103,6 +105,22 @@ const DisplayUart_HWAttrs displayUartHWAttrs = { .strBufLen = CC2650STK_DISPLAY_UART_STRBUF_SIZE, }; +#endif /* TI_DISPLAY_CONF_UART_ENABLE */ + +#if TI_DISPLAY_CONF_LCD_ENABLE + +#if !(TI_SPI_CONF_SPI0_ENABLE) +#error "Display LCD driver requires SPI0" +#endif + +#ifndef BOARD_DISPLAY_SHARP_SIZE +#define BOARD_DISPLAY_SHARP_SIZE 96 +#endif + +static uint_least8_t sharpDisplayBuf[CC2650STK_DISPLAY_SHARP_SIZE * CC2650STK_DISPLAY_SHARP_SIZE / 8]; + +DisplayUart_Object displayUartObject; + const DisplaySharp_HWAttrsV1 displaySharpHWattrs = { .spiIndex = CC2650STK_SPI0, .csPin = CC2650STK_GPIO_LCD_CS, @@ -113,30 +131,18 @@ const DisplaySharp_HWAttrsV1 displaySharpHWattrs = { .displayBuf = sharpDisplayBuf, }; -/* - * The pins for the UART and Watch Devpack conflict, prefer UART by default - */ -#ifndef BOARD_DISPLAY_USE_UART -#define BOARD_DISPLAY_USE_UART 1 -#endif -#ifndef BOARD_DISPLAY_USE_UART_ANSI -#define BOARD_DISPLAY_USE_UART_ANSI 0 -#endif -#ifndef BOARD_DISPLAY_USE_LCD -#define BOARD_DISPLAY_USE_LCD 0 -#endif +#endif /* TI_DISPLAY_CONF_LCD_ENABLE */ /* * This #if/#else is needed to workaround a problem with the * IAR compiler. The IAR compiler doesn't like the empty array * initialization. (IAR Error[Pe1345]) */ -#if (BOARD_DISPLAY_USE_UART || BOARD_DISPLAY_USE_LCD) const Display_Config Display_config[] = { -#if (BOARD_DISPLAY_USE_UART) +#if TI_DISPLAY_CONF_UART_ENABLE { -# if (BOARD_DISPLAY_USE_UART_ANSI) +# if TI_DISPLAY_CONF_USE_UART_ANSI .fxnTablePtr = &DisplayUartAnsi_fxnTable, # else /* Default to minimal UART with no cursor placement */ .fxnTablePtr = &DisplayUartMin_fxnTable, @@ -146,7 +152,7 @@ const Display_Config Display_config[] = { .hwAttrs = &displayUartHWAttrs, }, #endif -#if (BOARD_DISPLAY_USE_LCD) +#if TI_DISPLAY_CONF_LCD_ENABLE { .fxnTablePtr = &DisplaySharp_fxnTable, .object = &displaySharpObject, @@ -162,7 +168,7 @@ const uint_least8_t Display_count = sizeof(Display_config) / sizeof(Display_Conf const Display_Config *Display_config = NULL; const uint_least8_t Display_count = 0; -#endif /* (BOARD_DISPLAY_USE_UART || BOARD_DISPLAY_USE_LCD) */ +#endif /* TI_DISPLAY_CONF_ENABLE */ /* * =============================== GPIO =============================== @@ -250,9 +256,12 @@ const GPTimerCC26XX_Config GPTimerCC26XX_config[CC2650STK_GPTIMERPARTSCOUNT] = { #include #include +#if TI_I2C_CONF_ENABLE + I2CCC26XX_Object i2cCC26xxObjects[CC2650STK_I2CCOUNT]; const I2CCC26XX_HWAttrsV1 i2cCC26xxHWAttrs[CC2650STK_I2CCOUNT] = { +#if TI_I2C_CONF_I2C0_ENABLE { .baseAddr = I2C0_BASE, .powerMngrId = PowerCC26XX_PERIPH_I2C0, @@ -261,19 +270,24 @@ const I2CCC26XX_HWAttrsV1 i2cCC26xxHWAttrs[CC2650STK_I2CCOUNT] = { .swiPriority = 0, .sdaPin = CC2650STK_I2C0_SDA0, .sclPin = CC2650STK_I2C0_SCL0, - } + }, +#endif }; const I2C_Config I2C_config[CC2650STK_I2CCOUNT] = { +#if TI_I2C_CONF_I2C0_ENABLE { .fxnTablePtr = &I2CCC26XX_fxnTable, .object = &i2cCC26xxObjects[CC2650STK_I2C0], .hwAttrs = &i2cCC26xxHWAttrs[CC2650STK_I2C0] }, +#endif }; const uint_least8_t I2C_count = CC2650STK_I2CCOUNT; +#endif /* TI_I2C_CONF_ENABLE */ + /* * =============================== NVS =============================== */ @@ -284,10 +298,10 @@ const uint_least8_t I2C_count = CC2650STK_I2CCOUNT; #define NVS_REGIONS_BASE 0x1A000 #define SECTORSIZE 0x1000 #define REGIONSIZE (SECTORSIZE * 4) -#define SPIREGIONSIZE (SECTORSIZE * 32) -#define VERIFYBUFSIZE 64 -static uint8_t verifyBuf[VERIFYBUFSIZE]; +#if TI_NVS_CONF_ENABLE + +#if TI_NVS_CONF_NVS_INTERNAL_ENABLE /* * Reserve flash sectors for NVS driver use by placing an uninitialized byte @@ -326,9 +340,7 @@ static char flashBuf[REGIONSIZE]; #endif -/* Allocate objects for NVS and NVS SPI */ NVSCC26XX_Object nvsCC26xxObjects[1]; -NVSSPI25X_Object nvsSPI25XObjects[1]; /* Hardware attributes for NVS */ const NVSCC26XX_HWAttrs nvsCC26xxHWAttrs[1] = { @@ -338,12 +350,25 @@ const NVSCC26XX_HWAttrs nvsCC26xxHWAttrs[1] = { }, }; +#endif /* TI_NVS_CONF_NVS_INTERNAL_ENABLE */ + +#if TI_NVS_CONF_NVS_EXTERNAL_ENABLE + +#define SPISECTORSIZE 0x1000 +#define SPIREGIONSIZE (SPISECTORSIZE * 32) +#define VERIFYBUFSIZE 64 + +static uint8_t verifyBuf[VERIFYBUFSIZE]; + +/* Allocate objects for NVS and NVS SPI */ +NVSSPI25X_Object nvsSPI25XObjects[1]; + /* Hardware attributes for NVS SPI */ const NVSSPI25X_HWAttrs nvsSPI25XHWAttrs[1] = { { .regionBaseOffset = 0, .regionSize = SPIREGIONSIZE, - .sectorSize = SECTORSIZE, + .sectorSize = SPISECTORSIZE, .verifyBuf = verifyBuf, .verifyBufSize = VERIFYBUFSIZE, .spiHandle = NULL, @@ -353,22 +378,30 @@ const NVSSPI25X_HWAttrs nvsSPI25XHWAttrs[1] = { }, }; +#endif /* Board_EXCLUDE_NVS_EXTERNAL_FLASH */ + /* NVS Region index 0 and 1 refer to NVS and NVS SPI respectively */ const NVS_Config NVS_config[CC2650STK_NVSCOUNT] = { +#if TI_NVS_CONF_NVS_INTERNAL_ENABLE { .fxnTablePtr = &NVSCC26XX_fxnTable, .object = &nvsCC26xxObjects[0], .hwAttrs = &nvsCC26xxHWAttrs[0], }, +#endif +#if TI_NVS_CONF_NVS_EXTERNAL_ENABLE { .fxnTablePtr = &NVSSPI25X_fxnTable, .object = &nvsSPI25XObjects[0], .hwAttrs = &nvsSPI25XHWAttrs[0], }, +#endif }; const uint_least8_t NVS_count = CC2650STK_NVSCOUNT; +#endif /* TI_NVS_CONF_ENABLE */ + /* * =============================== PDM =============================== */ @@ -517,9 +550,12 @@ const RFCC26XX_HWAttrsV2 RFCC26XX_hwAttrs = { #include #include +#if TI_SPI_CONF_ENABLE + SPICC26XXDMA_Object spiCC26XXDMAObjects[CC2650STK_SPICOUNT]; const SPICC26XXDMA_HWAttrsV1 spiCC26XXDMAHWAttrs[CC2650STK_SPICOUNT] = { +#if TI_SPI_CONF_SPI0_ENABLE { .baseAddr = SSI0_BASE, .intNum = INT_SSI0_COMB, @@ -535,6 +571,8 @@ const SPICC26XXDMA_HWAttrsV1 spiCC26XXDMAHWAttrs[CC2650STK_SPICOUNT] = { .csnPin = CC2650STK_SPI0_CSN, .minDmaTransferSize = 10 }, +#endif +#if TI_SPI_CONF_SPI1_ENABLE { .baseAddr = SSI1_BASE, .intNum = INT_SSI1_COMB, @@ -549,35 +587,45 @@ const SPICC26XXDMA_HWAttrsV1 spiCC26XXDMAHWAttrs[CC2650STK_SPICOUNT] = { .clkPin = CC2650STK_SPI1_CLK, .csnPin = CC2650STK_SPI1_CSN, .minDmaTransferSize = 10 - } + }, +#endif }; const SPI_Config SPI_config[CC2650STK_SPICOUNT] = { +#if TI_SPI_CONF_SPI0_ENABLE { .fxnTablePtr = &SPICC26XXDMA_fxnTable, .object = &spiCC26XXDMAObjects[CC2650STK_SPI0], .hwAttrs = &spiCC26XXDMAHWAttrs[CC2650STK_SPI0] }, +#endif +#if TI_SPI_CONF_SPI1_ENABLE { .fxnTablePtr = &SPICC26XXDMA_fxnTable, .object = &spiCC26XXDMAObjects[CC2650STK_SPI1], .hwAttrs = &spiCC26XXDMAHWAttrs[CC2650STK_SPI1] }, +#endif }; const uint_least8_t SPI_count = CC2650STK_SPICOUNT; +#endif /* TI_SPI_CONF_ENABLE */ + /* * =============================== UART =============================== */ #include #include +#if TI_UART_CONF_ENABLE + UARTCC26XX_Object uartCC26XXObjects[CC2650STK_UARTCOUNT]; uint8_t uartCC26XXRingBuffer[CC2650STK_UARTCOUNT][32]; const UARTCC26XX_HWAttrsV2 uartCC26XXHWAttrs[CC2650STK_UARTCOUNT] = { +#if TI_UART_CONF_UART0_ENABLE { .baseAddr = UART0_BASE, .powerMngrId = PowerCC26XX_PERIPH_UART0, @@ -593,19 +641,24 @@ const UARTCC26XX_HWAttrsV2 uartCC26XXHWAttrs[CC2650STK_UARTCOUNT] = { .txIntFifoThr = UARTCC26XX_FIFO_THRESHOLD_1_8, .rxIntFifoThr = UARTCC26XX_FIFO_THRESHOLD_4_8, .errorFxn = NULL - } + }, +#endif }; const UART_Config UART_config[CC2650STK_UARTCOUNT] = { +#if TI_UART_CONF_UART0_ENABLE { .fxnTablePtr = &UARTCC26XX_fxnTable, .object = &uartCC26XXObjects[CC2650STK_UART0], .hwAttrs = &uartCC26XXHWAttrs[CC2650STK_UART0] }, +#endif }; const uint_least8_t UART_count = CC2650STK_UARTCOUNT; +#endif /* TI_UART_CONF_ENABLE */ + /* * =============================== UDMA =============================== */ diff --git a/arch/platform/simplelink/cc13xx-cc26xx/sensortag/cc2650/CC2650STK.h b/arch/platform/simplelink/cc13xx-cc26xx/sensortag/cc2650/CC2650STK.h index 8511cd524..0264ae110 100644 --- a/arch/platform/simplelink/cc13xx-cc26xx/sensortag/cc2650/CC2650STK.h +++ b/arch/platform/simplelink/cc13xx-cc26xx/sensortag/cc2650/CC2650STK.h @@ -48,6 +48,8 @@ extern "C" { #endif +#include "contiki-conf.h" + /* Includes */ #include #include @@ -234,7 +236,9 @@ typedef enum CC2650STK_GPTimers { * @brief Enum of I2C names */ typedef enum CC2650STK_I2CName { +#if TI_I2C_CONF_I2C0_ENABLE CC2650STK_I2C0 = 0, +#endif CC2650STK_I2CCOUNT } CC2650STK_I2CName; @@ -244,8 +248,12 @@ typedef enum CC2650STK_I2CName { * @brief Enum of NVS names */ typedef enum CC2650STK_NVSName { +#if TI_NVS_CONF_NVS_INTERNAL_ENABLE CC2650STK_NVSCC26XX0 = 0, +#endif +#if TI_NVS_CONF_NVS_EXTERNAL_ENABLE CC2650STK_NVSSPI25X0, +#endif CC2650STK_NVSCOUNT } CC2650STK_NVSName; @@ -282,8 +290,12 @@ typedef enum CC2650STK_PWMName { * @brief Enum of SPI names */ typedef enum CC2650STK_SPIName { +#if TI_SPI_CONF_SPI0_ENABLE CC2650STK_SPI0 = 0, +#endif +#if TI_SPI_CONF_SPI1_ENABLE CC2650STK_SPI1, +#endif CC2650STK_SPICOUNT } CC2650STK_SPIName; @@ -293,7 +305,10 @@ typedef enum CC2650STK_SPIName { * @brief Enum of UARTs */ typedef enum CC2650STK_UARTName { +#if TI_UART_CONF_UART0_ENABLE CC2650STK_UART0 = 0, +#endif + CC2650STK_UARTCOUNT } CC2650STK_UARTName; diff --git a/arch/platform/simplelink/cc13xx-cc26xx/sensortag/cc2650/leds-arch.c b/arch/platform/simplelink/cc13xx-cc26xx/sensortag/cc2650/leds-arch.c index 3078ea040..97b2ca597 100644 --- a/arch/platform/simplelink/cc13xx-cc26xx/sensortag/cc2650/leds-arch.c +++ b/arch/platform/simplelink/cc13xx-cc26xx/sensortag/cc2650/leds-arch.c @@ -27,26 +27,28 @@ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. */ -/*---------------------------------------------------------------------------*/ /** - * \addtogroup simplelink-platform + * \addtogroup sensortag-peripherals * @{ * * \file - * Driver for LaunchPad LEDs + * LED HAL definitions for the CC2650STK LEDs. Is not compatible with + * the CC1350STK. + * \author + * Edvard Pettersen */ /*---------------------------------------------------------------------------*/ -/* Contiki API */ #include "contiki.h" #include "dev/leds.h" /*---------------------------------------------------------------------------*/ -/* Simplelink SDK API */ #include /*---------------------------------------------------------------------------*/ #include /*---------------------------------------------------------------------------*/ const leds_t leds_arch_leds[] = { + /* Red LED, AKA LED0 */ { .pin = Board_PIN_LED0, .negative_logic = false }, + /* Green LED, AKA LED1 */ { .pin = Board_PIN_LED1, .negative_logic = false }, }; /*---------------------------------------------------------------------------*/ diff --git a/arch/platform/simplelink/cc13xx-cc26xx/sensortag/cc2650/leds-arch.h b/arch/platform/simplelink/cc13xx-cc26xx/sensortag/cc2650/leds-arch.h index e002e7650..fcb89bd69 100644 --- a/arch/platform/simplelink/cc13xx-cc26xx/sensortag/cc2650/leds-arch.h +++ b/arch/platform/simplelink/cc13xx-cc26xx/sensortag/cc2650/leds-arch.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, Texas Instruments Incorporated - http://www.ti.com/ + * Copyright (c) 2018, Texas Instruments Incorporated - http://www.ti.com/ * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -27,27 +27,21 @@ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. */ -/*---------------------------------------------------------------------------*/ -/** \addtogroup cc26xx-srf-tag - * @{ - * - * \defgroup launchpad-peripherals LaunchPad peripherals - * - * Defines related to LaunchPad peripherals. - * +/** \addtogroup sensortag-peripherals * @{ * * \file - * Header file with definitions related to LaunchPad peripherals - * - * \note Do not include this file directly. + * LED HAL definitions for the CC1350STK LEDs. Is not compatible with + * the CC2650STK. + * \author + * Edvard Pettersen */ /*---------------------------------------------------------------------------*/ #ifndef LEDS_ARCH_H_ #define LEDS_ARCH_H_ /*---------------------------------------------------------------------------*/ /** - * \name LED configurations + * \name LED configurations for the dev/leds.h API. * * Those values are not meant to be modified by the user * @{ @@ -58,10 +52,10 @@ #define LEDS_CONF_GREEN 1 #define LEDS_CONF_ALL ((1 << LEDS_CONF_COUNT) - 1) +/** @} */ /*---------------------------------------------------------------------------*/ #endif /* LEDS_ARCH_H_ */ /*---------------------------------------------------------------------------*/ /** - * @} * @} */ diff --git a/arch/platform/simplelink/cc13xx-cc26xx/sensortag/ext-flash.c b/arch/platform/simplelink/cc13xx-cc26xx/sensortag/ext-flash.c deleted file mode 100644 index a78a5e764..000000000 --- a/arch/platform/simplelink/cc13xx-cc26xx/sensortag/ext-flash.c +++ /dev/null @@ -1,468 +0,0 @@ -/* - * Copyright (c) 2014, Texas Instruments Incorporated - http://www.ti.com/ - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the copyright holder nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - */ -/*---------------------------------------------------------------------------*/ -/** - * \addtogroup sensortag-cc26xx-ext-flash - * @{ - * - * \file - * Sensortag/LaunchPad External Flash Driver - */ -/*---------------------------------------------------------------------------*/ -#include -#include -#include -/*---------------------------------------------------------------------------*/ -#include "contiki.h" -#include "ext-flash.h" -#include "ti-lib.h" -/*---------------------------------------------------------------------------*/ -#include -#include -#include -/*---------------------------------------------------------------------------*/ -static PIN_Config pin_table[] = { - Board_SPI_FLASH_CS | PIN_GPIO_OUTPUT_EN | PIN_GPIO_HIGH | PIN_PUSHPULL | PIN_DRVSTR_MIN, - PIN_TERMINATE -}; - -static PIN_State pin_state; -static PIN_Handle pin_handle; - -static SPI_Handle spi_handle; - -static bool ext_flash_opened; -/*---------------------------------------------------------------------------*/ -#define SPI_BIT_RATE 4000000 - -/* Instruction codes */ -#define BLS_CODE_PROGRAM 0x02 /**< Page Program */ -#define BLS_CODE_READ 0x03 /**< Read Data */ -#define BLS_CODE_READ_STATUS 0x05 /**< Read Status Register */ -#define BLS_CODE_WRITE_ENABLE 0x06 /**< Write Enable */ -#define BLS_CODE_SECTOR_ERASE 0x20 /**< Sector Erase */ -#define BLS_CODE_MDID 0x90 /**< Manufacturer Device ID */ - -#define BLS_CODE_DP 0xB9 /**< Power down */ -#define BLS_CODE_RDP 0xAB /**< Power standby */ - -/* Erase instructions */ -#define BLS_CODE_ERASE_4K 0x20 /**< Sector Erase */ -#define BLS_CODE_ERASE_32K 0x52 -#define BLS_CODE_ERASE_64K 0xD8 -#define BLS_CODE_ERASE_ALL 0xC7 /**< Mass Erase */ - -/* Bitmasks of the status register */ -#define BLS_STATUS_SRWD_BM 0x80 -#define BLS_STATUS_BP_BM 0x0C -#define BLS_STATUS_WEL_BM 0x02 -#define BLS_STATUS_WIP_BM 0x01 - -#define BLS_STATUS_BIT_BUSY 0x01 /**< Busy bit of the status register */ - -/* Part specific constants */ -#define BLS_PROGRAM_PAGE_SIZE 0x100 /**< Page size 0x100 */ -#define BLS_ERASE_SECTOR_SIZE 0x1000 /**< Sector size 0x1000 */ -/*---------------------------------------------------------------------------*/ -typedef struct -{ - uint8_t manfId; /**< Manufacturer ID */ - uint8_t devId; /**< Device ID */ -} ExtFlashInfo; -/* Supported flash devices */ -static const ExtFlashInfo supported_devices[] = -{ - { - .manfId = 0xC2, /**< Macronics MX25R1635F */ - .devId = 0x15 - }, - { - .manfId = 0xC2, /**< Macronics MX25R8035F */ - .devId = 0x14 - }, - { - .manfId = 0xEF, /**< WinBond W25X40CL */ - .devId = 0x12 - }, - { - .manfId = 0xEF, /**< WinBond W25X20CL */ - .devId = 0x11 - } -}; -/*---------------------------------------------------------------------------*/ -static bool -spi_write(const uint8_t *buf, size_t len) -{ - SPI_Transaction spiTransaction; - spiTransaction.count = len; - spiTransaction.txBuf = (void *)buf; - spiTransaction.rxBuf = NULL; - - return SPI_transfer(spi_handle, &spiTransaction); -} -/*---------------------------------------------------------------------------*/ -static bool -spi_read(uint8_t *buf, size_t len) -{ - SPI_Transaction spiTransaction; - spiTransaction.count = len; - spiTransaction.txBuf = NULL; - spiTransaction.rxBuf = buf; - - return SPI_transfer(spi_handle, &spiTransaction); -} -/*---------------------------------------------------------------------------*/ -static void -select(void) -{ - PIN_setOutputValue(pin_handle, Board_SPI_FLASH_CS, 1); -} -/*---------------------------------------------------------------------------*/ -static void -deselect(void) -{ - PIN_setOutputValue(pin_handle, Board_SPI_FLASH_CS, 0); -} -/*---------------------------------------------------------------------------*/ -static bool -wait_ready(void) -{ - const uint8_t wbuf[] = { BLS_CODE_READ_STATUS }; - uint8_t rbuf[1] = { 0x0 }; - - /* TODO are 1000 tries enough? */ - for (size_t i = 0; i < 1000; ++i) { - select(); - - const bool spi_ok = spi_write(wbuf, sizeof(wbuf)) - && spi_read(rbuf, sizeof(rbuf)); - - deselect(); - - if (!spi_ok) { - /* Error */ - return false; - } - if (!(rbuf[0] & BLS_STATUS_BIT_BUSY)) { - /* Now ready */ - return true; - } - } - - return false; -} -/*---------------------------------------------------------------------------*/ -static bool -power_standby(void) -{ - const uint8_t cmd[] = { BLS_CODE_RDP }; - - select(); - - const bool spi_ok = spi_write(cmd, sizeof(cmd)); - - deselect(); - - if (!spi_ok) { - return false; - } - - /* Waking up of the device is manufacturer dependent. - * for a Winond chip-set, once the request to wake up the flash has been - * send, CS needs to stay high at least 3us (for Winbond part) - * for chip-set like Macronix, it can take up to 35us. - * 3 cycles per loop: 560 loops @ 48 MHz = 35 us */ - ti_lib_cpu_delay(560); - - return wait_ready(); -} -/*---------------------------------------------------------------------------*/ -static bool -power_down(void) -{ - const uint8_t cmd[] = { BLS_CODE_DP }; - - select(); - - const bool spi_ok = spi_write(cmd, sizeof(cmd)); - - deselect(); - - return spi_ok; -} -/*---------------------------------------------------------------------------*/ -static bool -write_enable(void) -{ - const uint8_t wbuf[] = { BLS_CODE_WRITE_ENABLE }; - - select(); - - const bool spi_ok = spi_write(wbuf, sizeof(wbuf)); - - deselect(); - - return spi_ok; -} -/*---------------------------------------------------------------------------*/ -/** - * \brief Verify the flash part. - * \retval bool true on success; else, false - */ -static bool -verify_part(void) -{ - const uint8_t wbuf[] = { BLS_CODE_MDID, 0xFF, 0xFF, 0x00 }; - uint8_t rbuf[2] = { 0x0 }; - - const bool spi_ok = spi_write(wbuf, sizeof(wbuf)) - && spi_read(rbuf, sizeof(rbuf)); - - if (!spi_ok) { - return false; - } - - const ExtFlashInfo curr_device = { - .manfId = rbuf[0], - .devId = rbuf[1] - }; - - const size_t num_devices = sizeof(supported_devices) / sizeof(supported_devices[0]); - for (size_t i = 0; i < num_devices; ++i) { - if (curr_device.manfId == supported_devices[i].manfId && - curr_device.devId == supported_devices[i].devId) { - return true; - } - } - - return false; -} -/*---------------------------------------------------------------------------*/ -bool -ext_flash_open() -{ - if (ext_flash_opened) { - return true; - } - - pin_handle = PIN_open(&pin_state, pin_table); - - if (pin_handle == NULL) { - return false; - } - - SPI_Params spiParams; - SPI_Params_init(&spiParams); - spiParams.bitRate = SPI_BIT_RATE; - spiParams.mode = SPI_MASTER; - spiParams.transferMode = SPI_MODE_BLOCKING; - - spi_handle = SPI_open(Board_SPI0, &spiParams); - - if (spi_handle == NULL) { - PIN_close(pin_handle); - return false; - } - - ext_flash_opened = true; - - deselect(); - - const bool is_powered = power_standby(); - if (!is_powered) { - ext_flash_close(); - return false; - } - - return verify_part(); -} -/*---------------------------------------------------------------------------*/ -void -ext_flash_close() -{ - if (!ext_flash_opened) { - return; - } - ext_flash_opened = false; - - power_down(); - - SPI_close(spi_handle); - PIN_close(pin_handle); -} -/*---------------------------------------------------------------------------*/ -bool -ext_flash_read(size_t offset, size_t length, uint8_t *buf) -{ - if (spi_handle == NULL || buf == NULL) { - return false; - } - - if (length == 0) { - return true; - } - - const bool is_ready = wait_ready(); - if (!is_ready) { - return false; - } - - const uint8_t wbuf[] = { - BLS_CODE_READ, - (offset >> 16) & 0xFF, - (offset >> 8) & 0xFF, - (offset >> 0) & 0xFF, - }; - - select(); - - const bool spi_ok = spi_write(wbuf, sizeof(wbuf)) - && spi_read(buf, length); - - deselect(); - - return (spi_ok); -} -/*---------------------------------------------------------------------------*/ -bool -ext_flash_write(size_t offset, size_t length, const uint8_t *buf) -{ - if (spi_handle == NULL || buf == NULL) { - return false; - } - - uint8_t wbuf[4] = { BLS_CODE_PROGRAM, 0, 0, 0 }; - - while (length > 0) - { - /* Wait till previous erase/program operation completes */ - if (!wait_ready()) { - return false; - } - - /* Enable writing */ - if (!write_enable()) { - return false; - } - - /* Interim length per instruction */ - size_t ilen = BLS_PROGRAM_PAGE_SIZE - (offset % BLS_PROGRAM_PAGE_SIZE); - if (length < ilen) { - ilen = length; - } - - wbuf[1] = (offset >> 16) & 0xFF; - wbuf[2] = (offset >> 8) & 0xFF; - wbuf[3] = (offset >> 0) & 0xFF; - - offset += ilen; - length -= ilen; - - /* Up to 100ns CS hold time (which is not clear - * whether it's application only in between reads) - * is not imposed here since above instructions - * should be enough to delay - * as much. */ - select(); - - const bool spi_ok = spi_write(wbuf, sizeof(wbuf)) - && spi_write(buf, ilen); - - buf += ilen; - - deselect(); - - if (!spi_ok) { - return false; - } - } - - return true; -} -/*---------------------------------------------------------------------------*/ -bool -ext_flash_erase(size_t offset, size_t length) -{ - /* Note that Block erase might be more efficient when the floor map - * is well planned for OTA but to simplify for the temporary implemetation, - * sector erase is used blindly. */ - uint8_t wbuf[4] = { BLS_CODE_SECTOR_ERASE, 0x0, 0x0, 0x0 }; - - const size_t endoffset = offset + length - 1; - offset = (offset / BLS_ERASE_SECTOR_SIZE) * BLS_ERASE_SECTOR_SIZE; - const size_t numsectors = (endoffset - offset + BLS_ERASE_SECTOR_SIZE - 1) / BLS_ERASE_SECTOR_SIZE; - - for (size_t i = 0; i < numsectors; ++i) { - /* Wait till previous erase/program operation completes */ - if (!wait_ready()) { - return false; - } - - /* Enable writing */ - if (!write_enable()) { - return false; - } - - wbuf[1] = (offset >> 16) & 0xFF; - wbuf[2] = (offset >> 8) & 0xFF; - wbuf[3] = (offset >> 0) & 0xFF; - - select(); - - const bool spi_ok = spi_write(wbuf, sizeof(wbuf)); - - deselect(); - - if (!spi_ok) { - return false; - } - - offset += BLS_ERASE_SECTOR_SIZE; - } - - return true; -} -/*---------------------------------------------------------------------------*/ -bool -ext_flash_test(void) -{ - const bool ret = ext_flash_open(); - ext_flash_close(); - - return ret; -} -/*---------------------------------------------------------------------------*/ -void -ext_flash_init() -{ - SPI_init(); -} -/*---------------------------------------------------------------------------*/ -/** @} */ diff --git a/arch/platform/simplelink/cc13xx-cc26xx/sensortag/ext-flash.h b/arch/platform/simplelink/cc13xx-cc26xx/sensortag/ext-flash.h deleted file mode 100644 index 5f2717edb..000000000 --- a/arch/platform/simplelink/cc13xx-cc26xx/sensortag/ext-flash.h +++ /dev/null @@ -1,116 +0,0 @@ -/* - * Copyright (c) 2014, Texas Instruments Incorporated - http://www.ti.com/ - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the copyright holder nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - */ -/*---------------------------------------------------------------------------*/ -/** - * \addtogroup common-cc26xx-peripherals - * @{ - * - * \defgroup sensortag-cc26xx-ext-flash SensorTag/LaunchPad External Flash - * @{ - * - * \file - * Header file for the Sensortag/LaunchPad External Flash Driver - */ -/*---------------------------------------------------------------------------*/ -#ifndef EXT_FLASH_H_ -#define EXT_FLASH_H_ -/*---------------------------------------------------------------------------*/ -#include -#include -#include -/*---------------------------------------------------------------------------*/ -/** - * \brief Initialize storage driver. - * \return True when successful. - */ -bool ext_flash_open(void); - -/** - * \brief Close the storage driver - * - * This call will put the device in its lower power mode (power down). - */ -void ext_flash_close(void); - -/** - * \brief Read storage content - * \param offset Address to read from - * \param length Number of bytes to read - * \param buf Buffer where to store the read bytes - * \return True when successful. - * - * buf must be allocated by the caller - */ -bool ext_flash_read(size_t offset, size_t length, uint8_t *buf); - -/** - * \brief Erase storage sectors corresponding to the range. - * \param offset Address to start erasing - * \param length Number of bytes to erase - * \return True when successful. - * - * The erase operation will be sector-wise, therefore a call to this function - * will generally start the erase procedure at an address lower than offset - */ -bool ext_flash_erase(size_t offset, size_t length); - -/** - * \brief Write to storage sectors. - * \param offset Address to write to - * \param length Number of bytes to write - * \param buf Buffer holding the bytes to be written - * - * \return True when successful. - */ -bool ext_flash_write(size_t offset, size_t length, const uint8_t *buf); - -/** - * \brief Test the flash (power on self-test) - * \return True when successful. - */ -bool ext_flash_test(void); - -/** - * \brief Initialise the external flash - * - * This function will explicitly put the part in its lowest power mode - * (power-down). - * - * In order to perform any operation, the caller must first wake the device - * up by calling ext_flash_open() - */ -void ext_flash_init(void); -/*---------------------------------------------------------------------------*/ -#endif /* EXT_FLASH_H_ */ -/*---------------------------------------------------------------------------*/ -/** - * @} - * @} - */ diff --git a/arch/platform/simplelink/cc13xx-cc26xx/sensortag/hdc-1000-sensor.c b/arch/platform/simplelink/cc13xx-cc26xx/sensortag/hdc-1000-sensor.c index 7e8f9ccb0..64f1a01ce 100644 --- a/arch/platform/simplelink/cc13xx-cc26xx/sensortag/hdc-1000-sensor.c +++ b/arch/platform/simplelink/cc13xx-cc26xx/sensortag/hdc-1000-sensor.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, Texas Instruments Incorporated - http://www.ti.com/ + * Copyright (c) 2018, Texas Instruments Incorporated - http://www.ti.com/ * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -27,13 +27,14 @@ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. */ -/*---------------------------------------------------------------------------*/ /** - * \addtogroup sensortag-cc26xx-hdc-sensor + * \addtogroup sensortag-hdc-sensor * @{ * * \file - * Driver for the Sensortag HDC sensor + * Driver for the Sensortag HDC1000 sensor. + * \author + * Edvard Pettersen */ /*---------------------------------------------------------------------------*/ #include "contiki.h" @@ -58,7 +59,7 @@ #endif /*---------------------------------------------------------------------------*/ #ifndef Board_HDC1000_ADDR -# error "Board file doesn't define I2C address Board_HDC1000_ADDR" +# error "Board file doesn't define the I2C address Board_HDC1000_ADDR" #endif /* Sensor I2C address */ #define HDC1000_I2C_ADDRESS Board_HDC1000_ADDR @@ -72,15 +73,11 @@ #define HDC1000_REG_SERID_L 0xFD /* Serial ID low */ #define HDC1000_REG_MANF_ID 0xFE /* Manufacturer ID */ #define HDC1000_REG_DEV_ID 0xFF /* Device ID */ - +/*---------------------------------------------------------------------------*/ /* Fixed values */ #define HDC1000_VAL_MANF_ID 0x5449 #define HDC1000_VAL_DEV_ID 0x1000 #define HDC1000_VAL_CONFIG 0x1000 /* 14 bit, acquired in sequence */ - -/* Sensor selection/deselection */ -#define SENSOR_SELECT() board_i2c_select(BOARD_I2C_INTERFACE_0, SENSOR_I2C_ADDRESS) -#define SENSOR_DESELECT() board_i2c_deselect() /*---------------------------------------------------------------------------*/ /* Byte swap of 16-bit register value */ #define HI_UINT16(a) (((a) >> 8) & 0xFF) @@ -90,7 +87,7 @@ #define LSB16(v) (LO_UINT16(v)), (HI_UINT16(v)) /*---------------------------------------------------------------------------*/ -static I2C_Handle i2cHandle; +static I2C_Handle i2c_handle; /*---------------------------------------------------------------------------*/ /* Raw data as returned from the sensor (Big Endian) */ typedef struct { @@ -117,43 +114,74 @@ static volatile HDC_1000_SENSOR_STATUS sensor_status = HDC_1000_SENSOR_STATUS_DI static struct ctimer startup_timer; /*---------------------------------------------------------------------------*/ +/** + * \brief Setup and peform an I2C transaction. + * \param wbuf Output buffer during the I2C transation. + * \param wcount How many bytes in the wbuf. + * \param rbuf Input buffer during the I2C transation. + * \param rcount How many bytes to read into rbuf. + * \return true if the I2C operation was successful; + * else, return false. + */ static bool -i2c_transaction(void *writeBuf, size_t writeCount, void *readBuf, size_t readCount) +i2c_write_read(void *wbuf, size_t wcount, void *rbuf, size_t rcount) { - I2C_Transaction i2cTransaction = { - .writeBuf = writeBuf, - .writeCount = writeCount, - .readBuf = readBuf, - .readCount = readCount, + I2C_Transaction i2c_transaction = { + .writeBuf = wbuf, + .writeCount = wcount, + .readBuf = rbuf, + .readCount = rcount, .slaveAddress = HDC1000_I2C_ADDRESS, }; - return I2C_transfer(i2cHandle, &i2cTransaction); + return I2C_transfer(i2c_handle, &i2c_transaction); } -#define i2c_write(writeBuf, writeCount) i2c_transaction(writeBuf, writeCount, NULL, 0) -#define i2c_read(readBuf, readCount) i2c_transaction(NULL, 0, readBuf, readCount) -#define i2c_write_read(writeBuf, writeCount, readBuf, readCount) \ - i2c_transaction(writeBuf, writeCount, readBuf, readCount) +/** + * \brief Peform a write only I2C transaction. + * \param wbuf Output buffer during the I2C transation. + * \param wcount How many bytes in the wbuf. + * \return true if the I2C operation was successful; + * else, return false. + */ +static inline bool +i2c_write(void *wbuf, size_t wcount) +{ + return i2c_write_read(wbuf, wcount, NULL, 0); +} + +/** + * \brief Peform a read only I2C transaction. + * \param rbuf Input buffer during the I2C transation. + * \param rcount How many bytes to read into rbuf. + * \return true if the I2C operation was successful; + * else, return false. + */ +static inline bool +i2c_read(void *rbuf, size_t rcount) +{ + return i2c_write_read(NULL, 0, rbuf, rcount); +} /*---------------------------------------------------------------------------*/ /** - * \brief Initialise the humidity sensor driver - * \return True if I2C operation successful + * \brief Initialize the HDC-1000 sensor driver. + * \return true if I2C operation successful; else, return false. */ static bool sensor_init(void) { - if (i2cHandle) { + if (i2c_handle) { return true; } - I2C_Params i2cParams; - I2C_Params_init(&i2cParams); - i2cParams.transferMode = I2C_MODE_BLOCKING; - i2cParams.bitRate = I2C_400kHz; + I2C_Params i2c_params; + I2C_Params_init(&i2c_params); - i2cHandle = I2C_open(Board_I2C0, &i2cParams); - if (i2cHandle == NULL) { + i2c_params.transferMode = I2C_MODE_BLOCKING; + i2c_params.bitRate = I2C_400kHz; + + i2c_handle = I2C_open(Board_I2C0, &i2c_params); + if (i2c_handle == NULL) { return false; } @@ -164,8 +192,8 @@ sensor_init(void) } /*---------------------------------------------------------------------------*/ /** - * \brief Start measurement - * \return True if I2C operation successful + * \brief Start measurement. + * \return true if I2C operation successful; else, return false. */ static bool start(void) @@ -176,9 +204,9 @@ start(void) } /*---------------------------------------------------------------------------*/ /** - * \brief Convert raw data to temperature and humidity - * \param temp - converted temperature - * \param hum - converted humidity + * \brief Convert raw data to temperature and humidity. + * \param temp Output variable to store converted temperature. + * \param hum Output variable to store converted humidity. */ static void convert(int32_t *temp, int32_t *hum) @@ -192,9 +220,15 @@ convert(int32_t *temp, int32_t *hum) *hum = raw_hum * 100 * 100 / 65536; } /*---------------------------------------------------------------------------*/ +/** + * \brief Callback when sensor is ready to read data from. + */ static void -notify_ready(void *not_used) +notify_ready(void *unused) { + /* Unused args */ + (void)unused; + /* Latch readings */ if (i2c_read(&sensor_data, sizeof(sensor_data))) { sensor_status = HDC_1000_SENSOR_STATUS_READINGS_READY; @@ -206,9 +240,9 @@ notify_ready(void *not_used) } /*---------------------------------------------------------------------------*/ /** - * \brief Returns a reading from the sensor - * \param type HDC_1000_SENSOR_TYPE_TEMP or HDC_1000_SENSOR_TYPE_HUMIDITY - * \return Temperature (centi degrees C) or Humidity (centi %RH) + * \brief Returns a reading from the sensor. + * \param type HDC_1000_SENSOR_TYPE_TEMP or HDC_1000_SENSOR_TYPE_HUMID. + * \return Temperature (centi degrees C) or Humidity (centi %RH). */ static int value(int type) @@ -223,13 +257,13 @@ value(int type) switch (type) { case HDC_1000_SENSOR_TYPE_TEMP: - case HDC_1000_SENSOR_TYPE_HUMIDITY: + case HDC_1000_SENSOR_TYPE_HUMID: convert(&temp, &hum); PRINTF("HDC: t=%d h=%d\n", (int)temp, (int)hum); if (type == HDC_1000_SENSOR_TYPE_TEMP) { return (int)temp; - } else if (type == HDC_1000_SENSOR_TYPE_HUMIDITY) { + } else if (type == HDC_1000_SENSOR_TYPE_HUMID) { return (int)hum; } else { return HDC_1000_READING_ERROR; @@ -242,14 +276,12 @@ value(int type) } /*---------------------------------------------------------------------------*/ /** - * \brief Configuration function for the HDC1000 sensor. - * - * \param type Activate, enable or disable the sensor. See below - * \param enable - * - * When type == SENSORS_HW_INIT we turn on the hardware - * When type == SENSORS_ACTIVE and enable==1 we enable the sensor - * When type == SENSORS_ACTIVE and enable==0 we disable the sensor + * \brief Configuration function for the HDC1000 sensor. + * \param type Activate, enable or disable the sensor. See below. + * \param enable Either enable or disable the sensor. + * When type == SENSORS_HW_INIT we turn on the hardware. + * When type == SENSORS_ACTIVE and enable==1 we enable the sensor. + * When type == SENSORS_ACTIVE and enable==0 we disable the sensor. */ static int configure(int type, int enable) @@ -291,9 +323,9 @@ configure(int type, int enable) } /*---------------------------------------------------------------------------*/ /** - * \brief Returns the status of the sensor - * \param type SENSORS_ACTIVE or SENSORS_READY - * \return One of the SENSOR_STATUS_xyz defines + * \brief Returns the status of the sensor. + * \param type SENSORS_ACTIVE or SENSORS_READY. + * \return One of the SENSOR_STATUS_xyz defines. */ static int status(int type) @@ -302,12 +334,10 @@ status(int type) case SENSORS_ACTIVE: case SENSORS_READY: return sensor_status; - break; default: - break; + return HDC_1000_SENSOR_STATUS_DISABLED; } - return HDC_1000_SENSOR_STATUS_DISABLED; } /*---------------------------------------------------------------------------*/ SENSORS_SENSOR(hdc_1000_sensor, "HDC1000", value, configure, status); diff --git a/arch/platform/simplelink/cc13xx-cc26xx/sensortag/hdc-1000-sensor.h b/arch/platform/simplelink/cc13xx-cc26xx/sensortag/hdc-1000-sensor.h index f2112f76f..c3d31e383 100644 --- a/arch/platform/simplelink/cc13xx-cc26xx/sensortag/hdc-1000-sensor.h +++ b/arch/platform/simplelink/cc13xx-cc26xx/sensortag/hdc-1000-sensor.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, Texas Instruments Incorporated - http://www.ti.com/ + * Copyright (c) 2018, Texas Instruments Incorporated - http://www.ti.com/ * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -27,12 +27,12 @@ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. */ -/*---------------------------------------------------------------------------*/ /** - * \addtogroup sensortag-cc26xx-peripherals + * \addtogroup sensortag-peripherals * @{ * - * \defgroup sensortag-cc26xx-hdc-sensor SensorTag 2.0 TI HDC1000 Sensor + * \defgroup sensortag-hdc-sensor SensorTag HDC1000 - Temperature and + * Humidity Sensor * * Due to the time required for the sensor to startup, this driver is meant to * be used in an asynchronous fashion. The caller must first activate the @@ -45,28 +45,35 @@ * and latch them. It will then generate a sensors_changed event. * * The user can then retrieve readings by calling .value() and by passing - * either HDC_1000_SENSOR_TYPE_TEMP or HDC_1000_SENSOR_TYPE_HUMIDITY as the + * either HDC_1000_SENSOR_TYPE_TEMP or HDC_1000_SENSOR_TYPE_HUMID as the * argument. Multiple calls to value() will not trigger new readings, they will * simply return the most recent latched values. * - * The user can query the sensor's status by calling .status() + * The user can query the sensor's status by calling status(). * * To get a fresh reading, the user must trigger a new reading cycle by calling * SENSORS_ACTIVATE(). * @{ * * \file - * Header file for the Sensortag TI HDC1000 sensor + * Header file for the Sensortag HDC1000 sensor. + * \author + * Edvard Pettersen */ /*---------------------------------------------------------------------------*/ #ifndef HDC_1000_SENSOR_H #define HDC_1000_SENSOR_H /*---------------------------------------------------------------------------*/ +#include "contiki.h" #include "lib/sensors.h" /*---------------------------------------------------------------------------*/ +#if (TI_I2C_CONF_ENABLE == 0) || (TI_I2C_CONF_I2C0_ENABLE == 0) +# error "The HDC-1000 requires the I2C driver (TI_I2C_CONF_ENABLE = 1)" +#endif +/*---------------------------------------------------------------------------*/ typedef enum { HDC_1000_SENSOR_TYPE_TEMP, - HDC_1000_SENSOR_TYPE_HUMIDITY + HDC_1000_SENSOR_TYPE_HUMID } HDC_1000_SENSOR_TYPE; /*---------------------------------------------------------------------------*/ /** diff --git a/arch/platform/simplelink/cc13xx-cc26xx/sensortag/mpu-9250-sensor.c b/arch/platform/simplelink/cc13xx-cc26xx/sensortag/mpu-9250-sensor.c index 399ab04a2..f6e9bcdca 100644 --- a/arch/platform/simplelink/cc13xx-cc26xx/sensortag/mpu-9250-sensor.c +++ b/arch/platform/simplelink/cc13xx-cc26xx/sensortag/mpu-9250-sensor.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, Texas Instruments Incorporated - http://www.ti.com/ + * Copyright (c) 2018, Texas Instruments Incorporated - http://www.ti.com/ * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -27,23 +27,27 @@ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. */ -/*---------------------------------------------------------------------------*/ /** - * \addtogroup sensortag-cc26xx-mpu + * \addtogroup sensortag-mpu * @{ * * \file - * Driver for the Sensortag Invensense MPU9250 motion processing unit + * Driver for the Sensortag Invensense MPU9250 motion processing unit + * \author + * Edvard Pettersen */ /*---------------------------------------------------------------------------*/ #include "contiki.h" #include "lib/sensors.h" #include "sys/rtimer.h" + #include "mpu-9250-sensor.h" /*---------------------------------------------------------------------------*/ #include + #include #include DeviceFamily_constructPath(driverlib/cpu.h) + #include #include /*---------------------------------------------------------------------------*/ @@ -60,16 +64,17 @@ #endif /*---------------------------------------------------------------------------*/ #ifndef Board_MPU9250_ADDR -# error "Board file doesn't define I2C address Board_MPU9250_ADDR" +# error "Board file doesn't define I2C address Board_MPU9250_ADDR" #endif #ifndef Board_MPU9250_MAG_ADDR -# error "Board file doesn't define I2C address Board_MPU9250_MAG_ADDR" +# error "Board file doesn't define I2C address Board_MPU9250_MAG_ADDR" #endif + /* Sensor I2C address */ #define MPU_9250_I2C_ADDRESS Board_MPU9250_ADDR #define MPU_9250_MAG_I2C_ADDRESS Board_MPU9250_MAG_ADDR /*-------------a--------------------------------------------------------------*/ -/* Registers */ +/* Self Test Registers */ #define REG_SELF_TEST_X_GYRO 0x00 /* R/W */ #define REG_SELF_TEST_Y_GYRO 0x01 /* R/W */ #define REG_SELF_TEST_Z_GYRO 0x02 /* R/W */ @@ -77,6 +82,7 @@ #define REG_SELF_TEST_Z_ACCEL 0x0E /* R/W */ #define REG_SELF_TEST_Y_ACCEL 0x0F /* R/W */ /*---------------------------------------------------------------------------*/ +/* Axis Registers */ #define REG_XG_OFFSET_H 0x13 /* R/W */ #define REG_XG_OFFSET_L 0x14 /* R/W */ #define REG_YG_OFFSET_H 0x15 /* R/W */ @@ -84,6 +90,7 @@ #define REG_ZG_OFFSET_H 0x17 /* R/W */ #define REG_ZG_OFFSET_L 0x18 /* R/W */ /*---------------------------------------------------------------------------*/ +/* Control Registers */ #define REG_SMPLRT_DIV 0x19 /* R/W */ #define REG_CONFIG 0x1A /* R/W */ #define REG_GYRO_CONFIG 0x1B /* R/W */ @@ -180,9 +187,9 @@ static PIN_Config mpu_9250_pin_table[] = { PIN_TERMINATE }; -static PIN_State pinState; -static PIN_Handle pinHandle; -static I2C_Handle i2cHandle; +static PIN_State pin_state; +static PIN_Handle pin_handle; +static I2C_Handle i2c_handle; /*---------------------------------------------------------------------------*/ typedef struct { @@ -219,30 +226,64 @@ static struct ctimer startup_timer; /* ui32Count = [delay in us] * [CPU clock in MHz] / [cycles per loop] */ #define delay_ms(ms) CPUdelay((ms) * 1000 * 48 / 7) /*---------------------------------------------------------------------------*/ +/** + * \brief Setup and peform an I2C transaction. + * \param wbuf Output buffer during the I2C transation. + * \param wcount How many bytes in the wbuf. + * \param rbuf Input buffer during the I2C transation. + * \param rcount How many bytes to read into rbuf. + * \return true if the I2C operation was successful; + * else, return false. + */ static bool -i2c_transaction(void *writeBuf, size_t writeCount, void *readBuf, size_t readCount) +i2c_write_read(void *wbuf, size_t wcount, void *rbuf, size_t rcount) { - I2C_Transaction i2cTransaction = { - .writeBuf = writeBuf, - .writeCount = writeCount, - .readBuf = readBuf, - .readCount = readCount, + I2C_Transaction i2c_transaction = { + .writeBuf = wbuf, + .writeCount = wcount, + .readBuf = rbuf, + .readCount = rcount, .slaveAddress = MPU_9250_I2C_ADDRESS, }; - return I2C_transfer(i2cHandle, &i2cTransaction); + return I2C_transfer(i2c_handle, &i2c_transaction); } -#define i2c_write(writeBuf, writeCount) i2c_transaction(writeBuf, writeCount, NULL, 0) -#define i2c_read(readBuf, readCount) i2c_transaction(NULL, 0, readBuf, readCount) -#define i2c_write_read(writeBuf, writeCount, readBuf, readCount) \ - i2c_transaction(writeBuf, writeCount, readBuf, readCount) +/** + * \brief Peform a write only I2C transaction. + * \param wbuf Output buffer during the I2C transation. + * \param wcount How many bytes in the wbuf. + * \return true if the I2C operation was successful; + * else, return false. + */ +static inline bool +i2c_write(void *wbuf, size_t wcount) +{ + return i2c_write_read(wbuf, wcount, NULL, 0); +} + +/** + * \brief Peform a read only I2C transaction. + * \param rbuf Input buffer during the I2C transation. + * \param rcount How many bytes to read into rbuf. + * \return true if the I2C operation was successful; + * else, return false. + */ +static inline bool +i2c_read(void *rbuf, size_t rcount) +{ + return i2c_write_read(NULL, 0, rbuf, rcount); +} /*---------------------------------------------------------------------------*/ +/** + * \brief Initialize the MPU-9250 sensor driver. + * \return true if I2C operation successful; else, return false. + */ static bool sensor_init(void) { - pinHandle = PIN_open(&pinState, mpu_9250_pin_table); - if (pinHandle == NULL) { + pin_handle = PIN_open(&pin_state, mpu_9250_pin_table); + if (pin_handle == NULL) { return false; } @@ -251,9 +292,9 @@ sensor_init(void) i2cParams.transferMode = I2C_MODE_BLOCKING; i2cParams.bitRate = I2C_400kHz; - i2cHandle = I2C_open(Board_I2C0, &i2cParams); - if (i2cHandle == NULL) { - PIN_close(&pinState); + i2c_handle = I2C_open(Board_I2C0, &i2cParams); + if (i2c_handle == NULL) { + PIN_close(&pin_state); return false; } @@ -265,7 +306,7 @@ sensor_init(void) } /*---------------------------------------------------------------------------*/ /** - * \brief Place the MPU in low power mode + * \brief Place the sensor in low-power mode. */ static void sensor_sleep(void) @@ -281,7 +322,7 @@ sensor_sleep(void) } /*---------------------------------------------------------------------------*/ /** - * \brief Exit low power mode + * \brief Wakeup the sensor from low-power mode. */ static void sensor_wakeup(void) @@ -336,11 +377,11 @@ convert_to_le(uint8_t *data, uint8_t len) } /*---------------------------------------------------------------------------*/ /** - * \brief Check whether a data or wake on motion interrupt has occurred - * \return Return the interrupt status + * \brief Check whether a data or wake on motion interrupt has occurred. + * \return Return the interrupt status. * - * This driver does not use interrupts, however this function allows us to - * determine whether a new sensor reading is available + * This driver does not use interrupts, however this function allows + * us to determine whether a new sensor reading is available. */ static bool sensor_data_ready(uint8_t* int_status) @@ -352,8 +393,8 @@ sensor_data_ready(uint8_t* int_status) } /*---------------------------------------------------------------------------*/ /** - * \brief Read data from the accelerometer - X, Y, Z - 3 words - * \return True if a valid reading could be taken, false otherwise + * \brief Read data from the accelerometer, total of 3 words (X, Y, Z). + * \return true if a valid reading could be taken; otherwise, false. */ static bool acc_read(uint8_t int_status, uint16_t *data) @@ -375,8 +416,8 @@ acc_read(uint8_t int_status, uint16_t *data) } /*---------------------------------------------------------------------------*/ /** - * \brief Read data from the gyroscope - X, Y, Z - 3 words - * \return True if a valid reading could be taken, false otherwise + * \brief Read data from the accelerometer, total of 3 words (X, Y, Z). + * \return true if a valid reading could be taken; otherwise, false. */ static bool gyro_read(uint8_t int_status, uint16_t *data) @@ -398,9 +439,9 @@ gyro_read(uint8_t int_status, uint16_t *data) } /*---------------------------------------------------------------------------*/ /** - * \brief Convert accelerometer raw reading to a value in G - * \param raw_data The raw accelerometer reading - * \return The converted value + * \brief Convert accelerometer raw reading to a value in G. + * \param raw_data The raw accelerometer reading. + * \return The converted value. */ static int32_t acc_convert(int32_t raw_data) @@ -415,9 +456,9 @@ acc_convert(int32_t raw_data) } /*---------------------------------------------------------------------------*/ /** - * \brief Convert gyro raw reading to a value in deg/sec - * \param raw_data The raw accelerometer reading - * \return The converted value + * \brief Convert gyro raw reading to a value in deg/sec. + * \param raw_data The raw accelerometer reading. + * \return The converted value. */ static int32_t gyro_convert(int32_t raw_data) @@ -460,9 +501,10 @@ initialise_cb(void *unused) } /*---------------------------------------------------------------------------*/ /** - * \brief Returns a reading from the sensor - * \param type MPU_9250_SENSOR_TYPE_ACC_[XYZ] or MPU_9250_SENSOR_TYPE_GYRO_[XYZ] - * \return centi-G (ACC) or centi-Deg/Sec (Gyro) + * \brief Returns a reading from the sensor. + * \param type MPU_9250_SENSOR_TYPE_ACC_[XYZ] or + * MPU_9250_SENSOR_TYPE_GYRO_[XYZ]. + * \return Centi-G (ACC) or centi-Deg/Sec (Gyro). */ static int value(int type) @@ -531,14 +573,12 @@ value(int type) } /*---------------------------------------------------------------------------*/ /** - * \brief Configuration function for the MPU9250 sensor. - * - * \param type Activate, enable or disable the sensor. See below - * \param enable - * - * When type == SENSORS_HW_INIT we turn on the hardware - * When type == SENSORS_ACTIVE and enable==1 we enable the sensor - * When type == SENSORS_ACTIVE and enable==0 we disable the sensor + * \brief Configuration function for the MPU9250 sensor. + * \param type Activate, enable or disable the sensor. See below. + * \param enable Enable or disable sensor. + * When type == SENSORS_HW_INIT we turn on the hardware. + * When type == SENSORS_ACTIVE and enable==1 we enable the sensor. + * When type == SENSORS_ACTIVE and enable==0 we disable the sensor. */ static int configure(int type, int enable) @@ -562,7 +602,7 @@ configure(int type, int enable) mpu_9250.type = enable_type; mpu_9250.status = MPU_9250_SENSOR_STATUS_BOOTING; - PIN_setOutputValue(pinHandle, Board_MPU_POWER, 1); + PIN_setOutputValue(pin_handle, Board_MPU_POWER, 1); ctimer_set(&startup_timer, SENSOR_BOOT_DELAY, initialise_cb, NULL); } else { @@ -573,8 +613,8 @@ configure(int type, int enable) if (PIN_getOutputValue(Board_MPU_POWER)) { sensor_sleep(); - I2C_cancel(i2cHandle); - PIN_setOutputValue(pinHandle, Board_MPU_POWER, 0); + I2C_cancel(i2c_handle); + PIN_setOutputValue(pin_handle, Board_MPU_POWER, 0); } mpu_9250.type = MPU_9250_SENSOR_TYPE_NONE; @@ -589,9 +629,9 @@ configure(int type, int enable) } /*---------------------------------------------------------------------------*/ /** - * \brief Returns the status of the sensor - * \param type SENSORS_ACTIVE or SENSORS_READY - * \return 1 if the sensor is enabled + * \brief Returns the status of the sensor + * \param type SENSORS_ACTIVE or SENSORS_READY + * \return 1 if the sensor is enabled, else 0. */ static int status(int type) diff --git a/arch/platform/simplelink/cc13xx-cc26xx/sensortag/mpu-9250-sensor.h b/arch/platform/simplelink/cc13xx-cc26xx/sensortag/mpu-9250-sensor.h index e27c75dde..632d6e5b9 100644 --- a/arch/platform/simplelink/cc13xx-cc26xx/sensortag/mpu-9250-sensor.h +++ b/arch/platform/simplelink/cc13xx-cc26xx/sensortag/mpu-9250-sensor.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, Texas Instruments Incorporated - http://www.ti.com/ + * Copyright (c) 2018, Texas Instruments Incorporated - http://www.ti.com/ * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -27,71 +27,80 @@ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. */ -/*---------------------------------------------------------------------------*/ /** - * \addtogroup sensortag-cc26xx-peripherals + * \addtogroup sensortag-peripherals * @{ * - * \defgroup sensortag-cc26xx-mpu SensorTag 2.0 Motion Processing Unit + * \defgroup sensortag-mpu SensorTag Motion Processing Unit * - * Driver for the Invensense MPU9250 Motion Processing Unit. + * Driver for the Invensense MPU-9250 Motion Processing Unit. * - * Due to the time required between triggering a reading and the reading - * becoming available, this driver is meant to be used in an asynchronous - * fashion. The caller must first activate the sensor by calling - * mpu_9250_sensor.configure(SENSORS_ACTIVE, xyz); - * The value for the xyz arguments depends on the required readings. If the - * caller intends to read both the accelerometer as well as the gyro then - * xyz should be MPU_9250_SENSOR_TYPE_ALL. If the caller only needs to take a - * reading from one of the two elements, xyz should be one of - * MPU_9250_SENSOR_TYPE_ACC or MPU_9250_SENSOR_TYPE_GYRO + * Due to the time required between triggering a reading and the + * reading becoming available, this driver is meant to be used in an + * asynchronous fashion. The caller must first activate the sensor by + * calling * - * Calling .configure() will power up the sensor and initialise it. When the - * sensor is ready to provide readings, the driver will generate a - * sensors_changed event. + * mpu_9250_sensor.configure(SENSORS_ACTIVE, xyz); * - * Calls to .status() will return the driver's state which could indicate that - * the sensor is off, booting or on. + * The value for the xyz arguments depends on the required readings. If + * the caller intends to read both the accelerometer as well as the gyro + * then xyz should be MPU_9250_SENSOR_TYPE_ALL. If the caller only needs + * to take a reading from one of the two elements, xyz should be one of + * MPU_9250_SENSOR_TYPE_ACC or MPU_9250_SENSOR_TYPE_GYRO * - * Once a reading has been taken, the caller has two options: - * - Turn the sensor off by calling SENSORS_DEACTIVATE, but in order to take - * subsequent readings the sensor must be started up all over - * - Leave the sensor on. In this scenario, the caller can simply keep calling - * value() for subsequent readings, but having the sensor on will consume - * more energy, especially if both accelerometer and the gyro are on. + * Calling configure() will power up the sensor and initialise it. When + * the sensor is ready to provide readings, the driver will generate a + * sensors_changed event. + * + * Calls to status() will return the driver's state which could indicate + * that the sensor is off, booting or on. + * + * Once a reading has been taken, the caller has two options: + * - Turn the sensor off by calling SENSORS_DEACTIVATE, but in order to + * take subsequent readings the sensor must be started up all over + * - Leave the sensor on. In this scenario, the caller can simply keep + * calling value() for subsequent readings, but having the sensor on + * will consume more energy, especially if both accelerometer and the + * gyro are on. * @{ * * \file - * Header file for the Sensortag Invensense MPU9250 motion processing unit + * Header file for the Sensortag Invensense MPU-9250 motion processing unit + * \author + * Edvard Pettersen */ /*---------------------------------------------------------------------------*/ #ifndef MPU_9250_SENSOR_H_ #define MPU_9250_SENSOR_H_ /*---------------------------------------------------------------------------*/ -#include "contiki-conf.h" +#include "contiki.h" +/*---------------------------------------------------------------------------*/ +#if (TI_I2C_CONF_ENABLE == 0) || (TI_I2C_CONF_I2C0_ENABLE == 0) +# error "The MPU-9250 requires the I2C driver (TI_I2C_CONF_ENABLE = 1)" +#endif /*---------------------------------------------------------------------------*/ #define MPU_9250_READING_ERROR -1 /*---------------------------------------------------------------------------*/ -/* ACC / Gyro Axes */ +/* Accelerometer / Gyro Axes */ typedef enum { - MPU_9250_SENSOR_TYPE_NONE = (0), /* 0b000000 = 0x00 */ - MPU_9250_SENSOR_TYPE_GYRO_X = (1 << 0), /* 0b000001 = 0x01 */ - MPU_9250_SENSOR_TYPE_GYRO_Y = (1 << 1), /* 0b000010 = 0x02 */ - MPU_9250_SENSOR_TYPE_GYRO_Z = (1 << 2), /* 0b000100 = 0x04 */ - MPU_9250_SENSOR_TYPE_ACC_X = (1 << 3), /* 0b001000 = 0x08 */ - MPU_9250_SENSOR_TYPE_ACC_Y = (1 << 4), /* 0b010000 = 0x10 */ - MPU_9250_SENSOR_TYPE_ACC_Z = (1 << 5), /* 0b100000 = 0x20 */ + MPU_9250_SENSOR_TYPE_NONE = (0), /**< 0b000000 = 0x00 */ + MPU_9250_SENSOR_TYPE_GYRO_X = (1 << 0), /**< 0b000001 = 0x01 */ + MPU_9250_SENSOR_TYPE_GYRO_Y = (1 << 1), /**< 0b000010 = 0x02 */ + MPU_9250_SENSOR_TYPE_GYRO_Z = (1 << 2), /**< 0b000100 = 0x04 */ + MPU_9250_SENSOR_TYPE_ACC_X = (1 << 3), /**< 0b001000 = 0x08 */ + MPU_9250_SENSOR_TYPE_ACC_Y = (1 << 4), /**< 0b010000 = 0x10 */ + MPU_9250_SENSOR_TYPE_ACC_Z = (1 << 5), /**< 0b100000 = 0x20 */ MPU_9250_SENSOR_TYPE_GYRO = MPU_9250_SENSOR_TYPE_GYRO_X | MPU_9250_SENSOR_TYPE_GYRO_Y | MPU_9250_SENSOR_TYPE_GYRO_Z, - /* 0b000111 = 0x07 */ + /**< 0b000111 = 0x07 */ MPU_9250_SENSOR_TYPE_ACC = MPU_9250_SENSOR_TYPE_ACC_X | MPU_9250_SENSOR_TYPE_ACC_Y | MPU_9250_SENSOR_TYPE_ACC_Z, - /* 0b111000 = 0x38 */ + /**< 0b111000 = 0x38 */ MPU_9250_SENSOR_TYPE_ALL = MPU_9250_SENSOR_TYPE_GYRO | MPU_9250_SENSOR_TYPE_ACC - /* 0b111111 = 0x3F */ + /**< 0b111111 = 0x3F */ } MPU_9250_SENSOR_TYPE; /*---------------------------------------------------------------------------*/ /* Accelerometer range */ @@ -112,9 +121,9 @@ typedef enum { /*---------------------------------------------------------------------------*/ /* Accelerometer range configuration, type MPU_9250_SENSOR_ACC_RANGE */ #ifdef MPU_9250_SENSOR_CONF_ACC_RANGE_ARG -# define MPU_9250_SENSOR_ACC_RANGE_ARG MPU_9250_SENSOR_CONF_ACC_RANGE +# define MPU_9250_SENSOR_ACC_RANGE_ARG MPU_9250_SENSOR_CONF_ACC_RANGE #else -# define MPU_9250_SENSOR_ACC_RANGE_ARG MPU_9250_SENSOR_ACC_RANGE_2G +# define MPU_9250_SENSOR_ACC_RANGE_ARG MPU_9250_SENSOR_ACC_RANGE_2G #endif /*---------------------------------------------------------------------------*/ extern const struct sensors_sensor mpu_9250_sensor; diff --git a/arch/platform/simplelink/cc13xx-cc26xx/sensortag/opt-3001-sensor.c b/arch/platform/simplelink/cc13xx-cc26xx/sensortag/opt-3001-sensor.c index 470d3102e..a7774414a 100644 --- a/arch/platform/simplelink/cc13xx-cc26xx/sensortag/opt-3001-sensor.c +++ b/arch/platform/simplelink/cc13xx-cc26xx/sensortag/opt-3001-sensor.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, Texas Instruments Incorporated - http://www.ti.com/ + * Copyright (c) 2018, Texas Instruments Incorporated - http://www.ti.com/ * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -27,21 +27,24 @@ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. */ -/*---------------------------------------------------------------------------*/ /** - * \addtogroup sensortag-cc26xx-opt-sensor + * \addtogroup sensortag-opt-sensor * @{ * * \file - * Driver for the Sensortag Opt3001 light sensor + * Driver for the Sensortag OPT-3001 light sensor. + * \author + * Edvard Pettersen */ /*---------------------------------------------------------------------------*/ #include "contiki.h" #include "lib/sensors.h" #include "sys/ctimer.h" + #include "opt-3001-sensor.h" /*---------------------------------------------------------------------------*/ #include + #include /*---------------------------------------------------------------------------*/ #include @@ -63,65 +66,65 @@ #define OPT_3001_I2C_ADDRESS Board_OPT3001_ADDR /*---------------------------------------------------------------------------*/ /* Register addresses */ -#define REG_RESULT 0x00 -#define REG_CONFIGURATION 0x01 -#define REG_LOW_LIMIT 0x02 -#define REG_HIGH_LIMIT 0x03 +#define REG_RESULT 0x00 +#define REG_CONFIGURATION 0x01 +#define REG_LOW_LIMIT 0x02 +#define REG_HIGH_LIMIT 0x03 -#define REG_MANUFACTURER_ID 0x7E -#define REG_DEVICE_ID 0x7F +#define REG_MANUFACTURER_ID 0x7E +#define REG_DEVICE_ID 0x7F /*---------------------------------------------------------------------------*/ /* * Configuration Register Bits and Masks. * We use uint16_t to read from / write to registers, meaning that the * register's MSB is the variable's LSB. */ -#define CFG_RN 0x00F0 /* [15..12] Range Number */ -#define CFG_CT 0x0008 /* [11] Conversion Time */ -#define CFG_M 0x0006 /* [10..9] Mode of Conversion */ -#define CFG_OVF 0x0001 /* [8] Overflow */ -#define CFG_CRF 0x8000 /* [7] Conversion Ready Field */ -#define CFG_FH 0x4000 /* [6] Flag High */ -#define CFG_FL 0x2000 /* [5] Flag Low */ -#define CFG_L 0x1000 /* [4] Latch */ -#define CFG_POL 0x0800 /* [3] Polarity */ -#define CFG_ME 0x0400 /* [2] Mask Exponent */ -#define CFG_FC 0x0300 /* [1..0] Fault Count */ - +#define CFG_RN 0x00F0 /**< [15..12] Range Number */ +#define CFG_CT 0x0008 /**< [11] Conversion Time */ +#define CFG_M 0x0006 /**< [10..9] Mode of Conversion */ +#define CFG_OVF 0x0001 /**< [8] Overflow */ +#define CFG_CRF 0x8000 /**< [7] Conversion Ready Field */ +#define CFG_FH 0x4000 /**< [6] Flag High */ +#define CFG_FL 0x2000 /**< [5] Flag Low */ +#define CFG_L 0x1000 /**< [4] Latch */ +#define CFG_POL 0x0800 /**< [3] Polarity */ +#define CFG_ME 0x0400 /**< [2] Mask Exponent */ +#define CFG_FC 0x0300 /**< [1..0] Fault Count */ +/*---------------------------------------------------------------------------*/ /* Possible Values for CT */ -#define CFG_CT_100 0x0000 -#define CFG_CT_800 CFG_CT - +#define CFG_CT_100 0x0000 +#define CFG_CT_800 CFG_CT +/*---------------------------------------------------------------------------*/ /* Possible Values for M */ -#define CFG_M_CONTI 0x0004 -#define CFG_M_SINGLE 0x0002 -#define CFG_M_SHUTDOWN 0x0000 - +#define CFG_M_CONTI 0x0004 +#define CFG_M_SINGLE 0x0002 +#define CFG_M_SHUTDOWN 0x0000 +/*---------------------------------------------------------------------------*/ /* Reset Value for the register 0xC810. All zeros except: */ -#define CFG_RN_RESET 0x00C0 -#define CFG_CT_RESET CFG_CT_800 -#define CFG_L_RESET 0x1000 -#define CFG_DEFAULTS (CFG_RN_RESET | CFG_CT_100 | CFG_L_RESET) - +#define CFG_RN_RESET 0x00C0 +#define CFG_CT_RESET CFG_CT_800 +#define CFG_L_RESET 0x1000 +#define CFG_DEFAULTS (CFG_RN_RESET | CFG_CT_100 | CFG_L_RESET) +/*---------------------------------------------------------------------------*/ /* Enable / Disable */ -#define CFG_ENABLE_CONTINUOUS (CFG_M_CONTI | CFG_DEFAULTS) -#define CFG_ENABLE_SINGLE_SHOT (CFG_M_SINGLE | CFG_DEFAULTS) -#define CFG_DISABLE CFG_DEFAULTS +#define CFG_ENABLE_CONTINUOUS (CFG_M_CONTI | CFG_DEFAULTS) +#define CFG_ENABLE_SINGLE_SHOT (CFG_M_SINGLE | CFG_DEFAULTS) +#define CFG_DISABLE CFG_DEFAULTS /*---------------------------------------------------------------------------*/ /* Register length */ -#define REGISTER_LENGTH 2 +#define REGISTER_LENGTH 2 /*---------------------------------------------------------------------------*/ /* Sensor data size */ -#define DATA_LENGTH 2 +#define DATA_LENGTH 2 /*---------------------------------------------------------------------------*/ /* Byte swap of 16-bit register value */ -#define HI_UINT16(a) (((a) >> 8) & 0xFF) -#define LO_UINT16(a) ((a) & 0xFF) +#define HI_UINT16(a) (((a) >> 8) & 0xFF) +#define LO_UINT16(a) (((a) >> 0) & 0xFF) -#define SWAP16(v) ((LO_UINT16(v) << 8) | HI_UINT16(v)) +#define SWAP16(v) ((LO_UINT16(v) << 8) | (HI_UINT16(v) << 0)) -#define LSB16(v) (LO_UINT16(v)), (HI_UINT16(v)) -#define MSB16(v) (HI_UINT16(v)), (LO_UINT16(v)) +#define LSB16(v) (LO_UINT16(v)), (HI_UINT16(v)) +#define MSB16(v) (HI_UINT16(v)), (LO_UINT16(v)) /*---------------------------------------------------------------------------*/ typedef struct { volatile OPT_3001_STATUS status; @@ -134,39 +137,76 @@ static OPT_3001_Object opt_3001; static struct ctimer startup_timer; /*---------------------------------------------------------------------------*/ -static I2C_Handle i2cHandle; +static I2C_Handle i2c_handle; /*---------------------------------------------------------------------------*/ +/** + * \brief Setup and peform an I2C transaction. + * \param wbuf Output buffer during the I2C transation. + * \param wcount How many bytes in the wbuf. + * \param rbuf Input buffer during the I2C transation. + * \param rcount How many bytes to read into rbuf. + * \return true if the I2C operation was successful; + * else, return false. + */ static bool -i2c_write_read(void *writeBuf, size_t writeCount, void *readBuf, size_t readCount) +i2c_write_read(void *wbuf, size_t wcount, void *rbuf, size_t rcount) { - I2C_Transaction i2cTransaction = { - .writeBuf = writeBuf, - .writeCount = writeCount, - .readBuf = readBuf, - .readCount = readCount, + I2C_Transaction i2c_transaction = { + .writeBuf = wbuf, + .writeCount = wcount, + .readBuf = rbuf, + .readCount = rcount, .slaveAddress = OPT_3001_I2C_ADDRESS, }; - return I2C_transfer(i2cHandle, &i2cTransaction); + return I2C_transfer(i2c_handle, &i2c_transaction); } -#define i2c_write(writeBuf, writeCount) i2c_write_read(writeBuf, writeCount, NULL, 0) -#define i2c_read(readBuf, readCount) i2c_write_read(NULL, 0, readBuf, readCount) +/** + * \brief Peform a write only I2C transaction. + * \param wbuf Output buffer during the I2C transation. + * \param wcount How many bytes in the wbuf. + * \return true if the I2C operation was successful; + * else, return false. + */ +static inline bool +i2c_write(void *wbuf, size_t wcount) +{ + return i2c_write_read(wbuf, wcount, NULL, 0); +} + +/** + * \brief Peform a read only I2C transaction. + * \param rbuf Input buffer during the I2C transation. + * \param rcount How many bytes to read into rbuf. + * \return true if the I2C operation was successful; + * else, return false. + */ +static inline bool +i2c_read(void *rbuf, size_t rcount) +{ + return i2c_write_read(NULL, 0, rbuf, rcount); +} /*---------------------------------------------------------------------------*/ +/** + * \brief Initialize the OPT-3001 sensor driver. + * \return true if I2C operation successful; else, return false. + */ static bool sensor_init(void) { - if (i2cHandle) { + if (i2c_handle) { return true; } - I2C_Params i2cParams; - I2C_Params_init(&i2cParams); - i2cParams.transferMode = I2C_MODE_BLOCKING; - i2cParams.bitRate = I2C_400kHz; + I2C_Params i2c_params; + I2C_Params_init(&i2c_params); - i2cHandle = I2C_open(Board_I2C0, &i2cParams); - if (i2cHandle == NULL) { + i2c_params.transferMode = I2C_MODE_BLOCKING; + i2c_params.bitRate = I2C_400kHz; + + i2c_handle = I2C_open(Board_I2C0, &i2c_params); + if (i2c_handle == NULL) { return false; } @@ -176,8 +216,8 @@ sensor_init(void) } /*---------------------------------------------------------------------------*/ /** - * \brief Turn the sensor on/off - * \param enable TRUE: on, FALSE: off + * \brief Turn the sensor on/off + * \param enable Enable sensor if true; else, disable sensor. */ static bool sensor_enable(bool enable) @@ -190,9 +230,15 @@ sensor_enable(bool enable) return i2c_write(cfg_data, sizeof(cfg_data)); } /*---------------------------------------------------------------------------*/ +/** + * \brief Callback when sensor is ready to read data from. + */ static void -notify_ready_cb(void *not_used) +notify_ready_cb(void *unused) { + /* Unused args */ + (void)unused; + /* * Depending on the CONFIGURATION.CONVERSION_TIME bits, a conversion will * take either 100 or 800 ms. Here we inspect the CONVERSION_READY bit and @@ -217,15 +263,18 @@ notify_ready_cb(void *not_used) } /*---------------------------------------------------------------------------*/ /** - * \brief Returns a reading from the sensor - * \param type Ignored - * \return Illuminance in centilux + * \brief Returns a reading from the sensor. + * \param type Ignored. + * \return Illuminance in centilux. */ static int value(int type) { + /* Unused args */ + (void)type; + if (opt_3001.status != OPT_3001_STATUS_DATA_READY) { - return MPU_9250_READING_ERROR; + return OPT_3001_READING_ERROR; } uint8_t cfg_data[] = { REG_CONFIGURATION }; @@ -234,7 +283,7 @@ value(int type) bool spi_ok = i2c_write_read(cfg_data, sizeof(cfg_data), &cfg_value, sizeof(cfg_value)); if (!spi_ok) { opt_3001.status = OPT_3001_STATUS_I2C_ERROR; - return MPU_9250_READING_ERROR; + return OPT_3001_READING_ERROR; } uint8_t result_data[] = { REG_RESULT }; @@ -243,7 +292,7 @@ value(int type) spi_ok = i2c_write_read(result_data, sizeof(result_data), &result_value, sizeof(result_value)); if (!spi_ok) { opt_3001.status = OPT_3001_STATUS_I2C_ERROR; - return MPU_9250_READING_ERROR; + return OPT_3001_READING_ERROR; } result_value = SWAP16(result_value); @@ -259,14 +308,13 @@ value(int type) } /*---------------------------------------------------------------------------*/ /** - * \brief Configuration function for the OPT3001 sensor. + * \brief Configuration function for the OPT3001 sensor. + * \param type Activate, enable or disable the sensor. See below. + * \param enable Enable or disable sensor. * - * \param type Activate, enable or disable the sensor. See below - * \param enable - * - * When type == SENSORS_HW_INIT we turn on the hardware - * When type == SENSORS_ACTIVE and enable==1 we enable the sensor - * When type == SENSORS_ACTIVE and enable==0 we disable the sensor + * When type == SENSORS_HW_INIT we turn on the hardware. + * When type == SENSORS_ACTIVE and enable==1 we enable the sensor. + * When type == SENSORS_ACTIVE and enable==0 we disable the sensor. */ static int configure(int type, int enable) @@ -278,7 +326,7 @@ configure(int type, int enable) opt_3001.status = OPT_3001_STATUS_STANDBY; } else { opt_3001.status = OPT_3001_STATUS_DISABLED; - rv = MPU_9250_READING_ERROR; + rv = OPT_3001_READING_ERROR; } break; @@ -302,13 +350,14 @@ configure(int type, int enable) } /*---------------------------------------------------------------------------*/ /** - * \brief Returns the status of the sensor - * \param type ignored - * \return The state of the sensor SENSOR_STATE_xyz + * \brief Returns the status of the sensor. + * \param type Ignored. + * \return The state of the sensor SENSOR_STATE_xyz. */ static int status(int type) { + /* Unused args */ (void)type; return opt_3001.status; diff --git a/arch/platform/simplelink/cc13xx-cc26xx/sensortag/opt-3001-sensor.h b/arch/platform/simplelink/cc13xx-cc26xx/sensortag/opt-3001-sensor.h index 4b3a84a5a..06f6cca8b 100644 --- a/arch/platform/simplelink/cc13xx-cc26xx/sensortag/opt-3001-sensor.h +++ b/arch/platform/simplelink/cc13xx-cc26xx/sensortag/opt-3001-sensor.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, Texas Instruments Incorporated - http://www.ti.com/ + * Copyright (c) 2018, Texas Instruments Incorporated - http://www.ti.com/ * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -27,39 +27,47 @@ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. */ -/*---------------------------------------------------------------------------*/ /** - * \addtogroup sensortag-cc26xx-peripherals + * \addtogroup sensortag-peripherals * @{ * - * \defgroup sensortag-cc26xx-opt-sensor SensorTag 2.0 Light Sensor + * \defgroup sensortag-opt-sensor SensorTag Optical Sensor * - * Due to the time required for the sensor to startup, this driver is meant to - * be used in an asynchronous fashion. The caller must first activate the - * sensor by calling SENSORS_ACTIVATE(). This will trigger the sensor's startup - * sequence, but the call will not wait for it to complete so that the CPU can - * perform other tasks or drop to a low power mode. + * Due to the time required for the sensor to startup, this driver is + * meant to be used in an asynchronous fashion. The caller must first + * activate the sensor by calling SENSORS_ACTIVATE(). This will trigger + * the sensor's startup sequence, but the call will not wait for it to + * complete so that the CPU can perform other tasks or drop to a low + * power mode. * - * Once the reading and conversion are complete, the driver will generate a - * sensors_changed event. + * Once the reading and conversion are complete, the driver will + * generate a sensors_changed event. * - * We use single-shot readings. In this mode, the hardware automatically goes - * back to its shutdown mode after the conversion is finished. However, it will - * still respond to I2C operations, so the last conversion can still be read - * out. + * We use single-shot readings. In this mode, the hardware + * automatically goes back to its shutdown mode after the conversion + * is finished. However, it will still respond to I2C operations, so + * the last conversion can still be read out. * - * In order to take a new reading, the caller has to use SENSORS_ACTIVATE - * again. + * In order to take a new reading, the caller has to use + * SENSORS_ACTIVATE again. * @{ * * \file - * Header file for the Sensortag Opt3001 light sensor + * Header file for the Sensortag OPT-3001 light sensor. + * \author + * Edvard Pettersen */ /*---------------------------------------------------------------------------*/ #ifndef OPT_3001_SENSOR_H_ #define OPT_3001_SENSOR_H_ /*---------------------------------------------------------------------------*/ -#define MPU_9250_READING_ERROR -1 +#include "contiki.h" +/*---------------------------------------------------------------------------*/ +#if (TI_I2C_CONF_ENABLE == 0) || (TI_I2C_CONF_I2C0_ENABLE == 0) +# error "The OPT-3001 requires the I2C driver (TI_I2C_CONF_ENABLE = 1)" +#endif +/*---------------------------------------------------------------------------*/ +#define OPT_3001_READING_ERROR -1 /*---------------------------------------------------------------------------*/ typedef enum { OPT_3001_STATUS_DISABLED, diff --git a/arch/platform/simplelink/cc13xx-cc26xx/sensortag/sensortag-sensors.c b/arch/platform/simplelink/cc13xx-cc26xx/sensortag/sensortag-sensors.c index fb7390e06..258f9f829 100644 --- a/arch/platform/simplelink/cc13xx-cc26xx/sensortag/sensortag-sensors.c +++ b/arch/platform/simplelink/cc13xx-cc26xx/sensortag/sensortag-sensors.c @@ -27,13 +27,14 @@ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. */ -/*---------------------------------------------------------------------------*/ /** - * \addtogroup simplelink-peripherals + * \addtogroup sensortag-peripherals * @{ * * \file - * Generic module controlling Simplelink sensors + * Generic module controlling sensors on SensorTag. + * \author + * Edvard Pettersen */ /*---------------------------------------------------------------------------*/ #include "contiki.h" @@ -42,7 +43,6 @@ #include "board-peripherals.h" /*---------------------------------------------------------------------------*/ /* Exports a global symbol to be used by the sensor API */ -SENSORS(&bmp_280_sensor, &tmp_007_sensor, &opt_3001_sensor, &hdc_1000_sensor, - &mpu_9250_sensor); +SENSORS(&bmp_280_sensor, &tmp_007_sensor, &opt_3001_sensor, &hdc_1000_sensor, &mpu_9250_sensor); /*---------------------------------------------------------------------------*/ /** @} */ diff --git a/arch/platform/simplelink/cc13xx-cc26xx/sensortag/tmp-007-sensor.c b/arch/platform/simplelink/cc13xx-cc26xx/sensortag/tmp-007-sensor.c index 3cc154a08..48c5ed5b9 100644 --- a/arch/platform/simplelink/cc13xx-cc26xx/sensortag/tmp-007-sensor.c +++ b/arch/platform/simplelink/cc13xx-cc26xx/sensortag/tmp-007-sensor.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, Texas Instruments Incorporated - http://www.ti.com/ + * Copyright (c) 2018, Texas Instruments Incorporated - http://www.ti.com/ * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -27,21 +27,24 @@ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. */ -/*---------------------------------------------------------------------------*/ /** - * \addtogroup sensortag-cc26xx-tmp-sensor + * \addtogroup sensortag-tmp-sensor * @{ * * \file - * Driver for the Sensortag TI TMP007 infrared thermophile sensor + * Driver for the Sensortag TI TMP-007 IR Thermophile sensor. + * \author + * Edvard Pettersen */ /*---------------------------------------------------------------------------*/ #include "contiki.h" #include "lib/sensors.h" #include "sys/ctimer.h" + #include "tmp-007-sensor.h" /*---------------------------------------------------------------------------*/ #include + #include #include /*---------------------------------------------------------------------------*/ @@ -58,47 +61,47 @@ /*---------------------------------------------------------------------------*/ /* Slave address */ #ifndef Board_TMP_ADDR -# error "Board file doesn't define I2C address Board_TMP_ADDR" +# error "Board file doesn't define I2C address Board_TMP_ADDR" #endif -#define TMP_007_I2C_ADDRESS Board_TMP_ADDR +#define TMP_007_I2C_ADDRESS Board_TMP_ADDR -/* MPU Interrupt pin */ +/* Sensor Interrupt pin */ #ifndef Board_TMP_RDY -# error "Board file doesn't define interrupt pin Board_TMP_RDY" +# error "Board file doesn't define interrupt pin Board_TMP_RDY" #endif -#define TMP_007_TMP_RDY Board_TMP_RDY +#define TMP_007_TMP_RDY Board_TMP_RDY /*---------------------------------------------------------------------------*/ -/* TMP007 register addresses */ -#define REG_VOLTAGE 0x00 -#define REG_LOCAL_TEMP 0x01 -#define REG_CONFIG 0x02 -#define REG_OBJ_TEMP 0x03 -#define REG_STATUS 0x04 -#define REG_PROD_ID 0x1F +/* TMP-007 register addresses */ +#define REG_VOLTAGE 0x00 +#define REG_LOCAL_TEMP 0x01 +#define REG_CONFIG 0x02 +#define REG_OBJ_TEMP 0x03 +#define REG_STATUS 0x04 +#define REG_PROD_ID 0x1F /*---------------------------------------------------------------------------*/ -/* TMP007 register values */ -#define VAL_CONFIG_ON 0x1000 /* Sensor on state */ -#define VAL_CONFIG_OFF 0x0000 /* Sensor off state */ -#define VAL_CONFIG_RESET 0x8000 -#define VAL_PROD_ID 0x0078 /* Product ID */ +/* TMP-007 register values */ +#define VAL_CONFIG_ON 0x1000 /**< Sensor on state */ +#define VAL_CONFIG_OFF 0x0000 /**< Sensor off state */ +#define VAL_CONFIG_RESET 0x8000 +#define VAL_PROD_ID 0x0078 /**< Product ID */ /*---------------------------------------------------------------------------*/ /* Conversion ready (status register) bit values */ -#define CONV_RDY_BIT 0x4000 +#define CONV_RDY_BIT 0x4000 /*---------------------------------------------------------------------------*/ /* Register length */ -#define REGISTER_LENGTH 2 +#define REGISTER_LENGTH 2 /*---------------------------------------------------------------------------*/ /* Sensor data size */ -#define DATA_SIZE 4 +#define DATA_SIZE 4 /*---------------------------------------------------------------------------*/ /* Byte swap of 16-bit register value */ -#define HI_UINT16(a) (((a) >> 8) & 0xFF) -#define LO_UINT16(a) ((a) & 0xFF) +#define HI_UINT16(a) (((a) >> 8) & 0xFF) +#define LO_UINT16(a) (((a) >> 0) & 0xFF) -#define SWAP16(v) ((LO_UINT16(v) << 8) | HI_UINT16(v)) +#define SWAP16(v) ((LO_UINT16(v) << 8) | (HI_UINT16(v) << 0)) -#define LSB16(v) (LO_UINT16(v)), (HI_UINT16(v)) -#define MSB16(v) (HI_UINT16(v)), (LO_UINT16(v)) +#define LSB16(v) (LO_UINT16(v)), (HI_UINT16(v)) +#define MSB16(v) (HI_UINT16(v)), (LO_UINT16(v)) /*---------------------------------------------------------------------------*/ static const PIN_Config pin_table[] = { TMP_007_TMP_RDY | PIN_INPUT_EN | PIN_PULLUP | PIN_HYSTERESIS | PIN_IRQ_NEGEDGE, @@ -120,27 +123,63 @@ typedef struct { static TMP_007_Object tmp_007; /*---------------------------------------------------------------------------*/ /* Wait SENSOR_STARTUP_DELAY clock ticks for the sensor to be ready - 275ms */ -#define SENSOR_STARTUP_DELAY 36 +#define SENSOR_STARTUP_DELAY 36 static struct ctimer startup_timer; /*---------------------------------------------------------------------------*/ +/** + * \brief Setup and peform an I2C transaction. + * \param wbuf Output buffer during the I2C transation. + * \param wcount How many bytes in the wbuf. + * \param rbuf Input buffer during the I2C transation. + * \param rcount How many bytes to read into rbuf. + * \return true if the I2C operation was successful; + * else, return false. + */ static bool -i2c_write_read(void *writeBuf, size_t writeCount, void *readBuf, size_t readCount) +i2c_write_read(void *wbuf, size_t wcount, void *rbuf, size_t rcount) { I2C_Transaction i2c_transaction = { - .writeBuf = writeBuf, - .writeCount = writeCount, - .readBuf = readBuf, - .readCount = readCount, + .writeBuf = wbuf, + .writeCount = wcount, + .readBuf = rbuf, + .readCount = rcount, .slaveAddress = TMP_007_I2C_ADDRESS, }; return I2C_transfer(i2c_handle, &i2c_transaction); } -#define i2c_write(writeBuf, writeCount) i2c_write_read(writeBuf, writeCount, NULL, 0) -#define i2c_read(readBuf, readCount) i2c_write_read(NULL, 0, readBuf, readCount) +/** + * \brief Peform a write only I2C transaction. + * \param wbuf Output buffer during the I2C transation. + * \param wcount How many bytes in the wbuf. + * \return true if the I2C operation was successful; + * else, return false. + */ +static inline bool +i2c_write(void *wbuf, size_t wcount) +{ + return i2c_write_read(wbuf, wcount, NULL, 0); +} + +/** + * \brief Peform a read only I2C transaction. + * \param rbuf Input buffer during the I2C transation. + * \param rcount How many bytes to read into rbuf. + * \return true if the I2C operation was successful; + * else, return false. + */ +static inline bool +i2c_read(void *rbuf, size_t rcount) +{ + return i2c_write_read(NULL, 0, rbuf, rcount); +} /*---------------------------------------------------------------------------*/ +/** + * \brief Initialize the TMP-007 sensor driver. + * \return true if I2C operation successful; else, return false. + */ static bool sensor_init(void) { @@ -155,6 +194,7 @@ sensor_init(void) I2C_Params i2c_params; I2C_Params_init(&i2c_params); + i2c_params.transferMode = I2C_MODE_BLOCKING; i2c_params.bitRate = I2C_400kHz; @@ -169,6 +209,9 @@ sensor_init(void) return true; } /*---------------------------------------------------------------------------*/ +/** + * \brief Callback when sensor is ready to read data from. + */ static void notify_ready_cb(void *not_used) { @@ -177,7 +220,7 @@ notify_ready_cb(void *not_used) } /*---------------------------------------------------------------------------*/ /** - * \brief Turn the sensor on/off + * \brief Turn the sensor on or off. */ static bool enable_sensor(bool enable) @@ -192,10 +235,12 @@ enable_sensor(bool enable) } /*---------------------------------------------------------------------------*/ /** - * \brief Read the sensor value registers - * \param raw_temp Temperature in 16 bit format - * \param raw_obj_temp object temperature in 16 bit format - * \return TRUE if valid data could be retrieved + * \brief Read the sensor value registers. + * \param raw_temp Output variable holding the Temperature in + * 16-bit format. + * \param raw_obj_temp Output variable holding the Object temperature in + * 16-bit format. + * \return true if valid data could be retrieved; else, false. */ static bool read_data(uint16_t *local_tmp, uint16_t *obj_tmp) @@ -241,11 +286,11 @@ read_data(uint16_t *local_tmp, uint16_t *obj_tmp) } /*---------------------------------------------------------------------------*/ /** - * \brief Convert raw data to values in degrees C - * \param raw_temp raw ambient temperature from sensor - * \param raw_obj_temp raw object temperature from sensor - * \param obj converted object temperature - * \param amb converted ambient temperature + * \brief Convert raw data to values in degrees Celsius. + * \param raw_temp Output variable holding the raw ambient temperature + * from sensor. + * \param raw_obj_temp Output variable holding the raw object temperature + * from sensor. */ static void convert(uint16_t* local_tmp, uint16_t* obj_tmp) @@ -261,9 +306,9 @@ convert(uint16_t* local_tmp, uint16_t* obj_tmp) } /*---------------------------------------------------------------------------*/ /** - * \brief Returns a reading from the sensor - * \param type TMP_007_SENSOR_TYPE_OBJECT or TMP_007_SENSOR_TYPE_AMBIENT - * \return Object or Ambient temperature in milli degrees C + * \brief Returns a reading from the sensor. + * \param type TMP_007_SENSOR_TYPE_OBJECT or TMP_007_SENSOR_TYPE_AMBIENT. + * \return Object or Ambient temperature in milli degrees Celsius. */ static int value(int type) @@ -304,14 +349,13 @@ value(int type) } /*---------------------------------------------------------------------------*/ /** - * \brief Configuration function for the TMP007 sensor. + * \brief Configuration function for the TMP-007 sensor. + * \param type Activate, enable or disable the sensor. See below. + * \param enable Enable or disable sensor. * - * \param type Activate, enable or disable the sensor. See below - * \param enable - * - * When type == SENSORS_HW_INIT we turn on the hardware - * When type == SENSORS_ACTIVE and enable==1 we enable the sensor - * When type == SENSORS_ACTIVE and enable==0 we disable the sensor + * When type == SENSORS_HW_INIT we turn on the hardware. + * When type == SENSORS_ACTIVE and enable==1 we enable the sensor. + * When type == SENSORS_ACTIVE and enable==0 we disable the sensor. */ static int configure(int type, int enable) @@ -351,9 +395,9 @@ configure(int type, int enable) } /*---------------------------------------------------------------------------*/ /** - * \brief Returns the status of the sensor - * \param type SENSORS_ACTIVE or SENSORS_READY - * \return 1 if the sensor is enabled + * \brief Returns the status of the sensor. + * \param type Ignored. + * \return Status of the sensor. */ static int status(int type) @@ -363,6 +407,6 @@ status(int type) return tmp_007.status; } /*---------------------------------------------------------------------------*/ -SENSORS_SENSOR(tmp_007_sensor, "TMP007", value, configure, status); +SENSORS_SENSOR(tmp_007_sensor, "TMP-007", value, configure, status); /*---------------------------------------------------------------------------*/ /** @} */ diff --git a/arch/platform/simplelink/cc13xx-cc26xx/sensortag/tmp-007-sensor.h b/arch/platform/simplelink/cc13xx-cc26xx/sensortag/tmp-007-sensor.h index 0ba8dcfcb..0fff84556 100644 --- a/arch/platform/simplelink/cc13xx-cc26xx/sensortag/tmp-007-sensor.h +++ b/arch/platform/simplelink/cc13xx-cc26xx/sensortag/tmp-007-sensor.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, Texas Instruments Incorporated - http://www.ti.com/ + * Copyright (c) 2018, Texas Instruments Incorporated - http://www.ti.com/ * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -27,41 +27,51 @@ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. */ -/*---------------------------------------------------------------------------*/ /** - * \addtogroup sensortag-cc26xx-peripherals + * \addtogroup sensortag-peripherals * @{ * - * \defgroup sensortag-cc26xx-tmp-sensor SensorTag 2.0 IR thermophile sensor + * \defgroup sensortag-tmp-sensor SensorTag IR Thermophile sensor * - * Due to the time required for the sensor to startup, this driver is meant to - * be used in an asynchronous fashion. The caller must first activate the - * sensor by calling SENSORS_ACTIVATE(). This will trigger the sensor's startup - * sequence, but the call will not wait for it to complete so that the CPU can - * perform other tasks or drop to a low power mode. + * Due to the time required for the sensor to startup, this driver is + * meant to be used in an asynchronous fashion. The caller must first + * activate the sensor by calling SENSORS_ACTIVATE(). This will trigger + * the sensor's startup sequence, but the call will not wait for it to + * complete so that the CPU can perform other tasks or drop to a low + * power mode. * - * Once the sensor is stable, the driver will generate a sensors_changed event. + * Once the sensor is stable, the driver will generate a + * sensors_changed event. * - * The caller should then use value(TMP_007_SENSOR_TYPE_ALL) to read sensor - * values and latch them. Once completed successfully, individual readings can - * be retrieved with calls to value(TMP_007_SENSOR_TYPE_OBJECT) or - * value(TMP_007_SENSOR_TYPE_AMBIENT). + * The caller should then use value(TMP_007_SENSOR_TYPE_ALL) to + * read sensor values and latch them. Once completed successfully, + * individual readings can be retrieved with calls to + * value(TMP_007_SENSOR_TYPE_OBJECT) or + * value(TMP_007_SENSOR_TYPE_AMBIENT). * - * Once required readings have been taken, the caller has two options: - * - Turn the sensor off by calling SENSORS_DEACTIVATE, but in order to take - * subsequent readings SENSORS_ACTIVATE must be called again - * - Leave the sensor on. In this scenario, the caller can simply keep calling - * value(TMP_007_SENSOR_TYPE_ALL) to read and latch new values. However - * keeping the sensor on will consume more energy + * Once required readings have been taken, the caller has two options: + * - Turn the sensor off by calling SENSORS_DEACTIVATE, but in order + * to take subsequent readings SENSORS_ACTIVATE must be called again. + * - Leave the sensor on. In this scenario, the caller can simply keep + * calling value(TMP_007_SENSOR_TYPE_ALL) to read and latch new + * values. However keeping the sensor on will consume more energy. * @{ * * \file - * Header file for the Sensortag TI TMP007 infrared thermophile sensor + * Header file for the Sensortag TMP-007 IR Thermophile sensor. + * \author + * Edvard Pettersen */ /*---------------------------------------------------------------------------*/ #ifndef TMP_007_SENSOR_H_ #define TMP_007_SENSOR_H_ /*---------------------------------------------------------------------------*/ +#include "contiki.h" +/*---------------------------------------------------------------------------*/ +#if (TI_I2C_CONF_ENABLE == 0) || (TI_I2C_CONF_I2C0_ENABLE == 0) +# error "The BMP280 requires the I2C driver to be enabled (TI_I2C_CONF_ENABLE = 1)" +#endif +/*---------------------------------------------------------------------------*/ typedef enum { TMP_007_TYPE_OBJECT = (1 << 0), TMP_007_TYPE_AMBIENT = (1 << 1), diff --git a/arch/platform/simplelink/cc13xx-cc26xx/srf06/als-sensor.c b/arch/platform/simplelink/cc13xx-cc26xx/srf06/als-sensor.c index aa16dd2ae..d4a5bbb04 100644 --- a/arch/platform/simplelink/cc13xx-cc26xx/srf06/als-sensor.c +++ b/arch/platform/simplelink/cc13xx-cc26xx/srf06/als-sensor.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016, University of Bristol - http://www.bris.ac.uk/ + * Copyright (c) 2018, Texas Instruments Incorporated - http://www.ti.com/ * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -27,13 +27,14 @@ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. */ -/*---------------------------------------------------------------------------*/ /** - * \addtogroup srf06-common-peripherals + * \addtogroup srf06-peripherals * @{ * * \file - * Driver for the SmartRF06EB ALS when a CC13xx/CC26xxEM is mounted on it + * Driver for the SmartRF06 EB ALS sensor. + * \author + * Edvard Pettersen */ /*---------------------------------------------------------------------------*/ #include "contiki.h" @@ -42,11 +43,11 @@ #include "sys/timer.h" #include "als-sensor.h" - +/*---------------------------------------------------------------------------*/ #include #include - +/*---------------------------------------------------------------------------*/ #include /*---------------------------------------------------------------------------*/ static ADC_Handle adc_handle; diff --git a/arch/platform/simplelink/cc13xx-cc26xx/srf06/als-sensor.h b/arch/platform/simplelink/cc13xx-cc26xx/srf06/als-sensor.h index 5d70478f8..dd9141fad 100644 --- a/arch/platform/simplelink/cc13xx-cc26xx/srf06/als-sensor.h +++ b/arch/platform/simplelink/cc13xx-cc26xx/srf06/als-sensor.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016, University of Bristol - http://www.bris.ac.uk/ + * Copyright (c) 2018, Texas Instruments Incorporated - http://www.ti.com/ * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -27,13 +27,14 @@ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. */ -/*---------------------------------------------------------------------------*/ /** - * \addtogroup srf06-common-peripherals + * \addtogroup srf06-peripherals * @{ * * \file - * Header file for the SmartRF06EB + CC13xx/CC26xxEM ALS Driver + * Header file for the SmartRF06 EB ALS sensor. + * \author + * Edvard Pettersen */ /*---------------------------------------------------------------------------*/ #ifndef ALS_SENSOR_H_ diff --git a/arch/platform/simplelink/cc13xx-cc26xx/srf06/board-conf.h b/arch/platform/simplelink/cc13xx-cc26xx/srf06/board-conf.h index d0e612b2b..8fdb0895f 100644 --- a/arch/platform/simplelink/cc13xx-cc26xx/srf06/board-conf.h +++ b/arch/platform/simplelink/cc13xx-cc26xx/srf06/board-conf.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, Texas Instruments Incorporated - http://www.ti.com/ + * Copyright (c) 2018, Texas Instruments Incorporated - http://www.ti.com/ * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -27,27 +27,23 @@ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. */ -/*---------------------------------------------------------------------------*/ -/** \addtogroup cc26xx-srf-tag - * @{ - * - * \defgroup launchpad-peripherals LaunchPad peripherals - * - * Defines related to LaunchPad peripherals. - * +/** + * \addtogroup srf06-peripherals * @{ * * \file - * Header file with definitions related to LaunchPad peripherals - * - * \note Do not include this file directly. + * Header file with definitions related to SmartRF06 EB boards. + * \author + * Edvard Pettersen + * \note + * This file should not be included directly */ /*---------------------------------------------------------------------------*/ #ifndef BOARD_CONF_H_ #define BOARD_CONF_H_ /*---------------------------------------------------------------------------*/ /** - * \name LED configurations + * \name LED configurations for the dev/leds.h API. * * Those values are not meant to be modified by the user * @{ @@ -60,12 +56,29 @@ #define LEDS_CONF_ORANGE 3 #define LEDS_CONF_ALL ((1 << LEDS_CONF_COUNT) - 1) +/** @} */ /*---------------------------------------------------------------------------*/ +/** + * \name Button configurations for the dev/button-hal.h API. + * + * Those values are not meant to be modified by the user + * @{ + */ #define BUTTON_HAL_ID_KEY_LEFT 0 #define BUTTON_HAL_ID_KEY_RIGHT 1 #define BUTTON_HAL_ID_KEY_UP 2 #define BUTTON_HAL_ID_KEY_DOWN 3 #define BUTTON_HAL_ID_KEY_SELECT 4 +/** @} */ +/*---------------------------------------------------------------------------*/ +/** + * \name SmartRF06 EB does have sensors. + * + * Those values are not meant to be modified by the user + * @{ + */ +#define BOARD_CONF_HAS_SENSORS 1 +/** @} */ /*---------------------------------------------------------------------------*/ #endif /* BOARD_CONF_H_ */ /*---------------------------------------------------------------------------*/ diff --git a/arch/platform/simplelink/cc13xx-cc26xx/srf06/board-peripherals.h b/arch/platform/simplelink/cc13xx-cc26xx/srf06/board-peripherals.h index c76057d59..5a30b5fe1 100644 --- a/arch/platform/simplelink/cc13xx-cc26xx/srf06/board-peripherals.h +++ b/arch/platform/simplelink/cc13xx-cc26xx/srf06/board-peripherals.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, Texas Instruments Incorporated - http://www.ti.com/ + * Copyright (c) 2018, Texas Instruments Incorporated - http://www.ti.com/ * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -27,20 +27,22 @@ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. */ -/*---------------------------------------------------------------------------*/ -/** \addtogroup cc26xx-srf-tag +/** + * \addtogroup cc13xx-cc26xx-platform * @{ * - * \defgroup launchpad-peripherals LaunchPad peripherals + * \defgroup srf06-peripherals SmartRF06 Evaluation Board peripherals * - * Defines related to LaunchPad peripherals. + * Defines related to configuring SmartRF06 EB's peripherals. All + * SmartRF06 EBs are identical to a very large extent. Everything + * documented within this group applies to all SmartRF06 EBs. * * @{ * * \file - * Header file with definitions related to LaunchPad peripherals - * - * \note Do not include this file directly. + * Header file with definitions related to SmartRF06 EB boards. + * \author + * Edvard Pettersen */ /*---------------------------------------------------------------------------*/ #ifndef BOARD_PERIPHERALS_H_ @@ -50,8 +52,6 @@ /*---------------------------------------------------------------------------*/ #include "board-conf.h" /*---------------------------------------------------------------------------*/ -#define BOARD_CONF_HAS_SENSORS 1 -/*---------------------------------------------------------------------------*/ #endif /* BOARD_PERIPHERALS_H_ */ /*---------------------------------------------------------------------------*/ /** diff --git a/arch/platform/simplelink/cc13xx-cc26xx/srf06/button-sensor-arch.c b/arch/platform/simplelink/cc13xx-cc26xx/srf06/button-sensor-arch.c index a0cea3b1c..7c1f04df0 100644 --- a/arch/platform/simplelink/cc13xx-cc26xx/srf06/button-sensor-arch.c +++ b/arch/platform/simplelink/cc13xx-cc26xx/srf06/button-sensor-arch.c @@ -27,64 +27,71 @@ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. */ -/*---------------------------------------------------------------------------*/ /** - * \addtogroup launchpad-button-sensor + * \addtogroup srf06-peripherals * @{ * * \file - * Driver for LaunchPad buttons + * Button HAL definitions for the SmartRF06 Evaluation Board's buttons. + * Common across all CC13xx/CC26xx devices on SmartRF06 EB. + * \author + * Edvard Pettersen */ /*---------------------------------------------------------------------------*/ #include "contiki.h" #include "dev/button-hal.h" - +/*---------------------------------------------------------------------------*/ #include /*---------------------------------------------------------------------------*/ /* Key select button */ -BUTTON_HAL_BUTTON(key_select, /**< Name */ - "Key Select", /**< Description */ - Board_KEY_SELECT, /**< PIN */ - GPIO_HAL_PIN_CFG_INPUT_PULLUP | - GPIO_HAL_PIN_CFG_INPUT_HYSTERESIS, /**< Pull configuration */ - BUTTON_HAL_ID_KEY_SELECT, /**< Unique ID */ - true); /**< Negative logic */ +BUTTON_HAL_BUTTON( + key_select, /**< Name */ + "Key Select", /**< Description */ + Board_KEY_SELECT, /**< PIN */ + GPIO_HAL_PIN_CFG_INPUT_PULLUP | + GPIO_HAL_PIN_CFG_INPUT_HYSTERESIS, /**< Pull configuration */ + BUTTON_HAL_ID_KEY_SELECT, /**< Unique ID */ + true); /**< Negative logic */ /* Key up button */ -BUTTON_HAL_BUTTON(key_up, /**< Name */ - "Key Up", /**< Description */ - Board_KEY_UP, /**< PIN */ - GPIO_HAL_PIN_CFG_INPUT_PULLUP | - GPIO_HAL_PIN_CFG_INPUT_HYSTERESIS, /**< Pull configuration */ - BUTTON_HAL_ID_KEY_UP, /**< Unique ID */ - true); /**< Negative logic */ +BUTTON_HAL_BUTTON( + key_up, /**< Name */ + "Key Up", /**< Description */ + Board_KEY_UP, /**< PIN */ + GPIO_HAL_PIN_CFG_INPUT_PULLUP | + GPIO_HAL_PIN_CFG_INPUT_HYSTERESIS, /**< Pull configuration */ + BUTTON_HAL_ID_KEY_UP, /**< Unique ID */ + true); /**< Negative logic */ /* Key down button */ -BUTTON_HAL_BUTTON(key_down, /**< Name */ - "Key Down", /**< Description */ - Board_KEY_DOWN, /**< PIN */ - GPIO_HAL_PIN_CFG_INPUT_PULLUP | - GPIO_HAL_PIN_CFG_INPUT_HYSTERESIS, /**< Pull configuration */ - BUTTON_HAL_ID_KEY_DOWN, /**< Unique ID */ - true); /**< Negative logic */ +BUTTON_HAL_BUTTON( + key_down, /**< Name */ + "Key Down", /**< Description */ + Board_KEY_DOWN, /**< PIN */ + GPIO_HAL_PIN_CFG_INPUT_PULLUP | + GPIO_HAL_PIN_CFG_INPUT_HYSTERESIS, /**< Pull configuration */ + BUTTON_HAL_ID_KEY_DOWN, /**< Unique ID */ + true); /**< Negative logic */ /* Key left button */ -BUTTON_HAL_BUTTON(key_left, /**< Name */ - "Key Left", /**< Description */ - Board_KEY_LEFT, /**< PIN */ - GPIO_HAL_PIN_CFG_INPUT_PULLUP | - GPIO_HAL_PIN_CFG_INPUT_HYSTERESIS, /**< Pull configuration */ - BUTTON_HAL_ID_KEY_LEFT, /**< Unique ID */ - true); /**< Negative logic */ +BUTTON_HAL_BUTTON( + key_left, /**< Name */ + "Key Left", /**< Description */ + Board_KEY_LEFT, /**< PIN */ + GPIO_HAL_PIN_CFG_INPUT_PULLUP | + GPIO_HAL_PIN_CFG_INPUT_HYSTERESIS, /**< Pull configuration */ + BUTTON_HAL_ID_KEY_LEFT, /**< Unique ID */ + true); /**< Negative logic */ /* Key right button */ -BUTTON_HAL_BUTTON(key_right, /**< Name */ - "Key Right", /**< Description */ - Board_KEY_RIGHT, /**< PIN */ - GPIO_HAL_PIN_CFG_INPUT_PULLUP | - GPIO_HAL_PIN_CFG_INPUT_HYSTERESIS, /**< Pull configuration */ - BUTTON_HAL_ID_KEY_RIGHT, /**< Unique ID */ - true); /**< Negative logic */ +BUTTON_HAL_BUTTON( + key_right, /**< Name */ + "Key Right", /**< Description */ + Board_KEY_RIGHT, /**< PIN */ + GPIO_HAL_PIN_CFG_INPUT_PULLUP | + GPIO_HAL_PIN_CFG_INPUT_HYSTERESIS, /**< Pull configuration */ + BUTTON_HAL_ID_KEY_RIGHT, /**< Unique ID */ + true); /**< Negative logic */ /*---------------------------------------------------------------------------*/ BUTTON_HAL_BUTTONS(&key_select, &key_up, &key_down, &key_left, &key_right); /*---------------------------------------------------------------------------*/ diff --git a/arch/platform/simplelink/cc13xx-cc26xx/srf06/cc13x0/CC1350DK_7XD.c b/arch/platform/simplelink/cc13xx-cc26xx/srf06/cc13x0/CC1350DK_7XD.c index 00cb5d8e0..3214b385a 100644 --- a/arch/platform/simplelink/cc13xx-cc26xx/srf06/cc13x0/CC1350DK_7XD.c +++ b/arch/platform/simplelink/cc13xx-cc26xx/srf06/cc13x0/CC1350DK_7XD.c @@ -175,19 +175,21 @@ const CryptoCC26XX_Config CryptoCC26XX_config[CC1350DK_7XD_CRYPTOCOUNT] = { #include #include +#if TI_DISPLAY_CONF_ENABLE + +#if TI_DISPLAY_CONF_UART_ENABLE + +#if !(TI_UART_CONF_UART0_ENABLE) +#error "Display UART driver requires UART0" +#endif + #ifndef BOARD_DISPLAY_UART_STRBUF_SIZE #define BOARD_DISPLAY_UART_STRBUF_SIZE 128 #endif -#ifndef BOARD_DISPLAY_SHARP_SIZE -#define BOARD_DISPLAY_SHARP_SIZE 96 -#endif +static char uartStringBuf[BOARD_DISPLAY_UART_STRBUF_SIZE]; DisplayUart_Object displayUartObject; -DisplaySharp_Object displaySharpObject; - -static char uartStringBuf[BOARD_DISPLAY_UART_STRBUF_SIZE]; -static uint_least8_t sharpDisplayBuf[BOARD_DISPLAY_SHARP_SIZE * BOARD_DISPLAY_SHARP_SIZE / 8]; const DisplayUart_HWAttrs displayUartHWAttrs = { .uartIdx = CC1350DK_7XD_UART0, @@ -197,6 +199,22 @@ const DisplayUart_HWAttrs displayUartHWAttrs = { .strBufLen = BOARD_DISPLAY_UART_STRBUF_SIZE, }; +#endif /* TI_DISPLAY_CONF_UART_ENABLE */ + +#if TI_DISPLAY_CONF_LCD_ENABLE + +#if !(TI_SPI_CONF_SPI0_ENABLE) +#error "Display LCD driver requires SPI0" +#endif + +#ifndef BOARD_DISPLAY_SHARP_SIZE +#define BOARD_DISPLAY_SHARP_SIZE 96 +#endif + +static uint_least8_t sharpDisplayBuf[BOARD_DISPLAY_SHARP_SIZE * BOARD_DISPLAY_SHARP_SIZE / 8]; + +DisplaySharp_Object displaySharpObject; + const DisplaySharp_HWAttrsV1 displaySharpHWattrs = { .spiIndex = CC1350DK_7XD_SPI0, .csPin = CC1350DK_7XD_GPIO_LCD_CS, @@ -207,27 +225,18 @@ const DisplaySharp_HWAttrsV1 displaySharpHWattrs = { .displayBuf = sharpDisplayBuf, }; -#ifndef BOARD_DISPLAY_USE_UART -#define BOARD_DISPLAY_USE_UART 1 -#endif -#ifndef BOARD_DISPLAY_USE_UART_ANSI -#define BOARD_DISPLAY_USE_UART_ANSI 0 -#endif -#ifndef BOARD_DISPLAY_USE_LCD -#define BOARD_DISPLAY_USE_LCD 0 -#endif +#endif /* TI_DISPLAY_CONF_LCD_ENABLE */ /* * This #if/#else is needed to workaround a problem with the * IAR compiler. The IAR compiler doesn't like the empty array * initialization. (IAR Error[Pe1345]) */ -#if (BOARD_DISPLAY_USE_UART || BOARD_DISPLAY_USE_LCD) const Display_Config Display_config[] = { -#if (BOARD_DISPLAY_USE_UART) +#if TI_DISPLAY_CONF_UART_ENABLE { -# if (BOARD_DISPLAY_USE_UART_ANSI) +# if TI_DISPLAY_CONF_USE_UART_ANSI .fxnTablePtr = &DisplayUartAnsi_fxnTable, # else /* Default to minimal UART with no cursor placement */ .fxnTablePtr = &DisplayUartMin_fxnTable, @@ -236,7 +245,7 @@ const Display_Config Display_config[] = { .hwAttrs = &displayUartHWAttrs, }, #endif -#if (BOARD_DISPLAY_USE_LCD) +#if TI_DISPLAY_CONF_LCD_ENABLE { .fxnTablePtr = &DisplaySharp_fxnTable, .object = &displaySharpObject, @@ -252,7 +261,7 @@ const uint_least8_t Display_count = sizeof(Display_config) / sizeof(Display_Conf const Display_Config *Display_config = NULL; const uint_least8_t Display_count = 0; -#endif /* (BOARD_DISPLAY_USE_UART || BOARD_DISPLAY_USE_LCD) */ +#endif /* TI_DISPLAY_CONF_ENABLE */ /* * =============================== GPIO =============================== @@ -356,9 +365,12 @@ const GPTimerCC26XX_Config GPTimerCC26XX_config[CC1350DK_7XD_GPTIMERPARTSCOUNT] #include #include +#if TI_I2C_CONF_ENABLE + I2CCC26XX_Object i2cCC26xxObjects[CC1350DK_7XD_I2CCOUNT]; const I2CCC26XX_HWAttrsV1 i2cCC26xxHWAttrs[CC1350DK_7XD_I2CCOUNT] = { +#if TI_I2C_CONF_I2C0_ENABLE { .baseAddr = I2C0_BASE, .powerMngrId = PowerCC26XX_PERIPH_I2C0, @@ -367,19 +379,24 @@ const I2CCC26XX_HWAttrsV1 i2cCC26xxHWAttrs[CC1350DK_7XD_I2CCOUNT] = { .swiPriority = 0, .sdaPin = CC1350DK_7XD_I2C0_SDA0, .sclPin = CC1350DK_7XD_I2C0_SCL0, - } + }, +#endif }; const I2C_Config I2C_config[CC1350DK_7XD_I2CCOUNT] = { +#if TI_I2C_CONF_I2C0_ENABLE { .fxnTablePtr = &I2CCC26XX_fxnTable, .object = &i2cCC26xxObjects[CC1350DK_7XD_I2C0], .hwAttrs = &i2cCC26xxHWAttrs[CC1350DK_7XD_I2C0] }, +#endif }; const uint_least8_t I2C_count = CC1350DK_7XD_I2CCOUNT; +#endif /* TI_I2C_CONF_ENABLE */ + /* * =============================== NVS =============================== */ @@ -391,8 +408,9 @@ const uint_least8_t I2C_count = CC1350DK_7XD_I2CCOUNT; #define SECTORSIZE 0x1000 #define REGIONSIZE (SECTORSIZE * 4) -#ifndef Board_EXCLUDE_NVS_INTERNAL_FLASH +#if TI_NVS_CONF_ENABLE +#if TI_NVS_CONF_NVS_INTERNAL_ENABLE /* * Reserve flash sectors for NVS driver use by placing an uninitialized byte * array at the desired flash address. @@ -441,11 +459,11 @@ const NVSCC26XX_HWAttrs nvsCC26xxHWAttrs[1] = { }, }; -#endif /* Board_EXCLUDE_NVS_INTERNAL_FLASH */ +#endif /* TI_NVS_CONF_NVS_INTERNAL_ENABLE */ /* NVS Region index 0 and 1 refer to NVS and NVS SPI respectively */ const NVS_Config NVS_config[CC1350DK_7XD_NVSCOUNT] = { -#ifndef Board_EXCLUDE_NVS_INTERNAL_FLASH +#if TI_NVS_CONF_NVS_INTERNAL_ENABLE { .fxnTablePtr = &NVSCC26XX_fxnTable, .object = &nvsCC26xxObjects[0], @@ -456,6 +474,8 @@ const NVS_Config NVS_config[CC1350DK_7XD_NVSCOUNT] = { const uint_least8_t NVS_count = CC1350DK_7XD_NVSCOUNT; +#endif /* TI_NVS_CONF_ENABLE */ + /* * =============================== PIN =============================== */ @@ -557,6 +577,12 @@ const RFCC26XX_HWAttrsV2 RFCC26XX_hwAttrs = { #include #include +#if TI_SD_CONF_ENABLE + +#if !(TI_SPI_CONF_SPI0_ENABLE) +#error "SD driver requires SPI0 enabled" +#endif + SDSPI_Object sdspiObjects[CC1350DK_7XD_SDCOUNT]; const SDSPI_HWAttrs sdspiHWAttrs[CC1350DK_7XD_SDCOUNT] = { @@ -576,12 +602,16 @@ const SD_Config SD_config[CC1350DK_7XD_SDCOUNT] = { const uint_least8_t SD_count = CC1350DK_7XD_SDCOUNT; +#endif /* TI_SD_CONF_ENABLE */ + /* * =============================== SPI DMA =============================== */ #include #include +#if TI_SPI_CONF_ENABLE + SPICC26XXDMA_Object spiCC26XXDMAObjects[CC1350DK_7XD_SPICOUNT]; /* @@ -590,6 +620,7 @@ SPICC26XXDMA_Object spiCC26XXDMAObjects[CC1350DK_7XD_SPICOUNT]; * to satisfy the SDSPI driver requirement. */ const SPICC26XXDMA_HWAttrsV1 spiCC26XXDMAHWAttrs[CC1350DK_7XD_SPICOUNT] = { +#if TI_SPI_CONF_SPI0_ENABLE { .baseAddr = SSI0_BASE, .intNum = INT_SSI0_COMB, @@ -605,6 +636,8 @@ const SPICC26XXDMA_HWAttrsV1 spiCC26XXDMAHWAttrs[CC1350DK_7XD_SPICOUNT] = { .csnPin = CC1350DK_7XD_SPI0_CSN, .minDmaTransferSize = 10 }, +#endif +#if TI_SPI_CONF_SPI1_ENABLE { .baseAddr = SSI1_BASE, .intNum = INT_SSI1_COMB, @@ -619,35 +652,45 @@ const SPICC26XXDMA_HWAttrsV1 spiCC26XXDMAHWAttrs[CC1350DK_7XD_SPICOUNT] = { .clkPin = CC1350DK_7XD_SPI1_CLK, .csnPin = CC1350DK_7XD_SPI1_CSN, .minDmaTransferSize = 10 - } + }, +#endif }; const SPI_Config SPI_config[CC1350DK_7XD_SPICOUNT] = { +#if TI_SPI_CONF_SPI0_ENABLE { .fxnTablePtr = &SPICC26XXDMA_fxnTable, .object = &spiCC26XXDMAObjects[CC1350DK_7XD_SPI0], .hwAttrs = &spiCC26XXDMAHWAttrs[CC1350DK_7XD_SPI0] }, +#endif +#if TI_SPI_CONF_SPI1_ENABLE { .fxnTablePtr = &SPICC26XXDMA_fxnTable, .object = &spiCC26XXDMAObjects[CC1350DK_7XD_SPI1], .hwAttrs = &spiCC26XXDMAHWAttrs[CC1350DK_7XD_SPI1] }, +#endif }; const uint_least8_t SPI_count = CC1350DK_7XD_SPICOUNT; +#endif /* TI_SPI_CONF_ENABLE */ + /* * =============================== UART =============================== */ #include #include +#if TI_UART_CONF_ENABLE + UARTCC26XX_Object uartCC26XXObjects[CC1350DK_7XD_UARTCOUNT]; uint8_t uartCC26XXRingBuffer[CC1350DK_7XD_UARTCOUNT][32]; const UARTCC26XX_HWAttrsV2 uartCC26XXHWAttrs[CC1350DK_7XD_UARTCOUNT] = { +#if TI_UART_CONF_UART0_ENABLE { .baseAddr = UART0_BASE, .powerMngrId = PowerCC26XX_PERIPH_UART0, @@ -663,19 +706,24 @@ const UARTCC26XX_HWAttrsV2 uartCC26XXHWAttrs[CC1350DK_7XD_UARTCOUNT] = { .txIntFifoThr = UARTCC26XX_FIFO_THRESHOLD_1_8, .rxIntFifoThr = UARTCC26XX_FIFO_THRESHOLD_4_8, .errorFxn = NULL - } + }, +#endif }; const UART_Config UART_config[CC1350DK_7XD_UARTCOUNT] = { +#if TI_UART_CONF_UART0_ENABLE { .fxnTablePtr = &UARTCC26XX_fxnTable, .object = &uartCC26XXObjects[CC1350DK_7XD_UART0], .hwAttrs = &uartCC26XXHWAttrs[CC1350DK_7XD_UART0] }, +#endif }; const uint_least8_t UART_count = CC1350DK_7XD_UARTCOUNT; +#endif /* TI_UART_CONF_ENABLE */ + /* * =============================== UDMA =============================== */ diff --git a/arch/platform/simplelink/cc13xx-cc26xx/srf06/cc13x0/CC1350DK_7XD.h b/arch/platform/simplelink/cc13xx-cc26xx/srf06/cc13x0/CC1350DK_7XD.h index b6fa91497..f90681dbf 100644 --- a/arch/platform/simplelink/cc13xx-cc26xx/srf06/cc13x0/CC1350DK_7XD.h +++ b/arch/platform/simplelink/cc13xx-cc26xx/srf06/cc13x0/CC1350DK_7XD.h @@ -49,6 +49,8 @@ extern "C" { #endif +#include "contiki-conf.h" + /* Includes */ #include #include @@ -275,7 +277,9 @@ typedef enum CC1350DK_7XD_GPTimers { * @brief Enum of I2C names */ typedef enum CC1350DK_7XD_I2CName { +#if TI_I2C_CONF_I2C0_ENABLE CC1350DK_7XD_I2C0 = 0, +#endif CC1350DK_7XD_I2CCOUNT } CC1350DK_7XD_I2CName; @@ -285,7 +289,7 @@ typedef enum CC1350DK_7XD_I2CName { * @brief Enum of NVS names */ typedef enum CC1350DK_7XD_NVSName { -#ifndef Board_EXCLUDE_NVS_INTERNAL_FLASH +#if TI_NVS_CONF_NVS_INTERNAL_ENABLE CC1350DK_7XD_NVSCC26XX0 = 0, #endif @@ -324,8 +328,12 @@ typedef enum CC1350DK_7XD_SDName { * @brief Enum of SPI names */ typedef enum CC1350DK_7XD_SPIName { +#if TI_SPI_CONF_SPI0_ENABLE CC1350DK_7XD_SPI0 = 0, +#endif +#if TI_SPI_CONF_SPI1_ENABLE CC1350DK_7XD_SPI1, +#endif CC1350DK_7XD_SPICOUNT } CC1350DK_7XD_SPIName; @@ -335,7 +343,9 @@ typedef enum CC1350DK_7XD_SPIName { * @brief Enum of UARTs */ typedef enum CC1350DK_7XD_UARTName { +#if TI_UART_CONF_UART0_ENABLE CC1350DK_7XD_UART0 = 0, +#endif CC1350DK_7XD_UARTCOUNT } CC1350DK_7XD_UARTName; diff --git a/arch/platform/simplelink/cc13xx-cc26xx/srf06/cc13x0/Makefile.cc13x0 b/arch/platform/simplelink/cc13xx-cc26xx/srf06/cc13x0/Makefile.cc13x0 index f79529781..a06b790a6 100644 --- a/arch/platform/simplelink/cc13xx-cc26xx/srf06/cc13x0/Makefile.cc13x0 +++ b/arch/platform/simplelink/cc13xx-cc26xx/srf06/cc13x0/Makefile.cc13x0 @@ -5,7 +5,7 @@ SUBFAMILY = cc13x0-cc26x0 DEVICE_FAMILY = CC13X0 DEVICE_LINE = CC13XX -BOARD_SOURCEFILES += CC1310DK_7XD.c CC1310DK_7XD_fxns.c +BOARD_SOURCEFILES += CC1350DK_7XD.c CC1350DK_7XD_fxns.c SUPPORTS_PROP_MODE = 1 SUPPORTS_IEEE_MODE = 1 diff --git a/arch/platform/simplelink/cc13xx-cc26xx/srf06/cc26x0/CC2650DK_7ID.c b/arch/platform/simplelink/cc13xx-cc26xx/srf06/cc26x0/CC2650DK_7ID.c index 51df6137c..52e27a7a7 100644 --- a/arch/platform/simplelink/cc13xx-cc26xx/srf06/cc26x0/CC2650DK_7ID.c +++ b/arch/platform/simplelink/cc13xx-cc26xx/srf06/cc26x0/CC2650DK_7ID.c @@ -175,19 +175,21 @@ const CryptoCC26XX_Config CryptoCC26XX_config[CC2650DK_7ID_CRYPTOCOUNT] = { #include #include +#if TI_DISPLAY_CONF_ENABLE + +#if TI_DISPLAY_CONF_UART_ENABLE + +#if !(TI_UART_CONF_UART0_ENABLE) +#error "Display UART driver requires UART0" +#endif + #ifndef BOARD_DISPLAY_UART_STRBUF_SIZE #define BOARD_DISPLAY_UART_STRBUF_SIZE 128 #endif -#ifndef BOARD_DISPLAY_SHARP_SIZE -#define BOARD_DISPLAY_SHARP_SIZE 96 -#endif +static char uartStringBuf[BOARD_DISPLAY_UART_STRBUF_SIZE]; DisplayUart_Object displayUartObject; -DisplaySharp_Object displaySharpObject; - -static char uartStringBuf[BOARD_DISPLAY_UART_STRBUF_SIZE]; -static uint_least8_t sharpDisplayBuf[BOARD_DISPLAY_SHARP_SIZE * BOARD_DISPLAY_SHARP_SIZE / 8]; const DisplayUart_HWAttrs displayUartHWAttrs = { .uartIdx = CC2650DK_7ID_UART0, @@ -197,6 +199,22 @@ const DisplayUart_HWAttrs displayUartHWAttrs = { .strBufLen = BOARD_DISPLAY_UART_STRBUF_SIZE, }; +#endif /* TI_DISPLAY_CONF_UART_ENABLE */ + +#if TI_DISPLAY_CONF_LCD_ENABLE + +#if !(TI_SPI_CONF_SPI0_ENABLE) +#error "Display LCD driver requires SPI0" +#endif + +#ifndef BOARD_DISPLAY_SHARP_SIZE +#define BOARD_DISPLAY_SHARP_SIZE 96 +#endif + +static uint_least8_t sharpDisplayBuf[BOARD_DISPLAY_SHARP_SIZE * BOARD_DISPLAY_SHARP_SIZE / 8]; + +DisplaySharp_Object displaySharpObject; + const DisplaySharp_HWAttrsV1 displaySharpHWattrs = { .spiIndex = CC2650DK_7ID_SPI0, .csPin = CC2650DK_7ID_GPIO_LCD_CS, @@ -207,27 +225,18 @@ const DisplaySharp_HWAttrsV1 displaySharpHWattrs = { .displayBuf = sharpDisplayBuf, }; -#ifndef BOARD_DISPLAY_USE_UART -#define BOARD_DISPLAY_USE_UART 1 -#endif -#ifndef BOARD_DISPLAY_USE_UART_ANSI -#define BOARD_DISPLAY_USE_UART_ANSI 0 -#endif -#ifndef BOARD_DISPLAY_USE_LCD -#define BOARD_DISPLAY_USE_LCD 0 -#endif +#endif /* TI_DISPLAY_CONF_LCD_ENABLE */ /* * This #if/#else is needed to workaround a problem with the * IAR compiler. The IAR compiler doesn't like the empty array * initialization. (IAR Error[Pe1345]) */ -#if (BOARD_DISPLAY_USE_UART || BOARD_DISPLAY_USE_LCD) const Display_Config Display_config[] = { -#if (BOARD_DISPLAY_USE_UART) +#if TI_DISPLAY_CONF_UART_ENABLE { -# if (BOARD_DISPLAY_USE_UART_ANSI) +# if TI_DISPLAY_CONF_USE_UART_ANSI .fxnTablePtr = &DisplayUartAnsi_fxnTable, # else /* Default to minimal UART with no cursor placement */ .fxnTablePtr = &DisplayUartMin_fxnTable, @@ -236,7 +245,7 @@ const Display_Config Display_config[] = { .hwAttrs = &displayUartHWAttrs, }, #endif -#if (BOARD_DISPLAY_USE_LCD) +#if TI_DISPLAY_CONF_LCD_ENABLE { .fxnTablePtr = &DisplaySharp_fxnTable, .object = &displaySharpObject, @@ -252,7 +261,7 @@ const uint_least8_t Display_count = sizeof(Display_config) / sizeof(Display_Conf const Display_Config *Display_config = NULL; const uint_least8_t Display_count = 0; -#endif /* (BOARD_DISPLAY_USE_UART || BOARD_DISPLAY_USE_LCD) */ +#endif /* TI_DISPLAY_CONF_ENABLE */ /* * =============================== GPIO =============================== @@ -356,9 +365,12 @@ const GPTimerCC26XX_Config GPTimerCC26XX_config[CC2650DK_7ID_GPTIMERPARTSCOUNT] #include #include +#if TI_I2C_CONF_ENABLE + I2CCC26XX_Object i2cCC26xxObjects[CC2650DK_7ID_I2CCOUNT]; const I2CCC26XX_HWAttrsV1 i2cCC26xxHWAttrs[CC2650DK_7ID_I2CCOUNT] = { +#if TI_I2C_CONF_I2C0_ENABLE { .baseAddr = I2C0_BASE, .powerMngrId = PowerCC26XX_PERIPH_I2C0, @@ -367,19 +379,24 @@ const I2CCC26XX_HWAttrsV1 i2cCC26xxHWAttrs[CC2650DK_7ID_I2CCOUNT] = { .swiPriority = 0, .sdaPin = CC2650DK_7ID_I2C0_SDA0, .sclPin = CC2650DK_7ID_I2C0_SCL0, - } + }, +#endif }; const I2C_Config I2C_config[CC2650DK_7ID_I2CCOUNT] = { +#if TI_I2C_CONF_I2C0_ENABLE { .fxnTablePtr = &I2CCC26XX_fxnTable, .object = &i2cCC26xxObjects[CC2650DK_7ID_I2C0], .hwAttrs = &i2cCC26xxHWAttrs[CC2650DK_7ID_I2C0] }, +#endif }; const uint_least8_t I2C_count = CC2650DK_7ID_I2CCOUNT; +#endif /* TI_I2C_CONF_ENABLE */ + /* * =============================== NVS =============================== */ @@ -391,7 +408,9 @@ const uint_least8_t I2C_count = CC2650DK_7ID_I2CCOUNT; #define SECTORSIZE 0x1000 #define REGIONSIZE (SECTORSIZE * 4) -#ifndef Board_EXCLUDE_NVS_INTERNAL_FLASH +#if TI_NVS_CONF_ENABLE + +#if TI_NVS_CONF_NVS_INTERNAL_ENABLE /* * Reserve flash sectors for NVS driver use by placing an uninitialized byte @@ -441,11 +460,11 @@ const NVSCC26XX_HWAttrs nvsCC26xxHWAttrs[1] = { }, }; -#endif /* Board_EXCLUDE_NVS_INTERNAL_FLASH */ +#endif /* TI_NVS_CONF_NVS_INTERNAL_ENABLE */ /* NVS Region index 0 and 1 refer to NVS and NVS SPI respectively */ const NVS_Config NVS_config[CC2650DK_7ID_NVSCOUNT] = { -#ifndef Board_EXCLUDE_NVS_INTERNAL_FLASH +#if TI_NVS_CONF_NVS_INTERNAL_ENABLE { .fxnTablePtr = &NVSCC26XX_fxnTable, .object = &nvsCC26xxObjects[0], @@ -456,6 +475,8 @@ const NVS_Config NVS_config[CC2650DK_7ID_NVSCOUNT] = { const uint_least8_t NVS_count = CC2650DK_7ID_NVSCOUNT; +#endif /* TI_NVS_CONF_ENABLE */ + /* * =============================== PIN =============================== */ @@ -557,6 +578,12 @@ const RFCC26XX_HWAttrsV2 RFCC26XX_hwAttrs = { #include #include +#if TI_SD_CONF_ENABLE + +#if !(TI_SPI_CONF_SPI0_ENABLE) +#error "SD driver requires SPI0 enabled" +#endif + SDSPI_Object sdspiObjects[CC2650DK_7ID_SDCOUNT]; const SDSPI_HWAttrs sdspiHWAttrs[CC2650DK_7ID_SDCOUNT] = { @@ -576,12 +603,16 @@ const SD_Config SD_config[CC2650DK_7ID_SDCOUNT] = { const uint_least8_t SD_count = CC2650DK_7ID_SDCOUNT; +#endif /* TI_SD_CONF_ENABLE */ + /* * =============================== SPI DMA =============================== */ #include #include +#if TI_SPI_CONF_ENABLE + SPICC26XXDMA_Object spiCC26XXDMAObjects[CC2650DK_7ID_SPICOUNT]; /* @@ -590,6 +621,7 @@ SPICC26XXDMA_Object spiCC26XXDMAObjects[CC2650DK_7ID_SPICOUNT]; * to satisfy the SDSPI driver requirement. */ const SPICC26XXDMA_HWAttrsV1 spiCC26XXDMAHWAttrs[CC2650DK_7ID_SPICOUNT] = { +#if TI_SPI_CONF_SPI0_ENABLE { .baseAddr = SSI0_BASE, .intNum = INT_SSI0_COMB, @@ -605,6 +637,8 @@ const SPICC26XXDMA_HWAttrsV1 spiCC26XXDMAHWAttrs[CC2650DK_7ID_SPICOUNT] = { .csnPin = CC2650DK_7ID_SPI0_CSN, .minDmaTransferSize = 10 }, +#endif +#if TI_SPI_CONF_SPI1_ENABLE { .baseAddr = SSI1_BASE, .intNum = INT_SSI1_COMB, @@ -619,35 +653,45 @@ const SPICC26XXDMA_HWAttrsV1 spiCC26XXDMAHWAttrs[CC2650DK_7ID_SPICOUNT] = { .clkPin = CC2650DK_7ID_SPI1_CLK, .csnPin = CC2650DK_7ID_SPI1_CSN, .minDmaTransferSize = 10 - } + }, +#endif }; const SPI_Config SPI_config[CC2650DK_7ID_SPICOUNT] = { +#if TI_SPI_CONF_SPI0_ENABLE { .fxnTablePtr = &SPICC26XXDMA_fxnTable, .object = &spiCC26XXDMAObjects[CC2650DK_7ID_SPI0], .hwAttrs = &spiCC26XXDMAHWAttrs[CC2650DK_7ID_SPI0] }, +#endif +#if TI_SPI_CONF_SPI1_ENABLE { .fxnTablePtr = &SPICC26XXDMA_fxnTable, .object = &spiCC26XXDMAObjects[CC2650DK_7ID_SPI1], .hwAttrs = &spiCC26XXDMAHWAttrs[CC2650DK_7ID_SPI1] }, +#endif }; const uint_least8_t SPI_count = CC2650DK_7ID_SPICOUNT; +#endif /* TI_SPI_CONF_ENABLE */ + /* * =============================== UART =============================== */ #include #include +#if TI_UART_CONF_ENABLE + UARTCC26XX_Object uartCC26XXObjects[CC2650DK_7ID_UARTCOUNT]; uint8_t uartCC26XXRingBuffer[CC2650DK_7ID_UARTCOUNT][32]; const UARTCC26XX_HWAttrsV2 uartCC26XXHWAttrs[CC2650DK_7ID_UARTCOUNT] = { +#if TI_UART_CONF_UART0_ENABLE { .baseAddr = UART0_BASE, .powerMngrId = PowerCC26XX_PERIPH_UART0, @@ -663,19 +707,24 @@ const UARTCC26XX_HWAttrsV2 uartCC26XXHWAttrs[CC2650DK_7ID_UARTCOUNT] = { .txIntFifoThr = UARTCC26XX_FIFO_THRESHOLD_1_8, .rxIntFifoThr = UARTCC26XX_FIFO_THRESHOLD_4_8, .errorFxn = NULL - } + }, +#endif }; const UART_Config UART_config[CC2650DK_7ID_UARTCOUNT] = { +#if TI_UART_CONF_UART0_ENABLE { .fxnTablePtr = &UARTCC26XX_fxnTable, .object = &uartCC26XXObjects[CC2650DK_7ID_UART0], .hwAttrs = &uartCC26XXHWAttrs[CC2650DK_7ID_UART0] }, +#endif }; const uint_least8_t UART_count = CC2650DK_7ID_UARTCOUNT; +#endif /* TI_UART_CONF_ENABLE */ + /* * =============================== UDMA =============================== */ diff --git a/arch/platform/simplelink/cc13xx-cc26xx/srf06/cc26x0/CC2650DK_7ID.h b/arch/platform/simplelink/cc13xx-cc26xx/srf06/cc26x0/CC2650DK_7ID.h index 3b2017de9..bde1ff107 100644 --- a/arch/platform/simplelink/cc13xx-cc26xx/srf06/cc26x0/CC2650DK_7ID.h +++ b/arch/platform/simplelink/cc13xx-cc26xx/srf06/cc26x0/CC2650DK_7ID.h @@ -49,6 +49,8 @@ extern "C" { #endif +#include "contiki-conf.h" + /* Includes */ #include #include @@ -275,7 +277,9 @@ typedef enum CC2650DK_7ID_GPTimers { * @brief Enum of I2C names */ typedef enum CC2650DK_7ID_I2CName { +#if TI_I2C_CONF_I2C0_ENABLE CC2650DK_7ID_I2C0 = 0, +#endif CC2650DK_7ID_I2CCOUNT } CC2650DK_7ID_I2CName; @@ -285,7 +289,7 @@ typedef enum CC2650DK_7ID_I2CName { * @brief Enum of NVS names */ typedef enum CC2650DK_7ID_NVSName { -#ifndef Board_EXCLUDE_NVS_INTERNAL_FLASH +#if TI_NVS_CONF_NVS_INTERNAL_ENABLE CC2650DK_7ID_NVSCC26XX0 = 0, #endif @@ -324,8 +328,12 @@ typedef enum CC2650DK_7ID_SDName { * @brief Enum of SPI names */ typedef enum CC2650DK_7ID_SPIName { +#if TI_SPI_CONF_SPI0_ENABLE CC2650DK_7ID_SPI0 = 0, +#endif +#if TI_SPI_CONF_SPI1_ENABLE CC2650DK_7ID_SPI1, +#endif CC2650DK_7ID_SPICOUNT } CC2650DK_7ID_SPIName; @@ -335,7 +343,9 @@ typedef enum CC2650DK_7ID_SPIName { * @brief Enum of UARTs */ typedef enum CC2650DK_7ID_UARTName { +#if TI_UART_CONF_UART0_ENABLE CC2650DK_7ID_UART0 = 0, +#endif CC2650DK_7ID_UARTCOUNT } CC2650DK_7ID_UARTName; diff --git a/arch/platform/simplelink/cc13xx-cc26xx/srf06/leds-arch.c b/arch/platform/simplelink/cc13xx-cc26xx/srf06/leds-arch.c index e5eae9d0f..23f1e1b53 100644 --- a/arch/platform/simplelink/cc13xx-cc26xx/srf06/leds-arch.c +++ b/arch/platform/simplelink/cc13xx-cc26xx/srf06/leds-arch.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, Texas Instruments Incorporated - http://www.ti.com/ + * Copyright (c) 2018, Texas Instruments Incorporated - http://www.ti.com/ * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -27,27 +27,32 @@ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. */ -/*---------------------------------------------------------------------------*/ /** - * \addtogroup simplelink-platform + * \addtogroup srf06-peripherals * @{ * * \file - * Driver for LaunchPad LEDs + * LED HAL definitions for the SmartRF06 Evaluation Board's LEDs. + * Common across all CC13xx/CC26xx devices for the SmartRF06 EB. + * \author + * Edvard Pettersen */ /*---------------------------------------------------------------------------*/ -/* Contiki API */ #include "contiki.h" #include "dev/leds.h" - +/*---------------------------------------------------------------------------*/ #include - +/*---------------------------------------------------------------------------*/ #include /*---------------------------------------------------------------------------*/ const leds_t leds_arch_leds[] = { + /* Red LED, AKA LED0 */ { .pin = Board_PIN_LED0, .negative_logic = false }, + /* Yellow LED, AKA LED1 */ { .pin = Board_PIN_LED1, .negative_logic = false }, + /* Green LED, AKA LED2 */ { .pin = Board_PIN_LED2, .negative_logic = false }, + /* Red-orange LED, AKA LED3 */ { .pin = Board_PIN_LED3, .negative_logic = false }, }; /*---------------------------------------------------------------------------*/ diff --git a/arch/platform/simplelink/cc13xx-cc26xx/srf06/srf06-sensors.c b/arch/platform/simplelink/cc13xx-cc26xx/srf06/srf06-sensors.c index 7e4468cbd..2bb2aee67 100644 --- a/arch/platform/simplelink/cc13xx-cc26xx/srf06/srf06-sensors.c +++ b/arch/platform/simplelink/cc13xx-cc26xx/srf06/srf06-sensors.c @@ -27,13 +27,14 @@ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. */ -/*---------------------------------------------------------------------------*/ /** - * \addtogroup simplelink-peripherals + * \addtogroup srf06-peripherals * @{ * * \file - * Generic module controlling Simplelink sensors + * Generic module controlling sensors on SmartRF06 Evaluation Board. + * \author + * Edvard Pettersen */ /*---------------------------------------------------------------------------*/ #include "contiki.h"