1
0
mirror of https://github.com/RIOT-OS/RIOT.git synced 2024-12-29 04:50:03 +01:00
RIOT/boards/common/particle-mesh/include/board.h

180 lines
4.8 KiB
C

/*
* Copyright (C) 2018 Inria
*
* This file is subject to the terms and conditions of the GNU Lesser
* General Public License v2.1. See the file LICENSE in the top level
* directory for more details.
*/
/**
* @ingroup boards_common_particle-mesh
* @{
*
* @file
* @brief Common board specific configuration for the Particle Mesh
*
* @author Alexandre Abadie <alexandre.abadie@inria.fr>
*/
#ifndef BOARD_H
#define BOARD_H
#include "cpu.h"
#include "board_common.h"
#ifdef __cplusplus
extern "C" {
#endif
/**
*
* @name Bootloader configuration options
* @{
*/
/** @brief Build a firmware suitable for the Particle bootloader
*
* If this is defined, additional metadata about the firmware is included in
* the firmware (called the module_info in Particle), and additional code is
* inserted in board setup.
*
* Do not define this manually; instead, set `PARTICLE_MONOFIRMWARE=1` as an
* variable in the build scripts like `BOARD` is defined, and the particle
* common make file defines it and configures suitable postprocessing of the
* binary.
*
* @see @ref boards_common_particle-mesh
*
*/
#ifdef DOXYGEN
#define PARTICLE_MONOFIRMWARE
#endif
/** @brief Limit Particle bootloader checksumming to the binary start
*
* If this define is set in the Makefile, the binary size announced to the
* bootloader is limited to the reset vector and the firmware metadata, and
* only that part is checksummed.
*
* This is useful when @ref drivers_periph_flashpage is used, as otherwise the
* firmware's writes on itself would invalidate its checksum.
*
* @see @ref boards_common_particle-mesh
*/
#ifdef DOXYGEN
#define PARTICLE_MONOFIRMWARE_CHECKSUMLIMIT
#endif
/** @brief Platform ID of the board for the Particle bootloader
*
* This is set by the individual board's build configuration, and gets used
* when building with @ref PARTICLE_MONOFIRMWARE; then, it is put into the
* module information for the board bootloader to verify that the firmware was
* built for the right device.
*
* The individual values are documented in the Particle DeviceOS source code in
* `build/platform-id.mk`.
*/
#ifdef DOXYGEN
#define PARTICLE_PLATFORM_ID
#endif
/** @} */
/**
* @name LED pin configuration
* @{
*/
#define LED0_PIN GPIO_PIN(0, 13)
#define LED1_PIN GPIO_PIN(0, 14)
#define LED2_PIN GPIO_PIN(0, 15)
#define LED_PORT (NRF_P0)
#define LED0_MASK (1 << 13)
#define LED1_MASK (1 << 14)
#define LED2_MASK (1 << 15)
#define LED_MASK (LED0_MASK | LED1_MASK | LED2_MASK)
#define LED0_ON (LED_PORT->OUTCLR = LED0_MASK)
#define LED0_OFF (LED_PORT->OUTSET = LED0_MASK)
#define LED0_TOGGLE (LED_PORT->OUT ^= LED0_MASK)
#define LED1_ON (LED_PORT->OUTCLR = LED1_MASK)
#define LED1_OFF (LED_PORT->OUTSET = LED1_MASK)
#define LED1_TOGGLE (LED_PORT->OUT ^= LED1_MASK)
#define LED2_ON (LED_PORT->OUTCLR = LED2_MASK)
#define LED2_OFF (LED_PORT->OUTSET = LED2_MASK)
#define LED2_TOGGLE (LED_PORT->OUT ^= LED2_MASK)
/** @} */
/**
* @name Button pin configuration
* @{
*/
#define BTN0_PIN GPIO_PIN(0, 11)
#define BTN0_MODE GPIO_IN_PU
/** @} */
/**
* @name Antenna selection configuration
* @{
*/
/** Choices in antenna outputs for the board's nRF radio
*
* @see board_nrfantenna_select */
enum board_nrfantenna_selection {
/** The board's built-in antenna */
BOARD_NRFANTENNA_BUILTIN,
/** The board's uFL connector */
BOARD_NRFANTENNA_EXTERNAL,
};
/** @brief Antenna output selection
*
* Drive the on-board antenna switch to connect the nRF radio to a given @p
* choice of antenna output.
*
* This can be called to change the antenna selection at runtime; for the
* default configuration that gets set during board initialization, see @ref
* boards_common_particle-mesh.
* */
void board_nrfantenna_select(enum board_nrfantenna_selection choice);
#if defined(BOARD_PARTICLE_XENON) || defined(DOXYGEN)
/** The GPIO pin used to drive the VCTL1 pin of antenna switch
*
* Rather than actuating this directly, consider using the @ref
* board_nrfantenna_select function.
*/
#define VCTL1_PIN GPIO_PIN(0, 24)
/** The GPIO pin used to drive the VCTL2 pin of antenna switch
*
* This definition is left out for boards whose VCTL2 is driven by an inverter
* from VCTL1.
*
* Rather than actuating this directly, consider using the @ref
* board_nrfantenna_select function.
*/
#define VCTL2_PIN GPIO_PIN(0, 25)
#endif
#ifdef BOARD_PARTICLE_ARGON
#define VCTL1_PIN GPIO_PIN(0, 25)
#define VCTL2_PIN GPIO_PIN(0, 2)
#endif
#ifdef BOARD_PARTICLE_BORON
#define VCTL1_PIN GPIO_PIN(0, 7)
#endif
/** @} */
#ifdef __cplusplus
}
#endif
#endif /* BOARD_H */
/** @} */